Skip to main content

Construye Tu Propio Panel de Control Meteorológico Usando Grafana

image-20220124151124558

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.

Data Processing Between ESP32 and Grafana

Materiales Requeridos

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 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 y ve a la siguiente página.

image-20220124132225793

  • Paso 3. Todas las configuraciones están seleccionadas, haz clic en Create.

image-20220124132800871

El progreso tomará un tiempo, cuando esté completo, haz clic en el botón Go to resource.

image-20220124133101855

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.

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 comando para descargar la imagen de InfluxDB.
sudo docker pull influxdb:2.1.1

image-20220124134409253

  • Paso 6. Aplica el comando para ejecutar InfluxDB en segundo plano.
sudo docker run -d --name influxdb -p 8086:8086 influxdb:2.1.1

image-20220124135326814

  • Paso 7. Abre tu navegador y luego ingresa http://tuip:8086(Tu IP). Haz clic en "Get Started" para usarlo.

image-20220124135533274

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

image-20220124135632177

  • Paso 9. Haz clic en Data > API Tokens

image-20220124140028985

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

ESP32 Circuit Diagram

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

InfluxDB Arduino Interface Instructions

  • Paso 3. Sube los códigos y verifica los resultados.

image-20220124140133524

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.

Installing Grafana

  • 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

Grafana Web Interface Localhost3000

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

image-20220124144300849

  • Paso 3. Escribe InfluxDB en el filtro y elige InfluxDB.

image-20220124144322352

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:

img

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

image-20220124143542830

  • Paso 3. Regresa a InfluxDB, sigue las instrucciones a continuación y luego crea el script.

image-20220124143752559

  • Paso 4. Copia los scripts y pégalos en el reTerminal.

image-20220124143812005

image-20220124151052928

  • Paso 5. Verifica los resultados en el reTerminal y la información debería mostrarse como se indica a continuación.

image-20220124164221791

image-20220124151124558

Loading Comments...