Tutorial ESP32 & DHT22 - ES2-UFPI/TermoLOG GitHub Wiki

Tutorial: ESP32 & DHT22

Placa Esp32 Pino Soldado Wifi Bluetooth Com Esp32-wroom-32

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

Sensor DHT22

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%.

Arduino IDE

1. Instalação

Baixe a versão correspondente ao seu sistema na página de releases do Arduino IDE.

2. Teste de funcionamento (piscar o LED)

  1. Abra o Boards Manager e instale o core esp32, da Espressif Systems.

    Boards Manager
  2. Selecione a placa ESP32 Dev Module e a porta em que ela está conectada ao computador.

image

Exemplo de caso certo

  1. 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 denied na porta serial, adicione seu usuário ao grupo da porta (uucp no Arch/CachyOS, dialout no Debian/Ubuntu) com sudo usermod -aG uucp $USER e faça logout e login. Se travar em Connecting..., segure o botão BOOT da placa durante o upload.

Wokwi

O Wokwi simula o ESP32 no navegador, então dá para testar o circuito e o código antes de montar na bancada.

image

Ligações

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

Circuito (diagram.json)

{
  "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": {}
}

Código (sketch.ino)

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);
}

Como testar

  1. Crie um projeto ESP32 no Wokwi e substitua diagram.json e sketch.ino pelos arquivos acima.
  2. Adicione as bibliotecas em libraries.txt (veja a próxima seção).
  3. Clique em Play. A cada 5 s o LED acende e a serial mostra ENVIO -> temp=... C | umid=... % | vbat_adc=... mV.
  4. Clique no DHT22 durante a simulação para mudar temperatura e umidade, e gire o potenciômetro para variar o vbat_adc.

Bibliotecas

  • 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.

video de tutorial

https://www.youtube.com/watch?v=SUDT2NUjNdU

⚠️ **GitHub.com Fallback** ⚠️