Raspberry Pi, le basi: DHT11 umidità e temperatura. #11


Informatica / sabato, Maggio 2nd, 2020

Sei rimasto spiazzato dell'articolo precedente? Troppo avanti per stare nella rubrica Raspberry Pi ,le basi ? Nessun problema, torniamo alla sensoristica utile per i nostri progetti IoT. Oggi si parla di DHT11, il sensore di temperatura ed umidità più famoso nel web!

Nelle puntate precedenti

  1. RaspberryPi, le basi: Cos’è e cosa non è. #1
  2. RaspberryPi, le basi: Sistemi operativi ed installazione. #2
  3. RaspberryPi, le basi: post installazione. #3
  4. RaspberryPi, le basi: i software. #4
  5. RaspberryPi, le basi: Comandi e file utili #5
  6. RaspberryPi, le basi: accesso remoto al Desktop. #6
  7. RaspberryPi, le basi: sicurezza informatica contro gli hacker. #7
  8. RaspberryPi, le basi: le porte GPIO. #8
  9. RaspberryPi, le basi: pulsanti e led. #9
  10. RaspberryPi, le basi: Robot e Smartphone, con BlueDot. #10

DHT11 e DHT 22

DHT11 è il fratellino del DHT22, sono sensori in grado di rilevare umidità e temperatura grazie alle semplici librerie forniteci da Adafruit, ma vediamoli in po' nel dettaglio.

DHT11 1-Wire

Nel datasheet del DHT11 potremmo trovare tutti i dettagli:

  • Range di misurazione: Umidità: 20-90%RH , Temperatura: 0-50°
  • Accuratezza umiditià: Umiditià ±5%RH
  • Accuratezza Temperatura: ±2℃
  • Risoluzione: 1
  • Alimentazione: 3-5.5v

Mentre dal datasheet del DHT22 anche detto Am2320:

  • Range di misurazione: Umidità: 0-100%RH , Temperatura: -40~80
  • Accuratezza: Umidità +-2%RH(Max +-5%RH) ,
  • Accuratezza Temperatura: <+-0.5°
  • Risoluzione: Umidità 0.1%RH , Temperatura: 0.1°
  • Alimentazione: 3.3-6v

Come avrai notato il DHT11 è un po' meno preciso, ma non è niente male sinceramente, poi dipende dal progetto valutare quanto precisione serve.

Un consiglio personale, compra la versione con DHT e componenti già pronti da collegare (vedi immagine precedente), costa un pochino di più ma avrai una soluzione rapida ed elegante. Fai attenzione però, Vcc e signal sono invertiti, mentre nella versione di destra il terzo pin non è usato.

Collegamenti DHT11 su RaspberryPi

Ecco il mio fedele RaspberryPi 3B da battaglia, con a bordo il nostro sensore DHT11, i collegamenti sono semplici.

In pratica Pin 1 (da sinistra) ha nel mio caso, i 5v di alimentazione, il secondo pin con il segnale una resistenza da 4.7KOhm per stabilizzare il segnale collegato al pin 4 (con i vecchi kernel era quello dedicato per il 1-Wire, ora si possono usare vari pin contemporaneamente, maggiori dettagli qui) .

1-Wire e la sua attivazione

Il 1-Wire è un bus a basso costo basato su personal computer (PC) o microcontrollore che permette la comunicazione tra componenti 1-Wire attraverso due soli fili. Infatti, a dispetto del nome, il bus fa uso di due fili anziché uno, cioè il minimo indispensabile per offrire agli elettroni una via di ritorno.

Una completa trattazione del bus 1-Wire la possiamo trovare qui , in poche parole, con un solo filo "1-Wire" riesci ad ottenere i dati dal sensore.

C'è da premettere una cosa, i sensori DHT11 funzionano in modo preciso su micro controllori stile arduino , perché riescono con assoluta precisione ad inviare il dato e riceverlo grazie al fatto di avere un sistema in RealTime.

Il RaspberryPi essendo un sistema multitasking non può garantire questa precisione, che compenserà tramite le librerie, adottando un sistema di controllo degli errori di lettura.

In RaspberryPi, tramite shell dovremmo attivare la modalità 1-Wire, con il comando

sudo raspi-config

ed entrando nel menù, interfacing option, 1-Wire.

Librerie DHT Adafruit

Grazie ad Adafruit, abbiamo già belle pronte le librerie per giocare col nostro sensore DHT. Per installarle eseguiamo

sudo apt-get update
sudo apt-get install build-essential python-dev python-openssl git
git clone https://github.com/adafruit/Adafruit_Python_DHT.git && cd Adafruit_Python_DHT
sudo python setup.py install
cd examples
sudo ./AdafruitDHT.py 11 4

Spiegazione dei comandi precedenti:

  1. aggiorniamo l'elenco dei software apt
  2. installiamo i prerequisiti
  3. scarichiamo (cloniamo) il git di Adafruit
  4. eseguiamo l'installazione
  5. avviamo lo script python con parameto 11 (DHT11) e 4 (PIN)

Aprendo il file AdafruitDHT.py vedremo

sensor_args = { '11': Adafruit_DHT.DHT11,
                '22': Adafruit_DHT.DHT22,
                '2302': Adafruit_DHT.AM2302 }

In pratica il parametro

  • 11 = DHT11
  • 22 = DHT22
  • 2302 = AM2302

E come spiegavo prima, c'è il controllo per l'errore di lettura causato dal multitasking.

Try to grab a sensor reading.  Use the read_retry method which will retry up 
# to 15 times to get a sensor reading (waiting 2 seconds between each retry).

Le librerie sono del 2014, ma finché funzionano perché cambiarle?

E' giunta l'ora di ricevere i dati! Eseguiamo

sudo ./AdafruitDHT.py 11 4
Temp=24.0*  Humidity=41.0%

Nel caso volessimo integrarle nei nostri script python, sarà sufficiente aggiungere.

import Adafruit_DHT
...
sensor = Adafruit_DHT.DHT11
pin = 4
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

Potremmo poi gestirle come meglio preferiamo, ad esempio seguendo la mia precedente guida su Influx e Cronograf, oppure creando in 5 minuti un interfaccia grafica con node-red.

Con Raspberry Pi, il limite è solo la fantasia.

Materiale utilizzato

  • Raspberry Pi 3B
  • Breadboard
  • Cavi Dupont
  • Sensore DHT11
  • Resistenza 4.7KOhm

Ci vediamo alla prossima puntata di Raspberry Pi, le basi !