Tutorial ESP32 28/55 - Sensore di temperatura DHT11 con LCD | Kit di apprendimento IoT ESP32 di SunFounder
In questo tutorial, esamineremo come interfacciare il sensore di temperatura e umidità DHT11 con il microcontrollore ESP32. Utilizzando questa configurazione, misureremo la temperatura e l'umidità ambientale, visualizzando i risultati sia sul monitor seriale che su uno schermo LCD. Inoltre, implementeremo un buzzer che si attiva quando la temperatura supera una certa soglia.
Questo progetto non solo dimostra l'uso del sensore DHT11, ma mostra anche la versatilità dell'ESP32, che include capacità Wi-Fi e Bluetooth integrate. Alla fine di questo tutorial, avrai una configurazione funzionante che monitora continuamente le condizioni ambientali e fornisce feedback in tempo reale.
Per una guida visiva, dai un'occhiata al video che accompagna questo tutorial (nel video a :00). Immergiamoci!
Spiegazione dell'hardware
I componenti principali utilizzati in questo progetto sono il microcontrollore ESP32, il sensore DHT11 e un display LCD. L'ESP32 fungerà da cervello dell'operazione, elaborando i dati provenienti dal sensore DHT11 e controllando l'output LCD.
Il sensore DHT11 misura l'umidità e la temperatura, fornendo letture attraverso un'unica linea di dati. Richiede un'alimentazione di 3,3V a 5,5V e ha un basso consumo di corrente, rendendolo adatto per applicazioni alimentate a batteria. Il LCD mostrerà i valori di temperatura e umidità in tempo reale.
Dettagli della scheda tecnica
| Produttore | GROVE |
|---|---|
| Numero di parte | DHT11 |
| Tensione logica/IO | 3,3 - 5,5 V |
| Tensione di alimentazione | 3,3 V |
| Corrente di uscita (per canale) | 0,5 mA tip. |
| Corrente di picco (per canale) | 2,5 mA max. |
| linee guida sulla frequenza PWM | N/A |
| Soglie logiche di ingresso | 0,3 VCC (basso), 0,7 VCC (alto) |
| Caduta di tensione / RDS(on)saturazione | Non applicabile |
| Limiti termici | 0°C a 60°C |
| Pacchetto | DIP-4 |
| Note / varianti | Risoluzione: 1°C / 1% UR |
- Utilizzare una resistenza di pull-up (5 kΩ consigliata) sulla linea dei dati.
- Mantieni i cavi del sensore corti (meno di 20 m) per garantire letture accurate.
- Alimenta il DHT11 con 3,3V per prestazioni ottimali.
- Il periodo di campionamento non dovrebbe essere inferiore a 1 secondo.
- Controlla le connessioni dei cavi se le letture non sono corrette (ad esempio, non connesse, pin errato).
Istruzioni per il cablaggio


Per collegare il sensore DHT11 all'ESP32, inizia collegando il pin VCC del DHT11 (il pin più a sinistra) all'uscita di 3,3V dell'ESP32. Successivamente, collega il pin di massa (il quarto pin) a un pin di massa (GND) sull'ESP32. Il pin dati (il secondo pin) dovrebbe essere collegato al pin GPIO 14 dell'ESP32.
Per il LCD, collegare il pin VCC all'uscita di 5V dell'ESP32. Il pin di massa dovrebbe essere collegato a un pin di massa sull'ESP32. I pin SDA e SCL del LCD devono essere collegati ai pin GPIO 21 e 22, rispettivamente. Assicurati che tutte le connessioni siano sicure per evitare problemi durante la lettura dei dati.
Esempi di codice e guida passo passo
Nella prima parte del codice, inizializziamo il sensore DHT e impostiamo il numero del pin con#define DHTPIN 14Questo identificatore ci consente di fare riferimento facilmente al pin connesso alla linea dati del DHT11 in tutto il codice.
#include "DHT.h"
#define DHTPIN 14 // Set the pin connected to the DHT11 data pin
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
}
In thesetup()nella funzione, inizializziamo la comunicazione seriale per il debugging e avviamo il sensore DHT. Il ciclo principale include un ritardo di 2 secondi per garantire che non sovraccarichiamo il sensore con richieste.
Successivamente, leggiamo i valori di umidità e temperatura utilizzandofloat humidity = dht.readHumidity();efloat temperature = dht.readTemperature();Questi identificatori memorizzano i valori misurati per un uso successivo.
void loop() {
delay(2000);
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
}
Infine, verifichiamo eventuali errori di lettura e stampiamo i valori sul monitor seriale utilizzandoSerial.print()Questo ci consente di osservare le letture in tempo reale.
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C");
Nel codice LCD, inizializziamo l'LDC e mostriamo la temperatura e l'umidità sullo schermo utilizzando illcd.print()funzione. Questo fornisce una rappresentazione visiva dei dati raccolti dal sensore DHT11.
Dimostrazione / Cosa Aspettarsi
Una volta che tutto è cablato correttamente e il codice è caricato sull'ESP32, dovresti vedere le letture di temperatura e umidità visualizzate sul monitor seriale e sullo schermo LCD. Se la temperatura supera i 30°C, il buzzer si attiverà, fornendo un avviso acustico.
Fai attenzione alle connessioni invertite e assicurati che il sensore non sia esposto a condizioni estreme, poiché ciò può influire sulle letture. Potresti dover regolare la soglia per il buzzer a seconda delle tue esigenze (nel video alle 15:30).
Timestamp video
- 00:00 Inizio
- 1:57 Introduzione al DHT11
- 6:18 Cablaggio DHT11 con ESP32
- 7:67 Codice Arduino spiegato
- 11:49 Selezionare la scheda ESP32 e la porta COM in Arduino IDE
- 13:30 Dimostrazione del progetto
- 15:32 Ottenendo Fahrenheit
- 16:04 visualizzazione della temperatura su LCD utilizzando ESP32
- 17:20 DHT11 e LCD con codice ESP32
- 19:49 Demo LCD DHT11 con ESP32
- 21:33 Prendere provvedimenti sul valore della temperatura
#include "DHT.h"
#define DHTPIN 14 // Imposta il pin collegato al pin dati DHT11.
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
Serial.println("DHT11 test!");
dht.begin();
}
void loop() {
// Aspetta qualche secondo tra le misurazioni.
delay(2000);
// La lettura della temperatura o dell'umidità richiede circa 250 millisecondi!
// Le letture del sensore possono anche essere "vecchie" fino a 2 secondi (è un sensore molto lento)
float humidity = dht.readHumidity();
// Leggere la temperatura come Celsius (il predefinito)
float temperature = dht.readTemperature();
// Controlla se ci sono letture fallite ed esci prima (per riprovare).
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Stampa l'umidità e la temperatura
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C");
}
/*
* Questo è codice Arduino per misurare la temperatura e l'umidità utilizzando DHT11/DHT22 e visualizzarlo sullo schermo LCD, scritto da Ahmad Shamshiri per il kit di apprendimento IoT ESP32 di SunFounder. Guarda il video completo su https://youtu.be/qRUFZX4eDJg. Il codice completo, il diagramma di collegamento e altre risorse per questo tutorial sono disponibili su https://robojax.com/RJT711.
*/
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 14 // Imposta il pin connesso al pin dati DHT11.
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
// Inizializza l'oggetto LCD con indirizzo I2C 0x27, 16 colonne e 2 righe
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Iniziare la comunicazione seriale a 115200 baud
Serial.begin(115200);
// Inizializza il dht11
dht.begin();
// Inizializza il LCD
lcd.init();
lcd.backlight();
// Pulisci l'LCD
lcd.clear();
}
void loop() {
// Aspetta alcuni secondi tra le misurazioni.
delay(2000);
// La lettura della temperatura o dell'umidità richiede circa 250 millisecondi!
// Le letture del sensore possono anche essere 'vecchie' fino a 2 secondi (è un sensore molto lento)
float humidity = dht.readHumidity();
// Leggere la temperatura in gradi Celsius (il valore predefinito)
float temperature = dht.readTemperature();
// Controlla se ci sono letture non riuscite ed esci in anticipo (per riprovare).
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Visualizza temperatura e umidità sul display LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.write(223); // Simbolo di grado
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humi: ");
lcd.print(humidity);
lcd.print("%");
}
Common Course Links
Common Course Files
Cose di cui potresti avere bisogno
-
AmazonAcquista DHT11 su Amazonamzn.to
-
BanggoodAcquista il modulo DHT11 da Banggoodbanggood.com
Risorse e riferimenti
-
DocumentazioneTutorial ESP32 28/55 - Pagina doc SunFounder per sensore di temperatura DHTdocs.sunfounder.com
File📁
File Fritzing
-
Sensore di Umidità e Temperatura DHT11 (3 pin)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
Manuale dell'utente
-
Manuale dell'utente DHT11
robojax-DHT11_manual.pdf0.82 MB