Come leggere il sensore DHT11 con ESP32

Pubblicato su News il 07/02/2024 da sergio rame ‐ 6 min di lettura

Come leggere il sensore DHT11 con ESP32


Il sensore DHT11

Il sensore DHT11 viene usato per misurare la temperatura e l’umidità relativa dell’aria. E’ probabilmente il sensore digitale più popolare, in parte per il basso costo e in parte per la semplicità di collegamento. Proprio perchè digitale infatti, non necessita di calcoli per la conversione e può inoltre essere adoperato senza componenti aggiuntivi: le versioni più recenti non necessitano neppure di una resistenza di pull-up.

I progettisti hanno pensato bene di saldare una resistenza di pull-up da 10 KΩ nella mini basetta del DHT11 e in questo modo sono riusciti a semplificare il lavoro di progettisti e assemblatori.

Per collegarlo basta perciò fornirgli l’alimentazione e connettere il pin “dati” ad un pin GPIO digitale. Anche l’alimentazione è molto semplice: visto il basso assorbimento lo possiamo collegare senza problemi al pin 5V di ESP32.

Caratteristiche del sensore DHT11

La precisione del sensore:
  • Temperatura: ± 0.1°C
  • Umidità: ± 5%
  • Frequenza di campionamento: 1 Hz (una misurazione al secondo)
E la sua connettività:
  • Interfaccia digitale a 1 filo (semplice da collegare)
  • Basso consumo energetico
  • Tensione di funzionamento 3.3V ~ 5V
  • Corrente di alimentazione 0.5 mA ~ 2.5 mA
Il sensore DHT11 è un sensore NTC, ma cosa significa esattamente?

I sensori NTC: o termistori a coefficiente di temperatura negativo, sono componenti elettronici che sfruttano la proprietà di alcuni materiali semiconduttori di variare la propria resistenza in base alla temperatura. In parole povere, più la temperatura aumenta, più la resistenza del sensore diminuisce.
Come funzionano:: Il principio di funzionamento si basa sul fatto che all’aumentare della temperatura, il numero di portatori di carica liberi nel materiale semiconduttore aumenta, favorendo il passaggio di corrente. Di conseguenza, la resistenza del sensore diminuisce.

Il DHT22

Il DHT11 ha un “quasi gemello”, il DHT22 con delle specifiche similari. Il sensore DHT22 ha una risoluzione migliore e un campo di misura di temperatura e umidità più ampio. Tuttavia è più costoso e non può effettuare letture ad intervalli di 1 secondo. Nel nostro tutorial useremo solo il DHT11.

Il pinout del DHT11

I vecchi sensori DHT11 avevano quattro pin come mostrato nella figura seguente:



Nella tabella in basso puoi vedere il pinout del DHT11 a 4 pin. Quando il sensore è rivolto verso di te, la numerazione dei pin inizia da 1 da sinistra verso destra.

  • pin1: Alimentazione da 3.3V fino a 5V
  • pin2: Qualsiasi GPIO digitale dell’ESP32 (con una resistenza)
  • pin3: Non collegato
  • pin4: GND
Le versioni più moderne del DHT11

Le versioni recenti del sensore sono fornite con una scheda breakout con solo tre pin e con una resistenza di pull-up collegata elettricamente al pin 2. La puoi vedere facilmente nel cerchietto rosso accanto al pin VCC.


In basso trovi il pinout del DHT11 a 3 pin.

  • Pin 1 - (GND) - Massa del circuito
  • Pin 2 - (DATA) - Uscita dati verso qualsiasi GPIO digitale dell’ESP32
  • Pin 3 - (VCC) - Alimentazione da 3.3V fino a 5V

Nel nostro progetto useremo solo la versione a 3 pin.

Le resistenze di pull-up sono dei componenti utilizzati nei circuiti digitali per garantire che un segnale rimanga a un livello logico alto (1 logico) quando non è altrimenti definito. Questo è particolarmente importante in dispositivi a logica aperta (open-drain o open-collector) o quando si lavora con dispositivi a bassa corrente come i MOSFET.

Lo schema elettrico

Nello schema in basso:

  • il filo nero collega il pin GND dell’ESP32 al pin1 del DHT11 (il pin più a sinistra),

  • il filo giallo connette il pin GPIO 13 dell’ESP con il pin centrale del DHT11,

  • il filo rosso serve a collegare la alimentazione prelevata dal pin 5V della scheda con il terzo pin a destra del sensore.

schema Fritzing del circuito per leggere il sensore DHT11 con ESP32

Il programma per leggere il sensore DHT11 con ESP32

Se vuoi sapere come compilare un programma con Arduino Ide e con PlatformIO a linea di comando puoi leggere questo post del nostro blog. Per installare PlatformIO puoi invece fare riferimento a questo altro post. Nei progetti più complessi useremo soprattutto PlatformIO per sua semplice interazione con il comando GIT.

Per installare il progetto completo dal nostro account Github fai copia e incolla dalla casella sottostante:

git clone git@github.com:sebadima/corso-ESP32-dht11-basic.git
cd corso-ESP32-dht11-basic
make upload
platformio device monitor --baud 115200  --rts 0 --dtr 0

Dopo alcuni istanti vedrai i valori di Temperatura e Umidità rilevati dal sensore. Con Platformio non è necessario settare scheda, porta e installare librerie “a mano”, un vantaggio non da poco. Il trucco è semplicissimo: i nomi e le versioni delle librerie sono scritte nel file platformio.ini e il comando “make” si occupa di scaricarle da internet, compilarle e linkarle.

Il file main.ino

#include <Arduino.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>

#define DHTPIN  13    // Pin #13 dell ESP32
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);

float t;
float h;


void setup(){
  Serial.begin(115200);
  dht.begin();
}

void loop(){  
    float newT = dht.readTemperature();

    if (isnan(newT)) {
      Serial.println("Non riesco a leggere il sensore DHT!");
    }
    else {
      t = newT;
      Serial.print("Temperatura = ");
      Serial.println(t);
    }

    float newH = dht.readHumidity();

    if (isnan(newH)) {
      Serial.println("Non riesco a leggere il sensore DHT!");
    }
    else {
      h = newH;
      Serial.print("Umidità = ");
      Serial.println(h);
    }

    delay(1000);
}

Se hai scaricato da Github avrai l’ambiente di sviluppo già pronto compreso il file sorgente, ma è utile dargli una occhiata se vuoi, ad esempio, apportare delle piccole modifiche.

La struttura dati:
DHT dht(DHTPIN, DHTTYPE);
serve a far funzionare il DHT11 isolandolo in un “oggetto” incapsulato, cui accedere solo attraverso delle chiamate di funzione senza leggere o peggio modificare variabili e puntatori.

La funzione:
setup()
non serve a nulla di speciale ma serve a settare la seriale a 115200 baud ed a inizializzare in automatico l’“oggetto” per il DHT11.

La istruzione:
float newT = dht.readTemperature();
legge le temperatura mentre la istruzione:
if (isnan(newT)) …
permette di controllare se il DHT11 è davvero collegato e se arrivano i dati.

Infine la istruzione:
delay(1000);
serve ad introdurre un breve intervallo di un secondo, abbastanza veloce per rilevare il movimento di un accendino nei paraggi del sensore

Il collaudo del programma per leggere il sensore DHT11 con ESP32

Dopo avere lanciato il monitor seriale dovresti leggere la temperatura e la umidità come nella immagine sopra. Se ciò non accade controlla di avere collegato il pin GPIO13 di ESP al connettore centrale del DHT11. Ricontrolla la connessione del cavetto di alimentazione (rosso) collegato al pin 5V dell’ESP. In casi estremi prova a cambiare il cavo USB.



Robotdazero.it - post - R.152.1.6.1

RESTA IN CONTATTO

Novità settimanali su prodotti, offerte speciali, corsi e altro ancora.