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
- RaspberryPi, le basi: Cos’è e cosa non è. #1
- RaspberryPi, le basi: Sistemi operativi ed installazione. #2
- RaspberryPi, le basi: post installazione. #3
- RaspberryPi, le basi: i software. #4
- RaspberryPi, le basi: Comandi e file utili #5
- RaspberryPi, le basi: accesso remoto al Desktop. #6
- RaspberryPi, le basi: sicurezza informatica contro gli hacker. #7
- RaspberryPi, le basi: le porte GPIO. #8
- RaspberryPi, le basi: pulsanti e led. #9
- 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.
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:
- aggiorniamo l'elenco dei software apt
- installiamo i prerequisiti
- scarichiamo (cloniamo) il git di Adafruit
- eseguiamo l'installazione
- 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 !