Relatório Técnico do Projeto: Desenvolvimento de um Sistema
de Monitoramento de Temperatura e Umidade com ESP32,
DHT11, MQTT e Node-RED
Neste relatório, apresentamos o desenvolvimento e a implementação de um projeto
que utiliza um microcontrolador ESP32 e um sensor DHT11 para a medição de
temperatura e umidade. Os dados coletados são transmitidos a um broker Mosquitto
MQTT e subsequentemente visualizados em um painel Node-RED.
1. Introdução e Objetivos do Projeto
O objetivo central deste projeto foi desenvolver um sistema para o monitoramento
de condições ambientais, especificamente temperatura e umidade, e apresentar os
dados coletados de maneira clara e acessível. Em nossa implementação, o ESP32
realiza a leitura dos sensores e publica os dados via Wi-Fi para um broker MQTT. O
Node-RED, que configuramos, subscreve-se aos tópicos MQTT designados para
exibir as informações em um dashboard, o qual inclui médias móveis das leituras
para suavização dos dados.
2. Materiais e Métodos
Para a execução deste projeto, utilizamos os seguintes componentes de hardware e
software:
Hardware:
● Microcontrolador ESP32
●
● Sensor de temperatura e umidade DHT11
●
● Resistor de 10k Ohm
●
● Protoboard
●
● Fios de conexão
●
Software:
● PlatformIO (utilizado preferencialmente) ou Arduino IDE
●
● Broker Mosquitto MQTT
●
● Node-RED
●
● Node-RED Dashboard
●
3. Configuração do Sistema
3.1. Montagem do Hardware:
Realizamos as conexões entre o sensor DHT11 e o ESP32 conforme as seguintes
especificações:
● O pino VCC do DHT11 foi conectado ao pino 3V3 do ESP32.
●
● O pino GND do DHT11 foi conectado ao pino GND do ESP32.
●
● O pino de DADOS do DHT11 foi conectado ao GPIO 4 do ESP32.
●
● Um resistor de 10k Ohm foi conectado entre o pino de DADOS do DHT11 e o
pino 3V3 do ESP32. A montagem física buscou replicar o diagrama de
circuito ilustrado.
●
3.2. Instalação e Configuração do Software:
Procedemos com a instalação e configuração dos seguintes softwares:
● VSCode com PlatformIO (nossa ferramenta de desenvolvimento preferencial)
ou, alternativamente, a Arduino IDE.
●
● Broker Mosquitto MQTT.
●
● Node-RED.
●
● Node-RED Dashboard.
●
3.3. Implantação do Código Firmware:
O código firmware desenvolvido ([Link]) foi carregado no microcontrolador
ESP32.
4. Execução do Projeto
Para a operação do sistema, seguimos a seguinte sequência de inicialização:
1. Iniciamos o broker Mosquitto.
2.
3. Iniciamos o Node-RED e acessamos o painel (dashboard) previamente
configurado.
4.
5. Alimentamos eletricamente o ESP32.
6.
5. Detalhamento da Configuração dos Componentes Chave
5.1. Broker MQTT (Mosquitto)
● Realizamos o download e a instalação do Mosquitto MQTT Broker.
●
● O broker foi iniciado utilizando sua configuração padrão através do comando
mosquitto no terminal.
●
● No arquivo de configuração [Link] (localizado, por exemplo, em
/etc/mosquitto/[Link] ), foi fundamental definir a opção allow_anonymous
como true.
●
● Adicionalmente, configuramos o listener para 1883 [Link], conforme ilustrado
na documentação. O arquivo de configuração principal pode referenciar
diretórios externos (include_dir) para arquivos de configuração adicionais
(.conf); esta diretiva, quando utilizada, deve preferencialmente ser a última no
arquivo principal. Arquivos dentro de um include_dir são processados em
ordem alfabética (maiúsculas primeiro), e múltiplas instâncias de include_dir
são processadas sequencialmente.
●
5.2. Node-RED
● Efetuamos o download e a instalação do Node-RED.
●
● O Node-RED foi iniciado através do comando node-red no terminal.
●
● A criação de fluxos no Node-RED demonstrou ser um processo intuitivo. O
painel do Node-RED, onde os dados são visualizados, foi acessado via
[Link] A interface do Node-RED exibia os fluxos configurados
para temperatura e umidade, que alimentavam os gráficos de "Temperature
x Time" e "Humidity x Time".
●
6. Descrição do Código Firmware ([Link])
O arquivo [Link], desenvolvido por João Alex Arruda da Silva em janeiro de 2024,
contém a lógica embarcada no ESP32. Este firmware é responsável por ler os
dados de temperatura e umidade do sensor DHT11, calcular a média móvel das
últimas 5 leituras e publicar os valores resultantes em um broker MQTT.
Bibliotecas Utilizadas:
● Adafruit_Sensor.h
●
● Arduino.h
●
● DHT.h
●
● PubSubClient.h
●
● WiFi.h
●
Parâmetros de Configuração:
● Conexão Wi-Fi: As credenciais da rede (SSID e senha) foram definidas
como const char *ssid = "joaoalex1"; e const char *password = "joao1579";.
●
● Broker MQTT: O endereço do servidor MQTT foi configurado como const
char *mqttServer = "[Link]"; e a porta como const int mqttPort = 1883;.
●
● Média Móvel: O número de leituras para o cálculo da média móvel foi
estabelecido em const int numReadings = 5;. Os arrays temperatureReadings e
humidityReadings foram inicializados com -1.0 para indicar a ausência de
dados válidos.
●
● Sensor DHT: O pino de dados do DHT11 foi definido como GPIO 4 (#define
DHTPIN 4) e o tipo do sensor como DHT11 (#define DHTTYPE DHT11). Uma
instância WiFiClient (espClient) foi utilizada para a comunicação TCP.
●
Funções Principais Implementadas:
● setupWifi(): Estabelece a conexão com a rede Wi-Fi. A função aguarda até
que a conexão seja bem-sucedida.
●
● reconnect(): Tenta restabelecer a conexão com o broker MQTT em caso de
falha, com novas tentativas a cada 5 segundos.
●
● updateReadings(float *readings, float newValue): Adiciona uma nova leitura ao
respectivo array (temperatura ou umidade) e atualiza o índice de forma
circular para manter um histórico das últimas numReadings leituras.
●
● calculateMovingAverage(float *readings): Calcula a média móvel das leituras
armazenadas, desconsiderando os valores placeholder -1.0. Retorna -1.0 se
não houver leituras válidas para o cálculo.
●
● setup(): Função de inicialização executada uma vez quando o ESP32 é
energizado. Inicializa a comunicação serial ([Link](115200)), o sensor
DHT ([Link]()), estabelece a conexão Wi-Fi (setupWifi()) e configura o
cliente MQTT com o endereço e porta do broker ([Link](mqttServer,
mqttPort)).
●
● loop(): Função principal executada continuamente.
○ Verifica o estado da conexão com o broker MQTT e chama reconnect()
se necessário.
○
○ Realiza a leitura dos valores de umidade e temperatura do sensor
DHT11.
○
○ Valida as leituras (verificando se não são NaN). Em caso de falha na
leitura, uma mensagem de erro é registrada no serial e o loop é
reiniciado após 2 segundos.
○
○ Atualiza os arrays de leituras com os novos valores de temperatura e
umidade.
○
○ Calcula as médias móveis para temperatura e umidade.
○
○ Converte os valores float (temperatura, umidade e suas médias
móveis) para strings utilizando dtostrf.
○
○ Define os nomes dos tópicos MQTT para publicação:
esp32/temperature, esp32/humidity, esp32/moving_average_temperature, e
esp32/moving_average_humidity.
○
○ Publica os valores formatados nos respectivos tópicos MQTT.
○
○ Imprime os valores lidos, as médias calculadas e os tópicos de
publicação no monitor serial para fins de depuração.
○
○ Aguarda 3 segundos antes de iniciar um novo ciclo de leitura e
publicação.
○
7. Diagnóstico e Solução de Problemas
● Verificamos a correção da montagem do hardware, atentando para a
pinagem correta, especialmente se um modelo de ESP32 diferente do
especificado fosse utilizado, o que poderia implicar em diferentes pinos
GPIO.
●
● A saída serial do ESP32 demonstrou ser uma ferramenta valiosa para
depuração. O código implementado utiliza [Link] para exibir os valores
de temperatura, umidade, médias móveis e os tópicos MQTT de publicação,
facilitando o acompanhamento e a identificação de problemas.
●
8. Considerações Finais
● O código fonte foi comentado para elucidar a funcionalidade de cada seção.
●
● Reconhecemos que o sensor DHT11, apesar de ser de baixo custo,
apresenta limitações em termos de precisão e confiabilidade, sendo mais
adequado para fins didáticos do que para aplicações que exigem alta
fidelidade.
●
● Observamos que a configuração do ambiente de desenvolvimento e das
dependências tende a ser mais direta em sistemas operacionais baseados
em Linux (como o Ubuntu) em comparação com o Windows.
●
● A utilização do VSCode em conjunto com o PlatformIO foi preferida em
relação à Arduino IDE devido aos recursos avançados que oferece, como
autocompletar código, análise estática e integração com sistemas de
controle de versão.
●
● O ESP32 provou ser um microcontrolador robusto e versátil para este
projeto, oferecendo os recursos necessários e facilidade de uso.
●
● Ressaltamos que, embora uma imagem na documentação exiba um Arduino
Uno, este componente não foi utilizado no projeto; o ESP32 foi o único
microcontrolador empregado.
●
Relatório Técnico do Projeto: Desenvolvimento de um Sistema de Monitoramento de
Temperatura e Umidade com ESP32, DHT11, MQTT e Node-RED
Neste relatório, apresentamos o desenvolvimento e a implementação de um projeto que
utiliza um microcontrolador ESP32 e um sensor DHT11 para a medição de temperatura e
umidade. Os dados coletados são transmitidos a um broker Mosquitto MQTT e
subsequentemente visualizados em um painel Node-RED.
1. Introdução e Objetivos do Projeto
O objetivo central deste projeto foi desenvolver um sistema para o monitoramento de
condições ambientais, especificamente temperatura e umidade, e apresentar os dados
coletados de maneira clara e acessível. Em nossa implementação, o ESP32 realiza a leitura
dos sensores e publica os dados via Wi-Fi para um broker MQTT. O Node-RED, que
configuramos, subscreve-se aos tópicos MQTT designados para exibir as informações em
um dashboard, o qual inclui médias móveis das leituras para suavização dos dados.
2. Materiais e Métodos
Para a execução deste projeto, utilizamos os seguintes componentes de hardware e
software:
Hardware:
● Microcontrolador ESP32
● Sensor de temperatura e umidade DHT11
● Resistor de 10k Ohm
● Protoboard
● Fios de conexão
Software:
● PlatformIO (utilizado preferencialmente) ou Arduino IDE
● Broker Mosquitto MQTT
● Node-RED
● Node-RED Dashboard
3. Configuração do Sistema
3.1. Montagem do Hardware:
Realizamos as conexões entre o sensor DHT11 e o ESP32 conforme as seguintes
especificações:
● O pino VCC do DHT11 foi conectado ao pino 3V3 do ESP32.
● O pino GND do DHT11 foi conectado ao pino GND do ESP32.
● O pino de DADOS do DHT11 foi conectado ao GPIO 4 do ESP32.
● Um resistor de 10k Ohm foi conectado entre o pino de DADOS do DHT11 e o pino
3V3 do ESP32. A montagem física buscou replicar o diagrama de circuito ilustrado.
3.2. Instalação e Configuração do Software:
Procedemos com a instalação e configuração dos seguintes softwares:
● VSCode com PlatformIO (nossa ferramenta de desenvolvimento preferencial) ou,
alternativamente, a Arduino IDE.
● Broker Mosquitto MQTT.
● Node-RED.
● Node-RED Dashboard.
3.3. Implantação do Código Firmware:
O código firmware desenvolvido ([Link]) foi carregado no microcontrolador ESP32.
4. Execução do Projeto
Para a operação do sistema, seguimos a seguinte sequência de inicialização:
1. Iniciamos o broker Mosquitto.
2. Iniciamos o Node-RED e acessamos o painel (dashboard) previamente configurado.
3. Alimentamos eletricamente o ESP32.
5. Detalhamento da Configuração dos Componentes Chave
5.1. Broker MQTT (Mosquitto)
● Realizamos o download e a instalação do Mosquitto MQTT Broker.
● O broker foi iniciado utilizando sua configuração padrão através do comando
mosquitto no terminal.
● No arquivo de configuração [Link] (localizado, por exemplo, em
/etc/mosquitto/[Link] ), foi fundamental definir a opção allow_anonymous
como true.
● Adicionalmente, configuramos o listener para 1883 [Link], conforme ilustrado na
documentação. O arquivo de configuração principal pode referenciar diretórios
externos (include_dir) para arquivos de configuração adicionais (.conf); esta diretiva,
quando utilizada, deve preferencialmente ser a última no arquivo principal. Arquivos
dentro de um include_dir são processados em ordem alfabética (maiúsculas
primeiro), e múltiplas instâncias de include_dir são processadas sequencialmente.
5.2. Node-RED
● Efetuamos o download e a instalação do Node-RED.
● O Node-RED foi iniciado através do comando node-red no terminal.
● A criação de fluxos no Node-RED demonstrou ser um processo intuitivo. O painel do
Node-RED, onde os dados são visualizados, foi acessado via
[Link] A interface do Node-RED exibia os fluxos configurados para
temperatura e umidade, que alimentavam os gráficos de "Temperature x Time" e
"Humidity x Time".
6. Descrição do Código Firmware ([Link])
O arquivo [Link], desenvolvido por João Alex Arruda da Silva em janeiro de 2024,
contém a lógica embarcada no ESP32. Este firmware é responsável por ler os dados de
temperatura e umidade do sensor DHT11, calcular a média móvel das últimas 5 leituras e
publicar os valores resultantes em um broker MQTT.
Bibliotecas Utilizadas:
● Adafruit_Sensor.h
● Arduino.h
● DHT.h
● PubSubClient.h
● WiFi.h
Parâmetros de Configuração:
● Conexão Wi-Fi: As credenciais da rede (SSID e senha) foram definidas como const
char *ssid = "joaoalex1"; e const char *password = "joao1579";.
● Broker MQTT: O endereço do servidor MQTT foi configurado como const char
*mqttServer = "[Link]"; e a porta como const int mqttPort = 1883;.
● Média Móvel: O número de leituras para o cálculo da média móvel foi estabelecido
em const int numReadings = 5;. Os arrays temperatureReadings e humidityReadings
foram inicializados com -1.0 para indicar a ausência de dados válidos.
● Sensor DHT: O pino de dados do DHT11 foi definido como GPIO 4 (#define
DHTPIN 4) e o tipo do sensor como DHT11 (#define DHTTYPE DHT11). Uma
instância WiFiClient (espClient) foi utilizada para a comunicação TCP.
Funções Principais Implementadas:
● `setupWifi()`: Estabelece a conexão com a rede Wi-Fi. A função aguarda até que a
conexão seja bem-sucedida.
● `reconnect()`: Tenta restabelecer a conexão com o broker MQTT em caso de falha,
com novas tentativas a cada 5 segundos.
● `updateReadings(float \*readings, float newValue)`: Adiciona uma nova leitura ao
respectivo array (temperatura ou umidade) e atualiza o índice de forma circular para
manter um histórico das últimas numReadings leituras.
● `calculateMovingAverage(float \*readings)`: Calcula a média móvel das leituras
armazenadas, desconsiderando os valores placeholder -1.0. Retorna -1.0 se não
houver leituras válidas para o cálculo.
● `setup()`: Função de inicialização executada uma vez quando o ESP32 é
energizado. Inicializa a comunicação serial ([Link](115200)), o sensor DHT
([Link]()), estabelece a conexão Wi-Fi (setupWifi()) e configura o cliente MQTT
com o endereço e porta do broker ([Link](mqttServer, mqttPort)).
● `loop()`: Função principal executada continuamente.
○ Verifica o estado da conexão com o broker MQTT e chama `reconnect()` se
necessário.
○ Realiza a leitura dos valores de umidade e temperatura do sensor DHT11.
○ Valida as leituras (verificando se não são NaN). Em caso de falha na leitura,
uma mensagem de erro é registrada no serial e o loop é reiniciado após 2
segundos.
○ Atualiza os arrays de leituras com os novos valores de temperatura e
umidade.
○ Calcula as médias móveis para temperatura e umidade.
○ Converte os valores float (temperatura, umidade e suas médias móveis) para
strings utilizando `dtostrf`.
○ Define os nomes dos tópicos MQTT para publicação: esp32/temperature,
esp32/humidity, esp32/moving_average_temperature, e
esp32/moving_average_humidity.
○ Publica os valores formatados nos respectivos tópicos MQTT.
○ Imprime os valores lidos, as médias calculadas e os tópicos de publicação no
monitor serial para fins de depuração.
○ Aguarda 3 segundos antes de iniciar um novo ciclo de leitura e publicação.
7. Diagnóstico e Solução de Problemas
● Verificamos a correção da montagem do hardware, atentando para a pinagem
correta, especialmente se um modelo de ESP32 diferente do especificado fosse
utilizado, o que poderia implicar em diferentes pinos GPIO.
● A saída serial do ESP32 demonstrou ser uma ferramenta valiosa para depuração.