Programmiamo il sensore di temperatura e umidità DHT11 in MicroPython

Il sensore DHT11 è uno dei sensori digitali più diffusi per la misurazione di temperatura in gradi Celsius e di umidità relativa. Per chi già conosce questo sensore, saprà che è molto economico e facile da reperire, tuttavia è anche impreciso nelle misurazioni. Nel complesso è un sensore adatto a scopi amatoriali o hobbistici, ideale per apprendere la programmazione e realizzare piccoli progetti. Il DHT11 ha un fratello maggiore, il DHT22, che differisce dal fratello nella misurazione: questo infatti rileva i dati in virgola mobile e non in interi.

Vediamo come collegarlo e programmarlo con la nostra Lolin32 Lite con chip ESP32.

Specifiche

Il sensore DHT11 è uno dei sensori più noti e diffusi nell’ambito hobbistico. Nella sua forma a modulo possiede 3 pin: il segnale, il GND e il pin per la tensione elettrica. Sarà possibile alimentare il sensore con una tensione compresa tra i 3,3V e i 5V, arrivando a richiedere fino a 0.3mA di corrente. La misurazione della temperatura è compresa in un range di 0°C e 50°C, con un’accuratezza di ±1°C. L’umidità relativa viene misurata con un range compreso tra o% e 100%; anche qui l’accuratezza è di ±1%. Il DHT11 effettua misurazioni in numeri interi, mentre per il DHT22 permetterà di effettuare misurazioni a virgola mobile.

DHT11Specifiche
Range Temp.0°C / 50°C
Range Umid.0% / 100%
Precisione Temp.±1°C
Precisione Umid.±1%
Tensione3,3V - 5V
Corrente0,3 mA
Pin Modulo3
MisurazioneNumeri interi



Collegamenti

Preventiviamo che andremo a collegare alla ESP32 il modulo DHT11, per cui i collegamenti saranno estremamente semplici. Tali collegamenti valgono anche per il modulo DHT22, ma non per il sensori privi di modulo, per i quali è necessario adoperare un resistore. Trattandosi di un tutorial che si pone l’obiettivo di spiegarvi come programmare il sensore, ci cureremo solo di questo aspetto. Iniziamo, allora, a vedere i collegamenti.

DHT11

Il pin del segnale del modulo va connesso al pin digitale 4 della dev-board, mentre per la tensione, colleghiamo il modulo ai 3,3V e il GND al ground. Il modulo può essere alimentato con tensioni superiori ai 3,3V ma comunque inferiori ai 5V.



Codice

Proseguiamo vedendo il codice da scrivere per far funzionare il nostro sensore DHT11, scaricabile a questo LINK. Iniziamo, come sempre, inserendo le librerie machine e time, la prima per la gestione del PIN, mentre la seconda per la gestione dei timer bloccanti, rammentandovi che sono espressi in secondi. Inseriamo poi la libreria dht per la gestione del sensore.


from machine import Pin
from time import sleep
import dht

Creando l’oggetto sensor, impostiamo il tipo di sensore e il pin a cui è collegato.


sensor = dht.DHT11(Pin(4))

Avviamo il ciclo while True e avviamo la misurazione (sensor.measure()), creiamo due variabili t e h per rilevare la temperatura e l’umidità. Stampiamo sulla shell i dati rilevati, accompagnandoli dall’apposita unità di misura.


while True:
try:
sensor.measure()
t = sensor.temperature()
h = sensor.humidity()

print('Temperatura: ' , t , '°C')
print('Umidità: ', h, '%\n')

Nel caso in cui il sensore non funzionasse o non fosse collegato correttamente, stampiamo un messaggio che ci avvisi.


except OSError as e:
print('Lettura sensore fallita!')

Andiamo a caricare il codice sulla nostra dev-board e attendiamo. Sulla shell apparirà quanto segue:

dht11