Tutorial ESP32 & DHT22 - ES2-UFPI/TermoLOG GitHub Wiki
O módulo ESP32 é um módulo de alta performance para aplicações envolvendo wifi, contando com um baixíssimo consumo de energia. É uma evolução do já conhecido ESP8266, com maior poder de processamento e bluetooth BLE 4.2 embutido. Na placa temos o chip ESP32 com antena embutida, uma interface usb-serial e regulador de tensão 3.3V. A programação pode ser feita em LUA ou usando a IDE do Arduino através de um cabo micro-usb. Com 4 MB de memória flash, o ESP32 permite criar variadas aplicações para projetos de IoT, acesso remoto, webservers e dataloggers, entre outros.
folha de dados da placa: https://documentation.espressif.com/esp32-wroom-32_datasheet_en.html
O modulo DHT22 é um sensor de temperatura e umidade que permite fazer leituras de temperaturas entre -40 a +80 graus Celsius e umidade entre 0 a 100%.
Baixe a versão correspondente ao seu sistema na página de releases do Arduino IDE.
-
Abra o Boards Manager e instale o core esp32, da Espressif Systems.
-
Selecione a placa ESP32 Dev Module e a porta em que ela está conectada ao computador.
Exemplo de caso certo
- Cole o código abaixo, clique em Verificar na barra superior e depois em Upload.
#define LED_PIN 2 // LED onboard na maioria das DevKit v1
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
Serial.println("Hello, ESP32!");
}
void loop() {
digitalWrite(LED_PIN, HIGH);
Serial.println("LED ligado");
delay(500);
digitalWrite(LED_PIN, LOW);
Serial.println("LED desligado");
delay(500);
}Se todos os passos foram feitos corretamente, o LED azul da placa passa a piscar a cada meio segundo. Abra o Serial Monitor em 115200 baud para ver as mensagens.
Dica (Linux): se o upload falhar com
Permission deniedna porta serial, adicione seu usuário ao grupo da porta (uucpno Arch/CachyOS,dialoutno Debian/Ubuntu) comsudo usermod -aG uucp $USERe faça logout e login. Se travar emConnecting..., segure o botão BOOT da placa durante o upload.
O Wokwi simula o ESP32 no navegador, então dá para testar o circuito e o código antes de montar na bancada.
| Componente | Pino do componente | Pino do ESP32 | Observação |
|---|---|---|---|
| DHT22 | VCC | 3V3 | alimentação |
| DHT22 | SDA (DATA) | GPIO 4 | com pull-up de 10 kΩ a 3V3 |
| DHT22 | GND | GND | |
| LED de status | anodo (A) | GPIO 25 | via resistor de 220 Ω |
| LED de status | catodo (C) | GND | |
| Potenciômetro (VBAT) | SIG | GPIO 34 | ADC1, só entrada |
| Potenciômetro (VBAT) | VCC / GND | 3V3 / GND |
{
"version": 1,
"author": "Equipe",
"editor": "wokwi",
"parts": [
{ "type": "board-esp32-devkit-c-v4", "id": "esp", "top": 0, "left": 0, "attrs": {} },
{ "type": "wokwi-dht22", "id": "dht", "top": -115.2, "left": 196.2, "attrs": {} },
{ "type": "wokwi-resistor", "id": "r1", "top": -34.9, "left": 172.8, "rotate": 90, "attrs": { "value": "10000" } },
{ "type": "wokwi-led", "id": "led1", "top": -100.8, "left": -111.4, "attrs": { "color": "green", "label": "Status" } },
{ "type": "wokwi-resistor", "id": "r2", "top": -34.9, "left": -106.9, "rotate": 90, "attrs": { "value": "220" } },
{ "type": "wokwi-potentiometer", "id": "pot", "top": 152.3, "left": -202.6, "attrs": { "label": "VBAT (0-2,1V)" } }
],
"connections": [
[ "esp:3V3", "dht:VCC", "red", [ "v-19.2", "h115.2" ] ],
[ "esp:GND.1", "dht:GND", "black", [ "h0" ] ],
[ "esp:4", "dht:SDA", "green", [ "h0" ] ],
[ "r1:1", "esp:3V3", "red", [ "h0" ] ],
[ "r1:2", "esp:4", "green", [ "h0" ] ],
[ "esp:25", "r2:1", "orange", [ "h0" ] ],
[ "r2:2", "led1:A", "orange", [ "h0" ] ],
[ "led1:C", "esp:GND.2", "black", [ "h0" ] ],
[ "pot:VCC", "esp:3V3", "red", [ "h0" ] ],
[ "pot:GND", "esp:GND.1", "black", [ "h0" ] ],
[ "pot:SIG", "esp:34", "blue", [ "h0" ] ]
],
"dependencies": {}
}Led acende quando o nó acorda e a temperatura ou a humidade estão acima de 75(valor absoluto)
#include <DHT.h>
#define PIN_DHT 4 // DATA do DHT22 (pull-up 10k a 3V3)
#define PIN_LED 25 // LED de alerta
#define PIN_VBAT 34 // ADC1, só entrada
// Para teste no Wokwi: 5 s. No protótipo real use 600000 (600 s).
const unsigned long INTERVALO_MS = 5000;
const int TENTATIVAS = 3;
const unsigned long ESPERA_RETRY_MS = 2100;
// Limites de alerta
const float LIMITE_UMID_PCT = 75.0;
const float LIMITE_TEMP_C = 75.0;
DHT dht(PIN_DHT, DHT22);
void setup() {
Serial.begin(115200);
pinMode(PIN_LED, OUTPUT);
analogSetPinAttenuation(PIN_VBAT, ADC_11db);
dht.begin();
Serial.println("Teste DHT22 + ESP32 iniciado");
}
void loop() {
float t = NAN, h = NAN;
for (int i = 1; i <= TENTATIVAS; i++) {
h = dht.readHumidity();
t = dht.readTemperature();
if (!isnan(h) && !isnan(t)) break;
Serial.printf("Falha na leitura (tentativa %d/%d)\n", i, TENTATIVAS);
delay(ESPERA_RETRY_MS);
}
int vbat_mV = analogReadMilliVolts(PIN_VBAT);
if (isnan(h) || isnan(t)) {
Serial.println("Sem leitura valida do DHT22");
digitalWrite(PIN_LED, LOW);
} else {
bool alerta = (h > LIMITE_UMID_PCT) || (t > LIMITE_TEMP_C);
digitalWrite(PIN_LED, alerta);
// Aqui entraria o envio (Wi-Fi/MQTT/HTTP). No teste, apenas serial.
Serial.printf("ENVIO -> temp=%.1f C | umid=%.1f %% | vbat_adc=%d mV | %s\n",
t, h, vbat_mV, alerta ? "ALERTA" : "ok");
}
delay(INTERVALO_MS);
}
- Crie um projeto ESP32 no Wokwi e substitua
diagram.jsonesketch.inopelos arquivos acima. - Adicione as bibliotecas em
libraries.txt(veja a próxima seção). - Clique em Play. A cada 5 s o LED acende e a serial mostra
ENVIO -> temp=... C | umid=... % | vbat_adc=... mV. - Clique no DHT22 durante a simulação para mudar temperatura e umidade, e gire o potenciômetro para variar o
vbat_adc.
- DHT sensor library (Adafruit)
- Adafruit Unified Sensor
No Wokwi, liste uma por linha em libraries.txt:
DHT sensor library
Adafruit Unified Sensor
Na Arduino IDE, instale as duas pelo Library Manager.