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:
- Placa DOIT ESP32 - ESP-WROOM-32 - WiFi / Bluetooth;
- Led Alto Brilho RGB - 5mm;
- Resistor 330R- 1/4W - 5%;
- Kit Jumper Macho Macho;
- Protoboard 400 Pontos;
- Sensor de Pressão - BMP 280;
- Módulo DHT - Sensor de Temperatura;
- Sensor de Chuva;
- Conversor AC/DC 90~240 VAC - 5VDC/1A - JP4;
- Fonte 12V - 5V/3,3V p/ Protoboard.
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.
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.
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:
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.
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.
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.
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 # 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:
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.
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
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:
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:
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
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ó.
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 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
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.
Construa um fluxo entre os três nós, como mostra o exemplo a seguir:
Procure por um nó Chart, das opções de dashboard, para adicionar a leitura de um dos sensores em um gráfico.
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.
Nâo achei outro assim detalhado e completo!!