Build Your Own Weather Dashboard Using Grafana
We here will introduce you how to make your own weather dashboard on your reTerminal using Grafana, which is given credit to Michaelm Klementsk.
InflexDB is an open-source time-series database (TSDB) developed by the company InfluxData. It is written in the Go programming language for storage and retrieval of time series data in fields such as operations monitoring, application metrics, Internet of Things sensor data, and real-time analytics. It also has support for processing data from Graphite.
Grafana is a multi-platform open source analytics and interactive visualization web application. It provides charts, graphs, and alerts for the web when connected to supported data sources. A licensed Grafana Enterprise version with additional capabilities is also available as a self-hosted installation or an account on the Grafana Labs cloud service. It is expandable through a plug-in system. End users can create complex monitoring dashboards using interactive query builders. Grafana is divided into a front end and back end, written in TypeScript and Go, respectively.
We are going to use an ESP32 to collect temperature, humidity and pressure readings. These will then be posted to a time-series database in InfluxDB. InfluxDB can be run locally on a Raspberry Pi or on their cloud server, we’re going to be using their cloud server. We’re then going to be using an analytics and visualisation application called Grafana to display the information that has been stored in the database. Grafana can also be run locally on our Raspberry Pi (or reTerminal in this case) or on their cloud server. We’re going to be installing and running it locally on our reTerminal. You don’t need to use a separate Pi for InfluxDB and Grafana, you could run both locally on your reTerminal if you’d like to – I just don’t want to have to leave the reTerminal running all the time in order to collect the data.
Azure and InflexDB Setup
We need to create a virtual machine first.
- Step 1. Open the following page and log in to your Microsoft Azure services. Click the
Virtual machinesand click
- Step 2. Select Ubuntu 18.04 system as default system in the virtual machine. Click
Review + createand go to the next page.
- Step 3. All the configurations are selected, click
The progess will take a while, when it is complete, click the
Go to resource button.
Then it will move to the below page. Click the
Add inbound port rule and add
8086 port with any destination.
- Step 4. Copy these commands to install the docker and enable it.
sudo apt udpate
sudo apt install docker docker-compose -y
sudo systemctl enable --now docker && sudo systemctl start docker
sudo systemctl status docker
- Step 5. Use the command to pull the InfluxDB image down.
sudo docker pull influxdb:2.1.1
- Step 6. Apply the command to run the InfluxDB background.
sudo docker run -d --name influxdb -p 8086:8086 influxdb:2.1.1
- Step 7. Open your browser and then input
http://yourip:8086(Your IP). Click "Get Started" to use it.
- Step 8. Record your
Bucket Nameand then click "Continue"
- Step 9. Click
Data > API Tokens
Azure and InflexDB now will be set up, next we will move to the ESP32.
To collect the weather data, we are going to be using an ESP32 with a DHT11 sensor connected to pin 4 and a BMP280 pressure sensor connected to the I2C interface (pins 21 and 22). The example here is using two Grove sensor modules from the beginner kit as it already has all of the required electronics built into them (additional resistors etc.).
- Use Library Manager
1. Open the Arduino IDE and click to the "Sketch" menu and then Include Library > Manage Libraries.
2. Type 'influxdb' in the search box
3. Install the 'InfluxDBClient for Arduino' library
- Manual Installation
1. cd <arduino-sketch-location>/library.
2. git clone https://github.com/tobiasschuerg/InfluxDB-Client-for-Arduino
3. Restart the Arduino IDE
- Step 2. Copy the following codes in the skecth.
#include <Wire.h> //Import the required libraries
#define DEVICE "ESP32"
#define WIFI_SSID "xxxxxxxx" //Network Name
#define WIFI_PASSWORD "xxxxxxxxxx" //Network Password
#define INFLUXDB_URL "http://xxxxxxxx:8086" //InfluxDB v2 server url, e.g. https://eu-central-1-1.aws.cloud2.influxdata.com (Use: InfluxDB UI -> Load Data -> Client Libraries)
#define INFLUXDB_TOKEN "xxxxxxxxx" //InfluxDB v2 server or cloud API token (Use: InfluxDB UI -> Data -> API Tokens -> <select token>)
#define INFLUXDB_ORG "xxxxxxx" //InfluxDB v2 organization id (Use: InfluxDB UI -> User -> About -> Common Ids )
#define INFLUXDB_BUCKET "xxxxxxx" //InfluxDB v2 bucket name (Use: InfluxDB UI -> Data -> Buckets)
#define TZ_INFO "JST-9" //InfluxDB v2 timezone
DHT dht(4,DHT11); //DHT and BMP sensor parameters
int temp = 0; //Variables to store sensor readings
int humid = 0;
int pressure = 0;
//InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN, InfluxDbCloud2CACert); //InfluxDB client instance with preconfigured InfluxCloud certificate
InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN);
Point sensor("weather"); //Data point
Serial.begin(115200); //Start serial communication
dht.begin(); //Connect to the DHT Sensor
if(!bmp280.init()) //Connect to pressure sensor
Serial.println("bmp280 init error!");
WiFi.mode(WIFI_STA); //Setup wifi connection
Serial.print("Connecting to wifi"); //Connect to WiFi
while (wifiMulti.run() != WL_CONNECTED)
sensor.addTag("device", DEVICE); //Add tag(s) - repeat as required
timeSync(TZ_INFO, "pool.ntp.org", "time.nis.gov"); //Accurate time is necessary for certificate validation and writing in batches
if (client.validateConnection()) //Check server connection
Serial.print("Connected to InfluxDB: ");
Serial.print("InfluxDB connection failed: ");
void loop() //Loop function
temp = dht.readTemperature(); //Record temperature
humid = dht.readHumidity(); //Record temperature
pressure = bmp280.getPressure()/100; //Record pressure
sensor.clearFields(); //Clear fields for reusing the point. Tags will remain untouched
sensor.addField("temperature", temp); // Store measured value into point
sensor.addField("humidity", humid); // Store measured value into point
sensor.addField("pressure", pressure); // Store measured value into point
if (wifiMulti.run() != WL_CONNECTED) //Check WiFi connection and reconnect if needed
Serial.println("Wifi connection lost");
if (!client.writePoint(sensor)) //Write data point
Serial.print("InfluxDB write failed: ");
Serial.print("Temp: "); //Display readings on serial monitor
delay(1000); //Wait 60 seconds
Note: The codes are not finished. If you set up your API token and bucket, the generated code on the Arduino interface page accessed from your InfluxDB dashboard will already contain the correct setup information, so you only need to copy it into your code.
- Step 3. Upload the codes and check the results.
After a while, we can see that the information is now available in our InfluxDB database, so we know that our ESP32 is working correctly. Now we can move on to installing Grafana on our reTerminal and setting it up to display the information in our database.
Install and Set Up Grafana On The reTerminal
Next, we are going to install Grafan by following the terminal instructions outlined on their website for an installation on Debian or Ubuntu. Then we just need to start Grafana and set it to re-start on bootup.
- Step 1. Access the Grafana web interface by opening up a new tab in the browser, pointing to localhost, port 3000. You can open your browser on your reTerminal and type
We then need to configure it to read in the data from InfluxDB by entering the sever and authentication information. This can all be found through your InfluxDB web interface and is quite similar to the information your ESP32 is publishing data to.
- Step 2. Click the
Settingbutton and choose
- Step 3. Type the
InfluxDBin the filter and choose
Now we have installed and set Up Grafana On The reTerminal
With Flux selected as the query language in your InfluxDB data source, we will configure the InfluxDB connection:
Step 1. Set the Connection and click Save & Test. The information respectively are:
Grafana should connect to the InfluxDB 2.0 datasource and returns the results of the test.
- Step 2. Add panel here.
- Step 3. Back to the
InfluxDB, follow the instrucions below and then create script.
- Step 4. Copy the scripts and paste them into the reTerminal.
- Step 5. Check the results on the reTerminal and the information should be shown as below.