Componenti · 6 min di lettura

Sensore di temperatura e umidità DHT11: guida con Arduino, ESP32 e Pico

Cos'è il sensore di temperatura e umidità DHT11 e come funziona? Collegamento ad Arduino, libreria DHT, codice di esempio, differenze DHT11 e DHT22, uso con ESP32 e Pico ed errori comuni.

Il DHT11 è un sensore digitale economico, con involucro di plastica blu, che legge sia la temperatura sia l'umidità relativa attraverso un unico filo dati. Lo trovi in quasi tutte le stazioni meteo con Arduino, nei sistemi per serre e piante, nei termometri per la cameretta e nei progetti di domotica che accendono una ventola quando l'umidità sale. A differenza di un sensore analogico, non misuri una tensione né lotti con le formule: il sensore invia la lettura come un numero già pronto.

Sensore di temperatura e umidità DHT11
DHT11: nell'involucro blu con griglia ci sono un elemento che misura l'umidità e un minuscolo termistore.

Cos'è il DHT11 e dove si usa?

L'umidità che misura è l'umidità relativa: la percentuale della quantità massima di vapore acqueo che l'aria può contenere a quella temperatura. Tra il 40 e il 60% è considerata confortevole; sopra il 70% significa umido e muffa, sotto il 30% aria secca. Il DHT11 misura questo valore e la temperatura ambiente circa una volta al secondo.

  • Stazione meteo di casa: mostrare temperatura e umidità su un display LCD o OLED.
  • Serra e piante: avvisare quando l'umidità cala e irrigare insieme a un sensore di umidità del terreno.
  • Allarme umidità e muffa: far suonare un allarme quando bagno, cantina o armadio superano il 70% di umidità.
  • Ventola o deumidificatore automatico: accendere l'apparecchio con un relè quando si supera una soglia di umidità.
  • Registratore di dati: salvare le letture su una scheda SD e tracciare un grafico giornaliero.
  • Monitoraggio remoto: con un ESP32, pubblicare i valori su una pagina web da aprire sul telefono.

Come funziona il DHT11?

Dentro l'involucro ci sono due elementi di misura. Quello per l'umidità è un materiale che assorbe l'umidità posto tra due elettrodi: più l'aria è umida, più la sua resistenza diminuisce. Per la temperatura si usa un termistore NTC: una piccola resistenza il cui valore scende quando la temperatura sale. Un minuscolo microcontrollore all'interno del sensore misura le due resistenze, le corregge con i valori di calibrazione salvati in fabbrica e invia il risultato in digitale.

La comunicazione avviene su un solo filo. Arduino sveglia il sensore tenendo la linea dati a LOW per almeno 18 millisecondi e il sensore risponde con un pacchetto da 40 bit: 16 bit di umidità, 16 bit di temperatura e un checksum da 8 bit per individuare le letture errate. Non devi programmare questi tempi: la libreria che installeremo tra poco fa tutto da sola.

Caratteristiche tecniche: differenze tra DHT11 e DHT22

CaratteristicaDHT11DHT22 (AM2302)
Tensione di alimentazione3–5,5 V3,3–6 V
Corrente durante la misura0,5–2,5 mA1–1,5 mA
Intervallo di temperatura0–50 °C−40–80 °C
Precisione in temperatura±2 °C±0,5 °C
Intervallo di umidità20–90%0–100%
Precisione in umidità±5%±2% (max ±5%)
Risoluzione1 °C / 1%0,1 °C / 0,1%
Frequenza di letturaUna al secondoUna ogni 2 secondi
Colore dell'involucroBluBianco
Sensore di temperatura e umidità DHT22 AM2302
DHT22 (AM2302): il fratello con involucro bianco, più preciso e capace di misurare sotto zero.

In breve: se vuoi tenere d'occhio in modo approssimativo temperatura e umidità in casa, il DHT11 basta ed è più economico. All'aperto, sotto zero o quando conta mezzo grado, scegli il DHT22. Entrambi si collegano e si programmano allo stesso modo; nel codice cambi solo il tipo di sensore.

Piedinatura e collegamento del DHT11

Il DHT11 si vende in due versioni: come modulo a 3 pin con resistenza e LED sulla scheda oppure come sensore nudo a 4 piedini. Sul sensore nudo conta i piedini da sinistra a destra con il lato della griglia rivolto verso di te.

SegnaleModulo a 3 pinSensore a 4 piediniDove collegarlo
AlimentazioneVCC (+)Piedino 15V (3V3 su ESP32 e Pico)
DatiDATA / OUT / SPiedino 2Un pin digitale (D2 sull'Uno)
Libero—Piedino 3Non collegato
MassaGND (−)Piedino 4GND
Se usi il sensore nudo, metti sempre una resistenza di pull-up da 10 kΩ tra il piedino dati e VCC; con cavi più lunghi di qualche metro usa 4,7 kΩ. I moduli hanno già questa resistenza sulla scheda, quindi non serve altro. Per leggere il valore di una resistenza dai suoi colori, usa lo strumento Codice colori delle resistenze.

Installare la libreria DHT

  1. Apri il Gestore librerie nell'Arduino IDE (in Arduino IDE 2 è l'icona del libro nella barra laterale sinistra).
  2. Scrivi DHT sensor library nella ricerca e installa la libreria di Adafruit.
  3. Quando ti chiede delle dipendenze, scegli Install all per installare anche Adafruit Unified Sensor.
  4. Se vuoi, prova l'esempio incluso in File > Esempi > DHT sensor library > DHTtester.

Codice di esempio per Arduino: temperatura, umidità e indice di calore

Il codice qui sotto esegue una lettura ogni due secondi, segnala le letture fallite e combina temperatura e umidità per calcolare l'indice di calore (la temperatura percepita). Apri il Monitor seriale a 9600 baud per vedere i risultati.

Arduino (C++)
1#include <DHT.h>
2
3#define DHT_PIN 2          // veri pini / data pin
4#define DHT_TYPE DHT11     // DHT22 kullanıyorsan DHT22 yaz / write DHT22 for a DHT22
5
6DHT dht(DHT_PIN, DHT_TYPE);
7
8void setup() {
9  Serial.begin(9600);
10  dht.begin();
11}
12
13void loop() {
14  delay(2000);                                // ölçümler arası bekleme / wait between readings
15
16  float humidity = dht.readHumidity();        // % bağıl nem / % relative humidity
17  float temperature = dht.readTemperature();  // °C
18
19  if (isnan(humidity) || isnan(temperature)) {
20    Serial.println("Okuma hatası / read error");
21    return;
22  }
23
24  // hissedilen sıcaklık / heat index (°C)
25  float heatIndex = dht.computeHeatIndex(temperature, humidity, false);
26
27  Serial.print("Sicaklik / Temp: ");
28  Serial.print(temperature);
29  Serial.print(" C  Nem / Humidity: %");
30  Serial.print(humidity);
31  Serial.print("  Hissedilen / Feels like: ");
32  Serial.print(heatIndex);
33  Serial.println(" C");
34}
Il DHT11 fa al massimo una lettura al secondo, il DHT22 una ogni due secondi. Attendere 2 secondi tra una lettura e l'altra è sicuro per entrambi. Leggere più spesso non dà un valore nuovo: la libreria restituisce l'ultima misura o un errore.

Usare il DHT11 con l'ESP32

Sull'ESP32 funziona lo stesso codice; basta impostare DHT_PIN per esempio a 4. Alimenta il sensore dal pin 3V3 dell'ESP32 così anche la linea dati resta a 3,3 V; il DHT11 funziona tranquillamente a questa tensione. I GPIO 34–39 sono solo ingressi e non vanno bene per un DHT, perché la linea dati è bidirezionale. Per scegliere il pin, controlla nello strumento Pinout quali pin dell'ESP32 sono sicuri. Puoi mostrare le letture su una pagina web via Wi-Fi e seguirle dal telefono.

DHT11 con il Raspberry Pi Pico (MicroPython)

MicroPython include un modulo dht per i sensori DHT, quindi non c'è nessuna libreria da installare. Collega il sensore al pin 3V3 del Pico, a GND e al pin GP15:

MicroPython
1import dht
2from machine import Pin
3import time
4
5sensor = dht.DHT11(Pin(15))   # GP15 veri pini / data pin (DHT22 için dht.DHT22)
6
7while True:
8    try:
9        sensor.measure()
10        t = sensor.temperature()   # °C
11        h = sensor.humidity()      # %
12        print("Sicaklik:", t, "C  Nem: %", h)
13    except OSError:
14        print("Okuma hatası / read error")
15    time.sleep(2)

Idee di progetti con il DHT11

  • Termometro digitale con LCD: scrivi i valori su un display 16x2; come fare lo spiega Usare un display LCD I2C.
  • Ventola comandata dall'umidità: accendi una ventola con un relè quando l'umidità supera il 65%; per il collegamento vedi Cos'è un modulo relè?
  • Allarme umidità: fai suonare un buzzer quando si supera la soglia; Cos'è un buzzer? ti aiuta con gli avvisi sonori.
  • Registratore di temperatura: salva una lettura ogni 10 minuti con un modulo orologio e una scheda SD.
  • Stazione meteo Wi-Fi: pubblica le letture con un ESP32 su una pagina che ogni dispositivo della rete di casa può aprire.

Errori comuni e come risolverli

  • NaN continuo o "Failed to read": il filo dati potrebbe essere su un pin diverso da quello del codice, potrebbe mancare la resistenza di pull-up oppure il codice usa il tipo di sensore sbagliato (DHT22 invece di DHT11).
  • Leggere troppo spesso: un sensore letto a meno di 2 secondi di distanza restituisce il valore vecchio o un errore.
  • Temperatura più alta del dovuto: il sensore potrebbe essere troppo vicino al regolatore di tensione di Arduino o al sole; mettilo a qualche centimetro dalla scheda.
  • Letture perse con cavi lunghi: dopo qualche metro il segnale si indebolisce; abbassa il pull-up a 4,7 kΩ, alimenta il sensore a 5 V e usa un cavo di buona qualità.
  • Funzionamento instabile sull'ESP32: se il sensore è alimentato a 5 V, la linea dati viene tirata a 5 V; alimentalo dal 3V3 e usa un GPIO che possa essere sia ingresso sia uscita (per esempio il 4).
  • Aspettarsi una risposta immediata: un cambio di umidità viene rilevato dopo alcuni secondi; il DHT11 è pensato per monitorare un ambiente, non per misure rapide.

Se ti chiedi quali altri sensori puoi usare, dai un'occhiata alla Guida ai sensori per Arduino, e per misurare le distanze leggi Sensore di distanza HC-SR04. Nell'app BlueGrays trovi progetti passo passo con DHT11 e DHT22, completi di schemi e codice.

Domande frequenti

Meglio comprare un DHT11 o un DHT22?

Per controllare in modo approssimativo temperatura e umidità in casa basta il DHT11, che costa meno. Per l'esterno, temperature sotto zero o una precisione di ±0,5 °C scegli il DHT22. Nel codice cambi solo il tipo di sensore in DHT22.

Perché il mio DHT11 restituisce NaN o "Failed to read from DHT sensor"?

Le cause più comuni sono un pin dati sbagliato, la resistenza di pull-up mancante, il tipo di sensore errato nel codice e letture troppo frequenti. Controlla i collegamenti, aggiungi 10 kΩ sul sensore nudo e aspetta 2 secondi tra le letture.

Il mio DHT11 mostra una temperatura sbagliata, come lo calibro?

Uno scarto di ±2 °C è normale per il DHT11. Metti il sensore accanto a un termometro affidabile, annota la differenza e aggiungi o sottrai questo valore fisso alla lettura nel codice. Assicurati che il sensore sia lontano dai componenti che si scaldano.

Il DHT11 funziona a 3,3 V?

Sì, il DHT11 funziona da 3 a 5,5 V. Sulle schede a 3,3 V come ESP32 e Raspberry Pi Pico è meglio alimentarlo dal pin 3V3, così la linea dati non riceve mai 5 V.

Si può usare il DHT11 all'aperto o vicino all'acqua?

Il DHT11 non è impermeabile: pioggia, condensa e sole diretto lo danneggiano o falsano la misura. All'aperto mettilo in una scatola ventilata all'ombra; per la temperatura dell'acqua è più adatto un DS18B20 impermeabile.

Posso collegare più DHT11 a un Arduino?

Sì, ma ogni sensore ha bisogno del proprio pin dati; non possono condividere la stessa linea. Nel codice definisci un oggetto DHT per ciascuno, per esempio DHT dht1(2, DHT11) e DHT dht2(3, DHT11).

Vedi tutti i progetti
Temperatura e umidità con DHT11
#55Intermedio

Temperatura e umidità con DHT11

Progetto che misura il valore della temperatura e dell'umidità ambientale con un sensore DHT11 e lo visualizza su uno schermo LCD I2C. Insegna l'uso del sensore digitale di temperatura/umidità.

4.7(47)
60
ESP32 DHT22 Temperatura e umidità (con display LCD)
#117Intermedio
Premium

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(37)
53
Data Logger di Temperatura ESP32 (DHT22 + DS1307 RTC + microSD + OLED)
#144Avanzato
Premium

Data Logger di Temperatura ESP32 (DHT22 + DS1307 RTC + microSD + OLED)

Costruisci un data logger di temperatura con timestamp usando ESP32! Leggi temperatura/umidità dal DHT22 ogni 10 secondi, ottieni l'ora reale dal DS1307 RTC e registra su scheda microSD in formato CSV. L'OLED mostra dal vivo temperatura (font grande), percentuale di umidità, timestamp e contatore di log. Il file `/temp_log.csv` sulla scheda SD si apre in Excel, Google Sheets o Python pandas per l'analisi — perfetto per il monitoraggio di serre, tracciamento della temperatura domestica, raccolta

4.7(7)
12
Orologio a matrice di punti, calendario e stazione meteo (MAX7219, DS1307)
#85Intermedio
Premium

Orologio a matrice di punti, calendario e stazione meteo (MAX7219, DS1307)

Il modulo RTC DS1307 e il sensore di temperatura-umidità DHT22 è un progetto che visualizza i dati in tempo reale sul display LED a matrice di punti MAX7219 8x32. Il display mostra la temperatura in g

5.0(50)
66
Misura di temperatura con NTC e display Lcd 2x16
#44Principiante
Premium

Misura di temperatura con NTC e display Lcd 2x16

Il progetto misura la temperatura ambiente con un termistore NTC e la visualizza in gradi Celsius su uno schermo LCD I2C. Insegna a calcolare la temperatura dal valore analogico con l'equazione di Ste

4.5(33)
44
ESP32 HTTPClient + API meteo (con schermo LCD)
#133Avanzato
Premium

ESP32 HTTPClient + API meteo (con schermo LCD)

In questo progetto, utilizzando l'ESP32, effettuiamo una chiamata REST all'API meteo (wttr.in) tramite Internet utilizzando `HTTPClient.h`. Analizziamo la risposta JSON restituita tramite ArduinoJson v7 e visualizziamo le informazioni relative a città, temperatura, umidità, condizioni meteorologiche e vento sul display LCD I2C sia in turco che in inglese. wttr.in è gratuito e non richiede una chiave API: basta digitare il nome di una città qualsiasi per ottenere le condizioni meteorologiche in t

4.7(13)
20
Stazione di irrigazione intelligente
#83Avanzato
Premium

Stazione di irrigazione intelligente

Sistema autonomo di irrigazione delle piante che funziona 24 ore su 24, 7 giorni su 7, senza affaticare Arduino con due batterie 18650 e regolatore LM2596. Gestisce automaticamente il motore dell'acqu

5.0(42)
57
Sistema di irrigazione intelligente per piante ESP 32
#139Avanzato
Premium

Sistema di irrigazione intelligente per piante ESP 32

In questo progetto è stato sviluppato un sistema di irrigazione automatica delle piante utilizzando un ESP32 e un sensore di umidità del terreno. Il sensore misura costantemente il livello di umidità del terreno. Quando l'umidità scende al di sotto del livello prestabilito, l'ESP32 attiva il relè, avviando la pompa dell'acqua e innaffiando la pianta. Quando il terreno è sufficientemente umido, la pompa si arresta automaticamente. Grazie a questo progetto, le piante possono essere innaffiate rego

4.7(10)
14

Impara a collegare il DHT11 ad Arduino, leggere temperatura, umidità e indice di calore con la libreria DHT, usarlo con ESP32 e Pico e capire quando conviene il DHT22.

Sensore di temperatura e umidità DHT11: guida con Arduino, ESP32 e Pico | BlueGrays