Projeto disciplinar de IoT que realiza o monitoramento da umidade do solo em tempo real e aciona automaticamente um sistema de irrigação, utilizando um ESP32-S3, um sensor de umidade HW-390 e o protocolo MQTT para comunicação entre o dispositivo e demais aplicações (dashboards, brokers, etc).
- Sobre o projeto
- Funcionalidades
- Tecnologias utilizadas
- Hardware utilizado
- Esquema de ligação
- Como funciona
- Tópicos MQTT
- Pré-requisitos
- Instalação e configuração
- Como executar
- Estrutura do projeto
- Melhorias futuras
- Autor
O ProjetoUmidade integra hardware e software para automatizar a irrigação com base na umidade do solo. O ESP32-S3 realiza a leitura analógica do sensor de umidade, converte essa leitura em um percentual de umidade, publica esse valor via MQTT e controla o acionamento da irrigação (simulada por LEDs) utilizando uma lógica de histerese, evitando acionamentos e desligamentos repetidos em curtos intervalos de tempo.
O projeto foi desenvolvido em C++, através da Arduino IDE, e utiliza comunicação Wi-Fi para conexão com a internet e um broker MQTT público para troca de mensagens.
- 📡 Conexão automática à rede Wi-Fi, com reconexão em caso de queda;
- 🔄 Reconexão automática ao broker MQTT caso a conexão seja perdida;
- 💧 Leitura analógica do sensor de umidade do solo, com média de múltiplas amostras para reduzir ruído;
- 📊 Conversão da leitura bruta do sensor em percentual de umidade (0% a 100%);
- 🚿 Controle automático de irrigação com histerese, evitando oscilações rápidas entre ligado/desligado;
- 💡 Indicação visual do estado do sistema por meio de LEDs (verde = irrigação desligada, vermelho = irrigação ligada);
- 📤 Publicação em tempo real da umidade e do status da irrigação via MQTT.
- C++ (Arduino Framework)
- Arduino IDE
- Protocolo MQTT
- Bibliotecas:
WiFi.h— conexão com a rede Wi-FiPubSubClient.h— comunicação MQTT
| Componente | Função |
|---|---|
| ESP32-S3 | Microcontrolador principal, responsável pela leitura do sensor e comunicação Wi-Fi/MQTT |
| Sensor de umidade do solo HW-390 | Leitura analógica da umidade do solo |
| LED verde | Indica que a irrigação está desligada |
| LED vermelho | Indica que a irrigação está ligada |
| Pino do ESP32-S3 | Componente |
|---|---|
| GPIO 4 | Sinal analógico do sensor HW-390 |
| GPIO 5 | LED verde (irrigação desligada) |
| GPIO 13 | LED vermelho (irrigação ligada) |
- Conexão: ao ligar, o ESP32-S3 se conecta à rede Wi-Fi e, em seguida, ao broker MQTT (
broker.hivemq.com), publicando o status inicial"Desligada"no tópico de status. - Leitura do sensor: a cada ciclo, são feitas 8 leituras analógicas do sensor (
NUM_AMOSTRAS), que são somadas e divididas para obter uma leitura média, reduzindo o ruído da leitura. - Conversão em umidade: a leitura bruta é convertida em um percentual de 0% a 100%, com base nos valores de calibração do sensor seco (
sensorSeco = 2400) e do sensor molhado (sensorMolhado = 1200). - Publicação MQTT: o valor de umidade calculado é publicado no tópico
meuprojeto/umidade. - Controle de irrigação (histerese):
- Se a umidade cair abaixo de 35% e a irrigação estiver desligada, ela é ligada (LED vermelho aceso, LED verde apagado) e o status
"Irrigando"é publicado. - Se a umidade subir acima de 50% e a irrigação estiver ligada, ela é desligada (LED verde aceso, LED vermelho apagado) e o status
"Desligada"é publicado. - A diferença entre os limites de ligar (35%) e desligar (50%) evita que o sistema fique ligando e desligando repetidamente quando a umidade está próxima de um único limite fixo.
- Se a umidade cair abaixo de 35% e a irrigação estiver desligada, ela é ligada (LED vermelho aceso, LED verde apagado) e o status
- O ciclo se repete a cada 2 segundos.
| Tópico | Descrição | Exemplo de mensagem |
|---|---|---|
meuprojeto/umidade |
Percentual de umidade do solo | 42 |
meuprojeto/status |
Status atual da irrigação | Irrigando / Desligada |
Broker MQTT: broker.hivemq.com (broker público, porta 1883)
- Arduino IDE instalada
- Suporte à placa ESP32 instalado na Arduino IDE
- Biblioteca PubSubClient instalada (disponível pelo gerenciador de bibliotecas da Arduino IDE)
- Sensor de umidade HW-390 e placa ESP32-S3
- Rede Wi-Fi com acesso à internet
- Clone este repositório:
git clone https://github.com/jotapeor/ProjetoUmidade.git
- Abra o arquivo
.inona Arduino IDE. - Instale a biblioteca PubSubClient pelo gerenciador de bibliotecas (Sketch > Incluir Biblioteca > Gerenciar Bibliotecas).
- Configure as credenciais da sua rede Wi-Fi no início do código:
const char* ssid = "SEU_SSID"; const char* password = "SUA_SENHA";
- (Opcional) Ajuste os valores de calibração do sensor (
sensorSecoesensorMolhado) e os limites de irrigação (ligaThresholdedesligaThreshold) conforme o seu sensor e o tipo de solo utilizado.
- Conecte o ESP32-S3 ao computador via USB.
- Selecione a placa e a porta correspondente na Arduino IDE.
- Faça o upload do sketch para a placa.
- Abra o Monitor Serial (115200 baud) para acompanhar a conexão Wi-Fi/MQTT e as leituras de umidade em tempo real.
- Utilize um cliente MQTT (como o MQTT Explorer ou o app HiveMQ) inscrito nos tópicos
meuprojeto/umidadeemeuprojeto/statuspara acompanhar os dados publicados.
ProjetoUmidade/
└── sketch_dec9a/
└── sketch_dec9a.ino # Código principal do ESP32-S3
- Substituir os LEDs indicativos por um relé real, acionando uma bomba ou válvula de irrigação;
- Adicionar autenticação no broker MQTT (usuário/senha) em vez de um broker público;
- Persistir o histórico de leituras em um banco de dados;
- Criar um dashboard para visualização gráfica da umidade ao longo do tempo;
- Mover credenciais sensíveis (Wi-Fi) para um arquivo de configuração separado, fora do controle de versão.
Desenvolvido por João Paulo de Oliveira Rosseto
- GitHub: @jotapeor
- LinkedIn: joaopauloor2004