Skip to main content

Crea tu propio panel de clima utilizando Grafana

image-20220124151124558

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.

Procesamiento de datos entre ESP32 y Grafana

Materiales necesarios

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 en Create.

image-20220124131855082

  • Paso 2. Selecciona el sistema Ubuntu 18.04 como sistema predeterminado en la máquina virtual. Haz clic en Review + create para continuar.

image-20220124132225793

  • Paso 3. Se mostrarán las configuraciones, haz clic en Create.

image-20220124132800871

El proceso tomará unos minutos. Cuando finalice, haz clic en Go to resource.

image-20220124133101855

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.

image-20220124133706479
  • 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

image-20220124134313484

  • Paso 5. Usa el siguiente comando para descargar la imagen de InfluxDB:
sudo docker pull influxdb:2.1.1

image-20220124134409253

  • Paso 6. Ejecuta InfluxDB en segundo plano:
sudo docker run -d --name influxdb -p 8086:8086 influxdb:2.1.1

image-20220124135326814

  • Paso 7. Abre el navegador e ingresa http://tu-ip:8086 (sustituyendo tu-ip). Haz clic en "Get Started".

image-20220124135533274

  • Paso 8. Registra el Organization Name y Bucket Name y luego haz clic en "Continue".

image-20220124135632177

  • Paso 9. Haz clic en Data > API Tokens

image-20220124140028985

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.).

Diagrama de conexión del ESP32

  1. 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'.
  1. 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.

Instrucciones de la interfaz Arduino InfluxDB

  • Paso 3. Sube el código y revisa los resultados.

image-20220124140133524

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.

Instalando Grafana

  • 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 escribe http://localhost:3000

Interfaz web de Grafana en localhost3000

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 elige Data sources.

image-20220124144300849

  • Paso 3. Teclea InfluxDB en el filtro y selecciona InfluxDB.

image-20220124144322352

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:

img

Grafana se conectará a la fuente de datos InfluxDB 2.0 y mostrará el resultado.

  • Paso 2. Haz clic en Add panel.

image-20220124143542830

  • Paso 3. Vuelve a InfluxDB, sigue las instrucciones y crea el script.

image-20220124143752559

  • Paso 4. Copia y pega los scripts en el reTerminal.

image-20220124143812005

image-20220124151052928

  • Paso 5. Revisa los resultados en el reTerminal; la información debería verse como se muestra a continuación:

image-20220124164221791

image-20220124151124558

Loading Comments...