#117Intermedio

ESP32 DHT22 Temperatura e umidità (con display LCD)

Si tratta di un progetto che misura la temperatura e l'umidità dell'ambiente tramite il sensore DHT22 e le visualizza in tempo reale su un display LCD I2C 16x2. I dati vengono letti dal sensore utilizzando il protocollo one-wire tramite la libreria Adafruit DHT. Questo progetto costituisce la base per stazioni meteorologiche IoT, sistemi di automazione domestica intelligente o sistemi di monitoraggio ambientale nelle serre. La comunicazione con il DHT22 avviene tramite il pin GPIO 4 dell'ESP32.

4.8(38)
54 completato
ESP32 DHT22 Temperatura e umidità (con display LCD)
Se ti sei mai chiesto quanto fa caldo e quanta umidità c'è nella tua stanza, questo piccolo misuratore fa per te. Il sensore DHT22 misura l'aria e ogni due secondi l'ESP32 scrive temperatura e umidità, con un decimale, sul display LCD. Se il sensore non risponde, il display te lo segnala; è la base di progetti come un angolo per le piante o una stazione meteo casalinga.

Video

Schema circuito

ESP32 DHT22 Temperatura e umidità (con display LCD) - Circuit

Codice sorgente

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   ESP32 DHT22 Temperatura e umidità (con display LCD)
4// ─────────────────────────────────────────
5// Legge temperatura e umidità dal DHT22 ogni 2 s e le mostra su un LCD I2C
6// 16x2. Se una lettura fallisce, lo schermo mostra un avviso su cablaggio
7// e pull-up.
8//
9// Pin:
10//   GPIO 4  -> DATA del DHT22
11//   Pull-up da 10k tra DATA e VCC
12//   GPIO 21 -> SDA dell'LCD, GPIO 22 -> SCL dell'LCD
13//   DHT22 VCC -> 3V3, VCC dell'LCD -> 5V (VIN)
14//   Tutti i GND in comune
15
16#include <Wire.h>
17#include <LiquidCrystal_I2C.h>
18#include <DHT.h>
19
20// Definizione dei pin
21const int DHT_PIN = 4;
22#define DHT_TYPE DHT22
23
24DHT dht(DHT_PIN, DHT_TYPE);
25
26// Indirizzo dell'LCD 0x27 o 0x3F
27LiquidCrystal_I2C lcd(0x27, 16, 2);
28
29// Il DHT22 richiede almeno 2 s tra una lettura e l'altra
30const unsigned long READ_INTERVAL = 2000;
31unsigned long lastRead = 0;
32
33void setup() {
34  // Pin I2C predefiniti della DevKit V1
35  Wire.begin(21, 22);
36  lcd.init();
37  lcd.backlight();
38
39  // Schermata iniziale 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  // Leggere ogni 2 s senza 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 = problema di cablaggio/pull-up
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      // Temperatura
68      lcd.setCursor(0, 0);
69      lcd.print("Sicaklik:");
70      lcd.print(t, 1);
71      lcd.print("C");
72      // Umidità, il DHT22 dà i decimali
73      lcd.setCursor(0, 1);
74      lcd.print("Nem     :");
75      lcd.print(h, 1);
76      lcd.print("%");
77    }
78  }
79}
80

FAQ

Qual è la differenza tra il DHT22 e il DHT11?▾

Il DHT22 è più preciso (±0,5 °C, ±2–5% di umidità), misura in un intervallo più ampio (da −40 a 80 °C) e offre una risoluzione di 0,1. Il DHT11 è più economico, ma è limitato a una precisione di ±2 °C e a una risoluzione in numeri interi.

È necessario un resistore pull-up da 10 kΩ?▾

Per la linea dati del sensore DHT22 non rivestito è necessario un pull-up da 10 kΩ. Nei moduli a 3 pin montati sulla scheda, la resistenza è solitamente già presente.

LCD 5 V, ESP32 3,3 V; sono compatibili?▾

I moduli LCD I2C offrono un'immagine più nitida con 5 V. Se le resistenze pull-up sulle linee SDA/SCL del modulo alimentato a 5 V sono collegate a 5 V, l'uso di un convertitore di livello è la soluzione più sicura; sebbene molti lo colleghino direttamente, ciò mette a dura prova i limiti dell'ESP32.

Posso inviare i dati su Internet?▾

Sì, grazie al Wi-Fi dell'ESP32 puoi inviare le misurazioni a ThingSpeak, Blynk o al tuo server e visualizzare i grafici dal telefono.

ESP32 DHT22 Temperatura e umidità (con display LCD) | BlueGrays