Čidlo DHT-22 je možné koupit třeba na alza.cz, takže jsem provedl objednávku a příští den jsem měl senzor doma. I toto čidlo má výrazně lepší parametry pro měření teploty než Sense Hat.
Místo čidla DHT-22 je také možné použít čidlo DHT-11 (modré). Celý návod je stejný, jen na konci se v programu musí použít 11 místo 22. Čidlo DHT-11 má trochu horší parametry, ale je levnější. Je ho možné koupit například na gme.cz.
Jak tedy připojit čidlo DHT-22 k Raspberry Pi?
Pro připojení je potřeba k čidlu připájet rezistor 4k7. Tento rezistor se připájí mezi napájení a datový vodič. Připojení je znázorněno na obrázku
První výstup zleva je napájení. Čidlo je opět možné napájet napětím 3,3V i 5V (piny 1, 17 i 2 a 4). Druhý výstup je datový, který je možné připojit k libovolnému GPIO pinu. Třetí výstup není potřeba k ničemu připojovat. Čtvrtý výstup je uzemnění a je ho potřeba připojit k pinu s označením Ground (6, 9, 14, 20, 25, 30, 34 nebo 39).
Načtení hodnoty z čidla
Nejjednodušší možností, jak otestovat zda čidlo funguje a je správně připojeno, je použít python knihovnu od Adafruitu. Instalace této knihovny se provádí následujícími příkazy.
sudo apt-get update
sudo apt-get install build-essential git python-dev python-openssl
cd ~
git clone https://github.com/adafruit/Adafruit_Python_DHT
cd Adafruit_Python_DHT
sudo python setup.py install
Nyní máme knihovnu nainstalovanou a zkompilovanou a můžeme zkusit zda čidlo funguje.
Funkčnost ověříme pomocí skriptu AdafruitDHT.py, který se nachází v adresáři examples. Tento script příjmá dva parametry.
První parametr je typ čidla. V případě, že používáte DTH-22, tak se jako hodnota prvního parametru použije číslo 22. Pokud místo čidla DHT-22 používáme čidlo DHT-11, tak hodnotou parametru je číslo 11.
Hodnotou druhého parametru je číslo pinu, ke kterému je připojen datový vodič čidla. Pokud tedy máme čidlo připojené podle obrázku výše, tak je druhý parametr číslo 7.
sudo ./AdafruitDHT.py 22 7
Pokud je všechno zapojeno a nastaveno správně, tak výstupem tohoto scriptu je aktuální teplota a vlhkost.
Temp=22.6* Humidity=38.6%
Program v Pythonu
Takže známe způsob jak z čidla načíst údaje a můžeme doplnit script pro meteostanici. Potřebujeme opět cyklické načítání hodnot a jejich zápis do databáze.
import subprocess
import re
import time
def read_temp_and_humidity(gpio, sensor):
adafruit = "/home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py"
sensorReadings = subprocess.check_output(['sudo','python',adafruit,sensor,gpio])
try:
# try to read neagtive numbers
temperature = re.findall(b"Temp=(-\d+.\d+)", sensorReadings)[0]
except:
# if negative numbers caused exception, they are supposed to be positive
try:
temperature = re.findall(b"Temp=(\d+.\d+)", sensorReadings)[0]
except:
pass
humidity = re.findall(b"Humidity=(\d+.\d+)", sensorReadings)[0]
intTemp = float(temperature)
intHumidity = float(humidity)
return intTemp, intHumidity
while True:
print(read_temp_and_humidity("7", "22"))
time.sleep(60)
Tento script cyklicky načítá hodnoty z čidla a vypisuje je na obrazovku. Pokud jste python knihovnu od Adafruitu nainstalovali do jiného umístění, je potřeba změnit cestu na začátku scriptu. Cesta musí vést ke scriptu AdafruitDHT.py.
Příklad se zápisem hodnot do databáze
Specifikace čidla:
Napájení 3.3 – 6V
Vlhkostní rozsah 0 – 100%
Přesnost měření vlhkosti +-2%
Teplotní rozsah -40 – 80 °C
Přesnost měření teploty +- 0,5 °C
Zdroje:
http://www.instructables.com/id/Raspberry-PI-and-DHT22-temperature-and-humidity-lo/
https://github.com/adafruit/Adafruit_Python_DHT
Nefunkční knihovna AdafruitDHT.py na nejnovějším kernelu Raspberry Pi
Na nejnovějším kernelu Raspberry Pi knihovna od Adafruitu pro DHT, kterou v tomto scriptu využívám, nefunguje. Je tedy potřeba v případě problémů provést downgrade kernelu.
Postup, jak provést downgrade a znovu zprovoznit knihovnu, je popsán v Issue 63.