Podemos dizer que os sensores são a forma de uma máquina sentir o mundo ao seu redor, visto que esse tipo de componente expressa algum tipo de reação física-química, transformando os valores coletadas em grandezas físicas, medições e dados. Uma das melhores formas de se aprender sobre sistemas IoT, será através da construção de plataformas voltadas a análise e monitoramento de sensores. O software de edição de fluxos Node-RED, possibilita a construção de um sistema de controle simples, visto que este dispõe de diversas opções voltadas ao desenvolvimento de projetos automatizados, transmitindo as informações coletadas por meio de gráficos e ferramentas próprias para o estudo de tais leituras. Neste post, iremos explorar a construção de um servidor local com monitoramento contínuo de dados meteorológicos, capaz de coletar as informações presente em um EPS32.

 

 

Circuito Elétrico

          Para concluir as atividades desse post, tenha em mãos os seguintes componentes:

          Você pode compra-los clicando nos links acima ou visitando nosso site: www.curtocircuito.com.br.      

          A construção do circuito elétrico irá exigir um valor de correte elétrica maior do que o fornecido internamente em placas DOIT ESP32,  portanto, iremos utilizar uma fonte de Protoboard como meio de fornecer uma alimentação externa para o projeto. A tensão de saída da fonte poderá ser ajustada entre 5V e 3,3V de acordo com a posição dos plugs amarelos, destacados na imagem abaixo, e no caso desse projeto, iremos ajusta-la em 5V. Verifique a polaridade da fonte antes de conectá-la ao Protoboard.

 

Ajuste a tensão de um lado da fonte para 5V e o outro 3,3V.



          LEDs RGB possuem quatro terminais, sendo três responsáveis por emitir as cores e um (o maior entre eles) a polaridade. A alimentação do LED será dividida entre Ánodo comum  ou Catodo comun, se for anodo conecte a fileira positiva, se for catodo na fileira negativa.

LED RGB possui polaridade, se for anodo conecte ao positivo, catodo ao negativo.

 

          Encaixe o LED no Protoboard, conectando os resistores de 330 Ω entre os pinos do LED e as portas digitais D02, D04 e D23 do ESP32, e alimente o pino maior de acordo com o tipo de LED.

Circuito elétrico para exemplificar a conexão de um LED RGB em uma placa ESP32.

 

Sensor de Chuva

          Este sensor emite leituras analógicas e digitais, ao entrar em contato com água, possibilitando diferenciar um chuvisco de uma tempestade. A leitura digital irá dentificar a presença de água sob as hastes metálicas do sensor, alternando entre 0 e 1, enquanto o valor analógico permite analisar a intensidade, variando de 0 á 4095. A pinagem do componente será divida da seguinte maneira:

 O sensor de chuva dispões de 4 pinos, sendo dois deles parte do sinal de comunicação.

 

          Encaixe os pinos GND e VCC nas fileiras de alimentação do Protoboard, o terminal D0 do sensor na porta digital D12 e A0 na porta D35. A leitura analógica será limitada a alguns terminais ao acionar o módulo Wi-Fi, sendo essas as portas ADC1 32, 33, 34, 35, 36 e 39.Como a largura de uma único placa mostra-se insuficiente para acoplar um ESP32, recomendamos a junção de dois Protoboards, e, caso opte por esse método, procure interligar as fileiras de alimentação.

O sensor de chuva deverá ser alimentado entre 3,3V a 5V, e conectar-se a um pino digital e outro analógico.



          Os valores do sensor serão interpretados de forma decrescente, ou seja, quanto menor for a leitura analógica, maior será o volume da chuva. O funcionamento do sensor será testado através do seguinte exemplo:

/* Projeto Curto Circuito - ESP32: Sensor de Chuva */
/* Sensor de Chuva - Pinagem e variáveis */
int pino_d = D0; /* Pino ligado ao D0 do sensor */
int pino_a = A0; /* Pino ligado ao A0 do sensor */
int val_d = 0; /* Armazena o valor lido do pino digital */
int val_a = 0; /* Armazena o valor lido do pino analógico */
/* LED */
int pin = D1; /* Vermelho */
int pin2 = D2; /* Azul */
void setup()
{
  Serial.begin(9600);
  /* Sensores INPUT */
  pinMode(pino_d, INPUT);
  pinMode(pino_a, INPUT);
  /* LEDs OUTPUT */
  pinMode(pin, OUTPUT);
  pinMode(pin2, OUTPUT);
}
void loop()
{ /* Armazena os valores de leitura */
  val_a = analogRead(pino_a); /* Se a leitura analógica for menor que 300 */
  if ( val_a < 1000)
  { /* Chuva intensa */
    digitalWrite(pin, 0); /* Desliga */
    digitalWrite(pin2, 1); /* Liga */
    Serial.println("Chuva Intensa");
    Serial.println(val_a );
  } /* Se a leitura analógica for menor que 500 e maior que 300 */
  if (val_a <= 3000 && val_a >= 1000)
  { // Chuva moderada
    digitalWrite(pin, 1); // Liga
    digitalWrite(pin2, 1); // Liga
    Serial.println("Chuva Moderada ou Chuvisco");
    Serial.println(val_a );
  } // Se a leitura analógica for maior que 500
  if ( val_a > 4000)
  { // Sem previsão de Chuva
    digitalWrite(pin, 1); // Liga
    digitalWrite(pin2, 0); // Desliga
    Serial.println("Sem previsão de chuva");
    Serial.println(val_a );
  }
}
 

     A leitura analógica em val_a será inicialmente de 4095, tal valor irá diminuir ao aplicar água sob as hastes do sensor, acima de 3000. irá representar um leve gotejar, até 1000, chuva moderada, e abaixo disso poderá ser considerado como tempestade.

Mólo DT2

          O módulo DHT 22 facilita a construção de plataformas voltadas a estudos climáticos, pois simplifica a leitura de umidade e temperatura em um único componente, com precisão que varia de 2% á 5% e tempo de resposta de até dois segundos. A leitura da Temperatura alcança uma faixa de -40° á 80º, e para a Umidade de 0% á 100%. Esse tipo de sensor poderá ser encontrado de duas formas distintas, uma com o padrão comum apresentando quatro terminais, e outro em um módulo que irá resumir a quantidade de terminais para três. A diferença entre eles encontra-se na construção do circuito elétrico, enquanto o modelo comum exigi a aplicação de um resistor de pull-up e o isolamento de um terminal, o módulo poderá ser aplicado diretamente ao microcontrolador.

A diferença entre o módulo DHT e o padrão comum será observado na quantidade de terminais, e no circuito elétrico necessário para o funcionamento de ambos.


          A pinagem do sensor será distribuída de acordo com a imagem seguir, sendo a alimentação lógica entre 3,3 á 5 V, o ENB deverá ser isolado, ou seja, não será conectado a nenhum terminal, e o píno OUT será o sinal de leitura, que no caso do sensor comum de quatro terminais deverá ser acompanhado por um resistor de aproximadamente 10KΩ.

A leitura de umidade e temperatura serão alocados no pino OUT.

 

          Caso tenha optado por utilizar o módulo conecte os pinos de alimentação no Protoboard, e o pino OUT na porta D14.
 
O módulo DHT 22 deve ser conectado a um pino diigital, e no caso desse exemplo será o pino D14.



          Se optou pelo modelo comum de quatro terminais, conecte os pinos de alimentação nas fileiras do protoboard, um resistor de 10KΩ entre a porta digital D14 e o pino 2 do sensor, um jumper entre o resistor e polo positivo do Protoboard, e pino ENB deverá ser isolado. 

O modelo padrão de sensor DHT22 irá seguir o seguinte parâmetro, isolando o terceiro terminal.
 


          Adicione uma biblioteca auxiliar referentes ao desenvolvimento de programações com este tipo sensor, no caso dos exemplos a seguir utilizamos o “DHT sensor library”, que poderá ser facilmente instalada através do Gerenciador de Bibliotecas da IDE do software Arduino.

 

Para auxiliar no desenvolvimento de programações referentes ao sensor DHT22, recomenda-se adicionar ao menos uma biblioteca.

A biblioteca DHT trará consigo algumas funções próprias para simplificar a coleta de leituras climáticas,  em dht.readHumidity() iremos obter os valores referentes a umidade, enquanto o dht.readTemperature() nos fornecerá a temperatura ambiente. Em #define DHTTYPE, definimos o tipo de sensor DHT que será atribuído a programação, sendo eles divididos entre: DHT11, DHT21, DHT22.


BMP280

          O módulo BMP 280 é utilizado para obter leituras referentes à Altitude, Pressão e Temperatura, com precisão de 1% e tempo de resposta em aproximadamente dois segundos. A faixa de leitura para a temperatura será similar ao apresento pelo módulo DHT22, a pressão será de 30000 á 110000 Pa (Pascal), e a altitude de 100000 á 100 m (metros). A pinagem será divida entre:

 

O sensor BMP280 dispões de 4 pinos para leitura de sinais referentes a temperatura, pressão e altitude.

 Para adiciona-lo ao circuito, conecte os pinos de alimentação no Protoboard, SCK na porta D4, SDA porta D5, CS porta D18, e SDO porta D19.

BMP 280

 Nos exemplos a seguir utilizamos a biblioteca  “Adafruit BMP280 Library”, que pode ser facilmente instalada através do Gerenciador de Bibliotecas da IDE do software Arduino

Para auxiliar no desenvolvimento de programações referentes ao sensor BMP280, recomenda-se adicionar ao menos uma biblioteca.

 

As leituras de pressão variam de acordo com a altitude e as condições de temperatura no ar, quanto maior for a altitude em relação ao mar, menor será a pressão. A proporção para comparar a leitura com o nível do mar poderá ser dada pelos seguintes valores:

Os valores e pressão e altitude serão inversamente proporcionais.

A função #include "Adafruit_BMP280.h" inclui a biblioteca na programação, adicionando alguns comandos como bmp280.readTemperature(), aplicado a leitura da temperatura, ou bmp280.readPressure(), na análise da pressão. A leitura da altitude será realizada através do comando bmp280.readAltitude(1013.25), que irá utilizar o valor de 1013.25 na realização de um cálculo simples de conversão, exibindo a unidade de medida dos resultados coletados em metros.


Node-RED: Host Local

 

A comunicação entre o ESP32 e o servidor será estabelecida pelo editor de fluxos Node-RED, se este for o seu primeiro contato com esta plataforma, realize o download do software Node.js e HiveMQ.  Para intalar o Node.js abra o Prompt de Comando do computador (escreva prompt na barra de pesquisa do menu iniciar), escreva npm install -g --unsafe-perm node-red e aguarde o termino da instalação do programa. 

A conexão local requer a execução do protocolo MQTT juntamente ao Node.JS, portanto, procure nos arquivos adiquiridos da HiveMQ a pasta bin e clique duas vezes em run, em seguida, abra uma nova janela do Prompt e escreva node-red,aguarde o termino do processamento, e por fim, procure na última linha pela frase: 

Conecte to Broker: test @mqtt:

Para conectar o ESP e Node-RED por meio de um host local, será necessário acessar o prompt com o comando : node-red

 

O valor encontrado em Conecte to Broker será adicionado a função const char * mqtt_server, presente na programação a seguir, adicione toda a numeração com exceção do final 1883.  

 

A função client.publish será utilizada na transmissão dos valores barométricos, através de ferramentas lógicas como "event", que, como o próprio nome sugere, será utilizado na construção de eventos que direcionam a coleta de informações do Node-RED, e variáveis como HUMString e TempString, por exemplo, que armazenam as leituras coletadas em float t = dht.readTemperature() e float h = dht.readHumidity(), e  as enviam aos seus respectivos eventos.


Comunicação ESP-Node

 

O funcionamento do client.publish será avaliado através da comunicação entre o ESP32 e o Node-RED, portanto, acesse o navegador de internet e escreva: localhost:1880

Acesse um navegador da internet e escreva o endereço de seu host local.

 

Adicione um MQTT Input e um Debug a área de trabalho, conecte-os e clique duas vezes em MQTT para acessar as opções de configuração do nó.

O nó MQTT Input será utilizado para coleta informações presente no ESP32

 

 Clique no botão , adicione o valor de IP em Server, retorne a opção Topic escreva “event” e clique em Done.

const char* mqtt_server = "192.xxx.xx.xx";

A opção Topic irá direcionar a leitura do nó para o caminho especificado, no caso desse exemplo, será o caminho event.

 

 Clique no botão Deploy para implantar a atualização da lógica, selecione a opção Debug clicando no botão  e visualize as mensagens recebidas pelo servidor.
 
A opção debug irá exibir as mensagens coletadas no ESP32.
 

A mensagem será composta pela  frase "Hello Word", juntamente a uma contagem crescente contínua, isto porque no nó MQTT Input direcionamos a leitura do nó para o comando event, que está conectado ao conteúdo da variável msg. 

client.publish("event", msg);

 


Dashboard: Construindo Gráficos

 
          Ferramentas Dashboard servirão para editar a aparência do navegador, gerando gráficos, medidores de níveis, chaves, botões de acionamento, etc. Portanto, para adicionar um conjunto dessas ferramentas a paleta de edição do Node-RED, clique no botão e selecione a opção Manage Palette. Em Install escreva “dashboard”, procure a opção node-red-dasboard e clique em instalar.
 
O Dashboard do Node-RED possibilita a edição de um layout próprio.
 
 A primeira opção que iremos explorar desse conjunto será o nó Gauge, que possibilita a construção de uma análise por barra de nível, level, donut ou compasso.
A ferramenta gauge implanta um monitor por level para o layout do navegador.
 
 Nas configurações ajuste a unidade de medida para Celsius (Cº),  tipo de objeto como Gauge e valor mínimo  -10 e máximo 50, as demais possibilidades de edição serão opcionais, e não irão influenciar no funcionamento do nó.
 
O gauge dispões de 4 opções de ferramentas para análise em level.
 
 

Cada leitura individual exigirá a adição de outro nó MQTT Input e um Debug, configure tal qual demonstrado anteriormente, alterando apenas a opção Topic, este deverá conter um caminho para a leitura de algum dos sensores presentes no circuito, no caso do exemplo abaixo, iremos ajustar a leitura da temperatura.

Topic servirá para direcionar a leitura do servidor para um determinado evento.

Construa um fluxo entre os três nós, como mostra o exemplo a seguir:

O fluxo irá direcionar a leitura para o event4, caminho especificado na programação.

 
Clique em Deploy, abra outra página no navegador e escreva:  http://localhost:1880/ui/
 
O modelo gauge irá exibir uma ferramenta com barra de progresso similar a um desenho de acelerômetro.
 

 

Procure por um nó Chart, das opções de dashboard, para adicionar a leitura de um dos sensores em um gráfico.

A ferramenta Chart adiciona modelos de gráfico.

 
Nas configurações de Chart escolha o tipo como Line, isto irá imprimir as informações em um gráfico linar. As demais opções serão aplicadas no formato da leitura, criando um intervalo de tempo, limitando o alcance da leitura, ou alterando o designe de cores dos dados exibidos.
 
O chart apresenta 6 modelo de gráficos.
 
Adicione um nó MQTT Input e um Debug, configure a opção Topic com outro evento, dessa vez, iremos focar na análise da altitude.
Topic event2 servirá para direcionar a leitura do servidor para a leitura do sensor de altitude.
 
Construa um fluxo entre os nós, clique no botão Deploy  e volte à página: http://localhost:1880/ui/
 
A ferramenta Chart irá adicionar um modelo de gráfico, com a leitura em tempo real do sensor.
 
Repita os processos apresentados acima para os demais eventos declarados na programação:
As variáveis apresentadas devem ser introduzidas ao nós lógicos do Node-RED.
 
O MQTT realizará a leitura de um único evento, portanto, cada caminho deverá receber um nó exclusivo.
 
Exemplo de fluxos para cada tipo de leitura
 
          O controle de componentes requer a construção de um novo tipo fluxo de comunicação, que, ao invés de coletar irá transmitir informações, portanto, adicione um nó MQTT Output e um Debug. O acionamento do LED RGB será estabelecido por um nó Switch do conjunto Dashboard.
 
O nó Switch será utilizado na construção de uma chave ON/OFF para o acionamento do LED.
 
 
Nas opções do Switch, será necessário ajustar o tipo de mensagem como String, com valores 1 (HIGH) e 0 (LOW), e em Topic escreva “led”.
 
Utilize valores binários como 0 ou 1 para ligar e desligar componentes.
 
 
O nó MQTT Output será responsável por enviar comandos ao ESP32, este deverá ser configurado como os demais, inserindo o endereço de IP e o Topic como event.
Configure o MQTT Output da mesma forma apresentada no MQTT Input.
 
        Lembre-se de clicar em Deploy sempre que desejar implantar as atualizações geradas no sistema. As informações serão atualizadas em tempo real, de acordo com os valores de leitura coletado nos sensores barométrico, porém, serão exibidas apenas enquanto o Prompt e o HiveMQ estiverem abertos no computador.
 
Personalize o layout de seu Node-RED, adicione ferramentas para auxiliar no monitoramento da estação meteorológica.
 
 

Considerações Finais

          Comunicações em redes locais permitem uma implementação de baixa complexidade, com poucos requisitos de processamento, sendo uma aplicação mais simples na construção inicial de sistemas automatizados.  As ferramentas disponíveis tanto no Node-RED, quanto no ESP32, permitirão a construção de uma plataforma supervisória acessível e de baixo custo para sistemas ecoeficiêntes como coberturas vivas (telhado verde), jardim suspenso, setores agrônomos, ou até mesmo bacías hidrográficas, que necessitam de um controle capaz de analisar condições climáticas e ambientais. E, projetos como o proposto neste post, seriam aliados importantes no controle e monitoramento de tais leituras. Nos próximos capítulos, iremos explorar uma melhoria importante para tal sistema, a aplicação de um host particular, permitindo o armanezamento das informações na nuvem, e o acesso de qualquer aparelho conectado a internet.