Pular para o conteúdo principal

Crie Seu Próprio Dashboard de Clima Usando Grafana

image-20220124151124558

Introdução

Aqui vamos apresentar como criar seu próprio dashboard de clima no seu reTerminal usando Grafana, com crédito para Michaelm Klementsk.

InflexDB é um banco de dados de série temporal (TSDB) open-source desenvolvido pela empresa InfluxData. Ele é escrito na linguagem de programação Go para armazenamento e recuperação de dados de série temporal em áreas como monitoramento de operações, métricas de aplicações, dados de sensores da Internet das Coisas e análises em tempo real. Ele também oferece suporte para processamento de dados a partir do Graphite.

Grafana é um aplicativo web de análise e visualização interativa open source e multiplataforma. Ele fornece gráficos, diagramas e alertas para a web quando conectado a fontes de dados compatíveis. Uma versão licenciada Grafana Enterprise com capacidades adicionais também está disponível como instalação auto-hospedada ou como uma conta no serviço em nuvem Grafana Labs. Ele é expansível por meio de um sistema de plug-ins. Usuários finais podem criar dashboards de monitoramento complexos usando construtores de consultas interativos. O Grafana é dividido em front-end e back-end, escritos em TypeScript e Go, respectivamente.

Vamos usar um ESP32 para coletar leituras de temperatura, umidade e pressão. Elas serão então enviadas para um banco de dados de séries temporais no InfluxDB. O InfluxDB pode ser executado localmente em um Raspberry Pi ou no servidor em nuvem deles; nós vamos usar o servidor em nuvem. Em seguida, vamos usar um aplicativo de análise e visualização chamado Grafana para exibir as informações que foram armazenadas no banco de dados. O Grafana também pode ser executado localmente em nosso Raspberry Pi (ou reTerminal, neste caso) ou no servidor em nuvem deles. Vamos instalá‑lo e executá‑lo localmente no nosso reTerminal. Você não precisa usar um Pi separado para o InfluxDB e o Grafana, você pode executar ambos localmente no seu reTerminal se quiser – eu só não quero ter que deixar o reTerminal ligado o tempo todo para coletar os dados.

Data Processing Between ESP32 and Grafana

Materiais Necessários

Configuração do Azure e InflexDB

Precisamos criar primeiro uma máquina virtual.

  • Passo 1. Abra a página a seguir e faça login nos seus serviços Microsoft Azure. Clique em Virtual machines e clique em Create.

image-20220124131855082

  • Passo 2. Selecione o sistema Ubuntu 18.04 como sistema padrão na máquina virtual. Clique em Review + create e vá para a próxima página.

image-20220124132225793

  • Passo 3. Com todas as configurações selecionadas, clique em Create.

image-20220124132800871

O progresso levará um tempo; quando estiver concluído, clique no botão Go to resource.

image-20220124133101855

Em seguida, será exibida a página abaixo. Clique em Networking, escolha Add inbound port rule e adicione a porta 8086 com qualquer destino.

image-20220124133706479
  • Passo 4. Copie estes comandos para instalar o Docker e habilitá‑lo.
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

  • Passo 5. Use o comando para baixar a imagem do InfluxDB.
sudo docker pull influxdb:2.1.1

image-20220124134409253

  • Passo 6. Aplique o comando para executar o InfluxDB em segundo plano.
sudo docker run -d --name influxdb -p 8086:8086 influxdb:2.1.1

image-20220124135326814

  • Passo 7. Abra o seu navegador e então digite http://yourip:8086 (Seu IP). Clique em "Get Started" para usá‑lo.

image-20220124135533274

  • Passo 8. Anote o seu Organization Name e Bucket Name e então clique em "Continue"

image-20220124135632177

  • Passo 9. Clique em Data > API Tokens

image-20220124140028985

Azure e InflexDB agora estarão configurados; em seguida vamos passar para o ESP32.

Configuração do ESP32

Para coletar os dados do clima, vamos usar um ESP32 com um sensor DHT11 conectado ao pino 4 e um sensor de pressão BMP280 conectado à interface I2C (pinos 21 e 22). O exemplo aqui usa dois módulos de sensores Grove do beginner kit, pois eles já têm toda a eletrônica necessária integrada (resistores adicionais etc.).

ESP32 Circuit Diagram

  1. Usar o 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. Instalação Manual
1. cd <arduino-sketch-location>/library.
2. git clone https://github.com/tobiasschuerg/InfluxDB-Client-for-Arduino
3. Restart the Arduino IDE
  • Passo 2. Copie os códigos a seguir para o 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: Os códigos não estão finalizados. Se você configurar seu token de API e bucket, o código gerado na página de interface do Arduino acessada a partir do seu painel InfluxDB já conterá as informações de configuração corretas, então você só precisará copiá-lo para o seu código.

InfluxDB Arduino Interface Instructions

  • Passo 3. Faça o upload dos códigos e verifique os resultados.

image-20220124140133524

Depois de um tempo, podemos ver que as informações agora estão disponíveis em nosso banco de dados InfluxDB, então sabemos que nosso ESP32 está funcionando corretamente. Agora podemos prosseguir para instalar o Grafana no nosso reTerminal e configurá-lo para exibir as informações em nosso banco de dados.

Instalar e Configurar o Grafana no reTerminal

Em seguida, vamos instalar o Grafana seguindo as instruções do terminal descritas em seu site para uma instalação no Debian ou Ubuntu. Então só precisamos iniciar o Grafana e configurá-lo para reiniciar na inicialização.

Installing Grafana

  • Passo 1. Acesse a interface web do Grafana abrindo uma nova aba no navegador, apontando para localhost, porta 3000. Você pode abrir o navegador no seu reTerminal e digitar http://localhost:3000

Grafana Web Interface Localhost3000

Em seguida, precisamos configurá-lo para ler os dados do InfluxDB inserindo as informações do servidor e da autenticação. Tudo isso pode ser encontrado por meio da sua interface web do InfluxDB e é bastante semelhante às informações para as quais o seu ESP32 está publicando dados.

  • Passo 2. Clique no botão Setting e escolha Data sources.

image-20220124144300849

  • Passo 3. Digite InfluxDB no filtro e escolha InfluxDB.

image-20220124144322352

Agora instalamos e configuramos o Grafana no reTerminal

Configurar o Grafana para usar Flux

Com Flux selecionado como a linguagem de consulta em sua fonte de dados InfluxDB, vamos configurar a conexão InfluxDB:

img

O Grafana deve se conectar à fonte de dados InfluxDB 2.0 e retornar os resultados do teste.

  • Passo 2. Adicione o painel aqui.

image-20220124143542830

  • Passo 3. Volte para o InfluxDB, siga as instruções abaixo e então crie o script.

image-20220124143752559

  • Passo 4. Copie os scripts e cole-os no reTerminal.

image-20220124143812005

image-20220124151052928

  • Passo 5. Verifique os resultados no reTerminal e as informações devem ser exibidas como abaixo.

image-20220124164221791

image-20220124151124558

Loading Comments...