Construye Tu Propio Panel de Control Meteorológico Usando Grafana
Introducción
Aquí te presentaremos cómo hacer tu propio panel de control meteorológico en tu reTerminal usando Grafana, lo cual se le da crédito a Michaelm Klementsk.
InfluxDB es una base de datos de series temporales (TSDB) de código abierto desarrollada por la empresa InfluxData. Está escrita en el lenguaje de programación Go para el almacenamiento y recuperación de datos de series temporales en campos como monitoreo de operaciones, métricas de aplicaciones, datos de sensores del Internet de las Cosas y análisis en tiempo real. También tiene soporte para procesar datos de Graphite.
Grafana es una aplicación web de análisis y visualización interactiva multiplataforma de código abierto. Proporciona gráficos, diagramas y alertas para la web cuando se conecta a fuentes de datos compatibles. También está disponible una versión con licencia Grafana Enterprise con capacidades adicionales como instalación auto-hospedada o una cuenta en el servicio en la nube de Grafana Labs. Es expandible a través de un sistema de complementos. Los usuarios finales pueden crear paneles de control de monitoreo complejos usando constructores de consultas interactivos. Grafana está dividido en un front end y back end, escritos en TypeScript y Go, respectivamente.
Vamos a usar un ESP32 para recopilar lecturas de temperatura, humedad y presión. Estas luego se publicarán en una base de datos de series temporales en InfluxDB. InfluxDB puede ejecutarse localmente en una Raspberry Pi o en su servidor en la nube, vamos a usar su servidor en la nube. Luego vamos a usar una aplicación de análisis y visualización llamada Grafana para mostrar la información que se ha almacenado en la base de datos. Grafana también puede ejecutarse localmente en nuestra Raspberry Pi (o reTerminal en este caso) o en su servidor en la nube. Vamos a instalarlo y ejecutarlo localmente en nuestro reTerminal. No necesitas usar una Pi separada para InfluxDB y Grafana, podrías ejecutar ambos localmente en tu reTerminal si quisieras – simplemente no quiero tener que dejar el reTerminal funcionando todo el tiempo para recopilar los datos.
Materiales Requeridos
- reTerminal
- Fuente de Alimentación
- ESP32
- Sensores Grove del Kit para Principiantes
- Protoboard
- Cables Puente para Protoboard
Configuración de Azure e InfluxDB
Necesitamos crear una máquina virtual primero.
- Paso 1. Abre la siguiente página e inicia sesión en tus servicios de Microsoft Azure. Haz clic en
Virtual machines
y haz clic enCreate
.
- Paso 2. Selecciona el sistema Ubuntu 18.04 como sistema predeterminado en la máquina virtual. Haz clic en
Review + create
y ve a la siguiente página.
- Paso 3. Todas las configuraciones están seleccionadas, haz clic en
Create
.
El progreso tomará un tiempo, cuando esté completo, haz clic en el botón Go to resource
.
Luego se moverá a la página de abajo. Haz clic en Networking
, elige Add inbound port rule
y agrega el puerto 8086
con cualquier destino.

- Paso 4. Copia estos comandos para instalar docker y habilitarlo.
sudo apt udpate
sudo apt install docker docker-compose -y
sudo systemctl enable --now docker && sudo systemctl start docker
sudo systemctl status docker
- Paso 5. Usa el comando para descargar la imagen de InfluxDB.
sudo docker pull influxdb:2.1.1
- Paso 6. Aplica el comando para ejecutar InfluxDB en segundo plano.
sudo docker run -d --name influxdb -p 8086:8086 influxdb:2.1.1
- Paso 7. Abre tu navegador y luego ingresa
http://tuip:8086
(Tu IP). Haz clic en "Get Started" para usarlo.
- Paso 8. Registra tu
Organization Name
yBucket Name
y luego haz clic en "Continue"
- Paso 9. Haz clic en
Data > API Tokens
Azure e InflexDB ahora estarán configurados, a continuación nos moveremos al ESP32.
Configuración del ESP32
Para recopilar los datos meteorológicos, vamos a usar un ESP32 con un sensor DHT11 conectado al pin 4 y un sensor de presión BMP280 conectado a la interfaz I2C (pines 21 y 22). El ejemplo aquí está usando dos módulos de sensor Grove del kit para principiantes ya que ya tiene toda la electrónica requerida integrada en ellos (resistores adicionales, etc.).
- Paso 1. Abre el Arduino IDE e instala las librerías. Aquí proporcionamos dos instalaciones.
- Usar 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
- Instalación Manual
1. cd <arduino-sketch-location>/library.
2. git clone https://github.com/tobiasschuerg/InfluxDB-Client-for-Arduino
3. Restart the Arduino IDE
- Paso 2. Copia los siguientes códigos en el sketch.
#include <Wire.h> //Import the required libraries
#include "DHT.h"
#include "Seeed_BMP280.h"
#include <WiFiMulti.h>
WiFiMulti wifiMulti;
#define DEVICE "ESP32"
#include <InfluxDbClient.h>
#include <InfluxDbCloud.h>
#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
BMP280 bmp280;
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
void setup()
{
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
wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to wifi"); //Connect to WiFi
while (wifiMulti.run() != WL_CONNECTED)
{
Serial.print(".");
delay(100);
}
Serial.println();
sensor.addTag("device", DEVICE); //Add tag(s) - repeat as required
sensor.addTag("SSID", WIFI_SSID);
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.println(client.getServerUrl());
}
else
{
Serial.print("InfluxDB connection failed: ");
Serial.println(client.getLastErrorMessage());
}
}
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.println(client.getLastErrorMessage());
}
Serial.print("Temp: "); //Display readings on serial monitor
Serial.println(temp);
Serial.print("Humidity: ");
Serial.println(humid);
Serial.print("Pressure: ");
Serial.println(pressure);
delay(1000); //Wait 60 seconds
}
Nota: Los códigos no están terminados. Si configuras tu token de API y bucket, el código generado en la página de interfaz de Arduino accedida desde tu panel de InfluxDB ya contendrá la información de configuración correcta, por lo que solo necesitas copiarlo en tu código.
- Paso 3. Sube los códigos y verifica los resultados.
Después de un tiempo, podemos ver que la información ahora está disponible en nuestra base de datos InfluxDB, por lo que sabemos que nuestro ESP32 está funcionando correctamente. Ahora podemos proceder a instalar Grafana en nuestro reTerminal y configurarlo para mostrar la información en nuestra base de datos.
Instalar y Configurar Grafana en el reTerminal
A continuación, vamos a instalar Grafana siguiendo las instrucciones de terminal descritas en su sitio web para una instalación en Debian o Ubuntu. Luego solo necesitamos iniciar Grafana y configurarlo para que se reinicie al arrancar.
- Paso 1. Accede a la interfaz web de Grafana abriendo una nueva pestaña en el navegador, apuntando a localhost, puerto 3000. Puedes abrir tu navegador en tu reTerminal y escribir
http://localhost:3000
Luego necesitamos configurarlo para leer los datos de InfluxDB ingresando la información del servidor y autenticación. Todo esto se puede encontrar a través de tu interfaz web de InfluxDB y es bastante similar a la información a la que tu ESP32 está publicando datos.
- Paso 2. Haz clic en el botón
Setting
y eligeData sources
.
- Paso 3. Escribe
InfluxDB
en el filtro y eligeInfluxDB
.
Ahora hemos instalado y configurado Grafana en el reTerminal
Configurar Grafana para usar Flux
Con Flux seleccionado como el lenguaje de consulta en tu fuente de datos de InfluxDB, configuraremos la conexión de InfluxDB:
-
Paso 1. Configura la Connection y haz clic en Save & Test. La información respectivamente es:
-
URL: Tu URL de InfluxDB.
http://yourip:8086/
-
Organization: El nombre o ID de tu organización de InfluxDB.
-
Token: Tu token de API de InfluxDB.
-
Default Bucket: El bucket predeterminado para usar en las consultas Flux.
-
Min time interval: El intervalo mínimo de tiempo de Grafana.
-
Grafana debería conectarse a la fuente de datos de InfluxDB 2.0 y devolver los resultados de la prueba.
- Paso 2. Añade panel aquí.
- Paso 3. Regresa a
InfluxDB
, sigue las instrucciones a continuación y luego crea el script.
- Paso 4. Copia los scripts y pégalos en el reTerminal.
- Paso 5. Verifica los resultados en el reTerminal y la información debería mostrarse como se indica a continuación.