Crea tu propio panel de clima utilizando Grafana
Introducción
En esta guía aprenderás a construir tu propio panel de clima en el reTerminal utilizando Grafana, siguiendo el trabajo de 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 almacenar y extraer datos de series temporales en campos como el monitoreo de operaciones, métricas de aplicaciones, datos de sensores de Internet de las Cosas y análisis en tiempo real.
Grafana es una aplicación web de código abierto, multiplataforma, para analítica e interactividad visual. Proporciona gráficos, gráficas y alertas basadas en la web al conectarse con fuentes de datos compatibles. También existe una versión empresarial de Grafana con capacidades adicionales, disponible como instalación local o en la nube de Grafana Labs. Se puede expandir mediante un sistema de plugins. Los usuarios finales pueden crear paneles de monitoreo avanzados utilizando constructores de consultas interactivas. Grafana se compone de un front end y un back end, escritos en TypeScript y Go, respectivamente.
Para este proyecto, usaremos un ESP32 para recolectar lecturas de temperatura, humedad y presión. Posteriormente, se publicarán en una base de datos de series temporales en InfluxDB. InfluxDB se puede ejecutar localmente en una Raspberry Pi o en su nube; en este caso lo ejecutaremos en su servidor en la nube. Luego usaremos Grafana para mostrar la información almacenada en la base de datos. Grafana también se puede ejecutar localmente en la Raspberry Pi (o en el reTerminal), o en su servidor en la nube. Aquí lo instalaremos localmente en nuestro reTerminal. Si lo prefieres, no necesitas usar una Pi por separado para InfluxDB y Grafana; podrías ejecutar ambos localmente en el reTerminal. Sin embargo, no quiero dejar encendido el reTerminal todo el tiempo para recoger los datos.
Materiales necesarios
- reTerminal
- Fuente de alimentación
- ESP32
- Sensores Grove del Beginner Kit
- Protoboard
- Cables de protoboard
Configuración de Azure e InfluxDB
Primero crearemos una máquina virtual.
- Paso 1. Abre la siguiente página e inicia sesión en tus servicios de Microsoft Azure. Haz clic en
Virtual machines
y luego enCreate
.
- Paso 2. Selecciona el sistema Ubuntu 18.04 como sistema predeterminado en la máquina virtual. Haz clic en
Review + create
para continuar.
- Paso 3. Se mostrarán las configuraciones, haz clic en
Create
.
El proceso tomará unos minutos. Cuando finalice, haz clic en Go to resource
.
Esto te llevará a la página de la máquina virtual. Haz clic en Networking
, luego en Add inbound port rule
y añade 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 siguiente comando para descargar la imagen de InfluxDB:
sudo docker pull influxdb:2.1.1
- Paso 6. Ejecuta InfluxDB en segundo plano:
sudo docker run -d --name influxdb -p 8086:8086 influxdb:2.1.1
- Paso 7. Abre el navegador e ingresa
http://tu-ip:8086
(sustituyendotu-ip
). Haz clic en "Get Started".
- Paso 8. Registra el
Organization Name
yBucket Name
y luego haz clic en "Continue".
- Paso 9. Haz clic en
Data > API Tokens
Ya tenemos configurado Azure e InfluxDB, ahora pasaremos al ESP32.
Configuración del ESP32
Para recopilar los datos del clima, usaremos 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 utiliza dos módulos Grove del beginner kit porque ya incluyen la electrónica necesaria (resistencias, etc.).
- Paso 1. Abre Arduino IDE e instala las librerías. Proponemos dos métodos de instalación:
- Usar Library Manager
1. Abre Arduino IDE y haz clic en "Sketch" > "Include Library" > "Manage Libraries".
2. Escribe 'influxdb' en el cuadro de búsqueda.
3. Instala la librería 'InfluxDBClient for Arduino'.
- Instalación manual
1. cd <arduino-sketch-location>/library.
2. git clone https://github.com/tobiasschuerg/InfluxDB-Client-for-Arduino
3. Reinicia Arduino IDE
- Paso 2. Copia el siguiente código en el sketch:
#include <Wire.h> //Importar librerías necesarias
#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" //Nombre de red WiFi
#define WIFI_PASSWORD "xxxxxxxxxx" //Contraseña WiFi
#define INFLUXDB_URL "http://xxxxxxxx:8086" //URL del servidor InfluxDB v2
#define INFLUXDB_TOKEN "xxxxxxxxx" //Token de API de InfluxDB v2
#define INFLUXDB_ORG "xxxxxxx" //Organización de InfluxDB
#define INFLUXDB_BUCKET "xxxxxxx" //Bucket de InfluxDB
#define TZ_INFO "JST-9" //Zona horaria
DHT dht(4,DHT11); //Parámetros DHT y BMP
BMP280 bmp280;
int temp = 0; //Variables para lecturas
int humid = 0;
int pressure = 0;
//InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN, InfluxDbCloud2CACert); //Cliente InfluxDB con certificado preconfigurado
InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN);
Point sensor("weather"); //Punto de datos
void setup()
{
Serial.begin(115200); //Iniciar comunicación serie
dht.begin(); //Conexión con DHT
if(!bmp280.init()) //Conexión con BMP280
Serial.println("bmp280 init error!");
WiFi.mode(WIFI_STA); //Configurar wifi
wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to wifi"); //Conectar a WiFi
while (wifiMulti.run() != WL_CONNECTED)
{
Serial.print(".");
delay(100);
}
Serial.println();
sensor.addTag("device", DEVICE); //Agregar tag(s)
sensor.addTag("SSID", WIFI_SSID);
timeSync(TZ_INFO, "pool.ntp.org", "time.nis.gov"); //Sincronizar hora para validación de certificados
if (client.validateConnection()) //Verificar conexión con servidor
{
Serial.print("Connected to InfluxDB: ");
Serial.println(client.getServerUrl());
}
else
{
Serial.print("InfluxDB connection failed: ");
Serial.println(client.getLastErrorMessage());
}
}
void loop()
{
temp = dht.readTemperature(); //Leer temp
humid = dht.readHumidity(); //Leer humedad
pressure = bmp280.getPressure()/100; //Leer presión
sensor.clearFields(); //Limpiar campos
sensor.addField("temperature", temp); //Almacenar valor medido
sensor.addField("humidity", humid);
sensor.addField("pressure", pressure);
if (wifiMulti.run() != WL_CONNECTED)
Serial.println("Wifi connection lost");
if (!client.writePoint(sensor))
{
Serial.print("InfluxDB write failed: ");
Serial.println(client.getLastErrorMessage());
}
Serial.print("Temp: ");
Serial.println(temp);
Serial.print("Humidity: ");
Serial.println(humid);
Serial.print("Pressure: ");
Serial.println(pressure);
delay(1000);
}
Nota: Este código no está completo. Si configuras tu token de API y bucket, el código generado en la página de interfaz de Arduino (accesible desde tu panel de InfluxDB) ya contendrá la configuración correcta, solo tienes que copiarlo.
- Paso 3. Sube el código y revisa los resultados.
Después de un tiempo, veremos la información disponible en la base de datos InfluxDB, confirmando que el ESP32 funciona correctamente. Ahora instalaremos Grafana en nuestro reTerminal y lo configuraremos para mostrar la información.
Instalar y configurar Grafana en el reTerminal
A continuación instalaremos Grafana siguiendo las instrucciones en su sitio web para instalación en Debian o Ubuntu. Después simplemente iniciamos Grafana y configuramos para que se reinicie en cada arranque.
- Paso 1. Accede a la interfaz web de Grafana abriendo una pestaña nueva en el navegador, apuntando a
localhost:3000
. En el reTerminal, abre el navegador y escribehttp://localhost:3000
Luego configuramos la lectura de datos de InfluxDB ingresando la información del servidor y la autenticación. Todo puede encontrarse en la interfaz web de InfluxDB, similar a la información que tu ESP32 usa para publicar datos.
- Paso 2. Haz clic en el botón
Setting
y eligeData sources
.
- Paso 3. Teclea
InfluxDB
en el filtro y seleccionaInfluxDB
.
Ya hemos instalado y configurado Grafana en el reTerminal.
Configurar Grafana para usar Flux
Con Flux seleccionado como lenguaje de consulta en tu fuente de datos InfluxDB, configuraremos la conexión:
Paso 1. Configura la Connection y haz clic en Save & Test. La información es:
URL: Tu URL de InfluxDB, por ejemplo:
http://tu-ip:8086/
Organization: El nombre u ID de tu organización en InfluxDB.
Token: Tu token de API de InfluxDB.
Default Bucket: El bucket por defecto para consultas Flux.
Min time interval: El intervalo de tiempo mínimo de Grafana.
Grafana se conectará a la fuente de datos InfluxDB 2.0 y mostrará el resultado.
- Paso 2. Haz clic en
Add panel
.
- Paso 3. Vuelve a
InfluxDB
, sigue las instrucciones y crea el script.
- Paso 4. Copia y pega los scripts en el reTerminal.
- Paso 5. Revisa los resultados en el reTerminal; la información debería verse como se muestra a continuación: