#117Intermediário

Temperatura e umidade com ESP32 e DHT22 (com display LCD)

Este projeto mede a temperatura e a umidade do ambiente com um sensor DHT22 e exibe os dados em tempo real em um LCD I2C 16x2. Os dados são lidos do sensor pelo protocolo de um fio (one-wire) com a biblioteca Adafruit DHT. Este projeto serve de base para estações meteorológicas IoT, automação residencial ou sistemas de monitoramento ambiental em estufas. A comunicação com o DHT22 é feita pelo pino GPIO 4 do ESP32.

4.8(38)
56 concluído
Temperatura e umidade com ESP32 e DHT22 (com display LCD)
Se você já quis saber a temperatura e a umidade do seu quarto, este pequeno medidor é para você. O sensor DHT22 faz as medições do ar e, a cada dois segundos, o ESP32 mostra a temperatura e a umidade com uma casa decimal no display LCD. Se não for possível ler o sensor, o display também avisa. É a base para projetos como um cantinho de plantas ou uma estação meteorológica doméstica.

Vídeo

Esquema do circuito

Temperatura e umidade com ESP32 e DHT22 (com display LCD) - Circuit

Código-fonte

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   ESP32 DHT22 Temperature and Humidity (with LCD Display)
4// ─────────────────────────────────────────
5// Reads temperature and humidity from the DHT22 every 2 s and shows them
6// on a 16x2 I2C LCD. If a reading fails, the screen shows a wiring and
7// pull-up warning.
8//
9// Pins:
10//   GPIO 4  -> DHT22 DATA
11//   10k pull-up between DATA and VCC
12//   GPIO 21 -> LCD SDA, GPIO 22 -> LCD SCL
13//   DHT22 VCC -> 3V3, LCD VCC -> 5V (VIN)
14//   All GNDs common
15
16#include <Wire.h>
17#include <LiquidCrystal_I2C.h>
18#include <DHT.h>
19
20// Pin definitions
21const int DHT_PIN = 4;
22#define DHT_TYPE DHT22
23
24DHT dht(DHT_PIN, DHT_TYPE);
25
26// LCD addr 0x27 or 0x3F
27LiquidCrystal_I2C lcd(0x27, 16, 2);
28
29// DHT22 needs at least 2 s between reads
30const unsigned long READ_INTERVAL = 2000;
31unsigned long lastRead = 0;
32
33void setup() {
34  // DevKit V1 default I2C pins
35  Wire.begin(21, 22);
36  lcd.init();
37  lcd.backlight();
38
39  // Splash screen 3 s
40  lcd.setCursor(3, 0);
41  lcd.print("BlueGrays");
42  lcd.setCursor(3, 1);
43  lcd.print("DHT22 v1.0");
44  delay(3000);
45  lcd.clear();
46
47  dht.begin();
48}
49
50void loop() {
51  // Read every 2 s without delay()
52  if (millis() - lastRead >= READ_INTERVAL) {
53    lastRead = millis();
54
55    float h = dht.readHumidity();
56    float t = dht.readTemperature();
57
58    lcd.clear();
59
60    // NaN = wiring/pullup issue
61    if (isnan(h) || isnan(t)) {
62      lcd.setCursor(0, 0);
63      lcd.print("Sensor okunamadi");
64      lcd.setCursor(0, 1);
65      lcd.print("Kablo+10k pullup");
66    } else {
67      // Temperature
68      lcd.setCursor(0, 0);
69      lcd.print("Sicaklik:");
70      lcd.print(t, 1);
71      lcd.print("C");
72      // Humidity, DHT22 gives decimals
73      lcd.setCursor(0, 1);
74      lcd.print("Nem     :");
75      lcd.print(h, 1);
76      lcd.print("%");
77    }
78  }
79}
80

Perguntas frequentes

Qual é a diferença entre o DHT22 e o DHT11?▾

O DHT22 é mais preciso (±0,5 °C e ±2–5% de umidade), mede em uma faixa mais ampla (−40 a 80 °C) e oferece resolução de 0,1. O DHT11 é mais barato, mas se limita a ±2 °C e resolução de números inteiros.

É necessário usar um resistor de pull-up de 10 kΩ?▾

O sensor DHT22 avulso precisa de um resistor de pull-up de 10 kΩ na linha de dados. Nos módulos de 3 pinos montados em placa, o resistor geralmente já está incluído.

LCD a 5 V e ESP32 a 3,3 V funcionam juntos?▾

Os módulos LCD I2C exibem uma imagem mais nítida a 5 V. Se os resistores de pull-up das linhas SDA/SCL de um módulo alimentado com 5 V estiverem ligados a 5 V, usar um conversor de nível é a opção mais segura. Embora muitas pessoas façam a ligação direta, isso força os limites do ESP32.

Posso enviar os dados pela internet?▾

Sim, você pode usar o Wi-Fi do ESP32 para enviar as medições ao ThingSpeak, ao Blynk ou ao seu próprio servidor e acompanhar os gráficos pelo celular.