Raspberry és DHT22 hőmérséklet és páratartalom mérő

Egy előző bejegyzésben sikeresen csatlakoztattunk egy 16×2-es LCD kijelzőt a Raspberry-hez. Ezt itt olvashatod. Ebben a posztban pedig egy DHT22-es hő és páratartalom mérőt is csatlakoztatunk, és a mért értékeket az LCD kijelzőn jelenítjük meg egy egyszerű kis mintaprogrammal.

Amire szükségünk lesz:

  • A már meglévő Raspberry és LCD konfiguráció
  • DHT22 digitális hő és páratartalom mérő modul
  • 1db 4,7K ohm ellenállás
  • némi vezeték
  • jókedv

DHT22 ismertetése, bekötése, lábkiosztása:

A DHT22 digitális hőmérséklet és páratartalom mérő szenzor négy kivezetéses tokozásban kapható. Tápfeszültsége 3-5V közötti. A hőmérsékletet +-0.5 fok pontossággal, míg a relatív páratartalmat 2-5% pontossággal tudja mérni. A szenzor digitális kimenettel rendelkezik, 1 vezetékes Dallas kompatibilis protokollt használ, így egyszerűen illeszthető Raspberry-hez.

Műszaki jellemzők:

  • Hőmérséklet mérési tartomány: -40-125°C/±0.5°C
  • Páratartalom mérési tartomáány: 0-100%/±2-5%
  • Mintavételezés: 0.5Hz (két másodpercenként új mérés)
  • Méretek: 15.1mm X 25mm x 7.7mm
  • Tápfeszültség: 3-5V
  • Áramfelvétel: 2.5mA (mérés közben)
DHT22 lábkiosztás

DHT22 lábkiosztás

Bekötése egyszerű, akár  a Raspberry-re is köthetjük a tápfeszültség és a GND pontokat. A kettes, adat láb és a tápfeszültség közé rakjunk egy 4.7KOhm-os ellenállást.

DHT22 bekötési rajz

DHT22 bekötési rajz

DHT22-resistor

DHT22-resistor

A GPIO pin kivezetést csatlakoztassuk a Raspberry egy szabad bemenetére, és jegyezzük is meg hová kötöttük, ez majd a mintaprogram futtatásakor kell.

A mintaprogramok beszerzése, előkészítése a használathoz:

Mint az előző demóban itt is az adafruit github-os forrását fogjuk használni.  https://github.com/adafruit/Adafruit_Python_DHT

pi@pi2:~ $ git clone https://github.com/adafruit/Adafruit_Python_DHT.git
Cloning into 'Adafruit_Python_DHT'...
remote: Counting objects: 223, done.
remote: Total 223 (delta 0), reused 0 (delta 0), pack-reused 223
Receiving objects: 100% (223/223), 71.72 KiB | 0 bytes/s, done.
Resolving deltas: 100% (125/125), done.
Checking connectivity... done.
pi@pi2:~ $
pi@pi2:~ $ cd Adafruit_Python_DHT
pi@pi2:~/Adafruit_Python_DHT $
pi@pi2:~/Adafruit_Python_DHT $ sudo python setup.py install
running install
running bdist_egg
running egg_info
creating Adafruit_DHT.egg-info
writing Adafruit_DHT.egg-info/PKG-INFO
writing top-level names to Adafruit_DHT.egg-info/top_level.txt
writing dependency_links to Adafruit_DHT.egg-info/dependency_links.txt
writing manifest file 'Adafruit_DHT.egg-info/SOURCES.txt'
reading manifest file 'Adafruit_DHT.egg-info/SOURCES.txt'
writing manifest file 'Adafruit_DHT.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-armv7l/egg
running install_lib
running build_py
creating build
creating build/lib.linux-armv7l-2.7
creating build/lib.linux-armv7l-2.7/Adafruit_DHT
copying Adafruit_DHT/__init__.py -> build/lib.linux-armv7l-2.7/Adafruit_DHT
copying Adafruit_DHT/Test.py -> build/lib.linux-armv7l-2.7/Adafruit_DHT
copying Adafruit_DHT/Raspberry_Pi.py -> build/lib.linux-armv7l-2.7/Adafruit_DHT
copying Adafruit_DHT/Raspberry_Pi_2.py -> build/lib.linux-armv7l-2.7/Adafruit_DH T
copying Adafruit_DHT/Beaglebone_Black.py -> build/lib.linux-armv7l-2.7/Adafruit_ DHT
copying Adafruit_DHT/platform_detect.py -> build/lib.linux-armv7l-2.7/Adafruit_D HT
copying Adafruit_DHT/common.py -> build/lib.linux-armv7l-2.7/Adafruit_DHT
running build_ext
building 'Adafruit_DHT.Raspberry_Pi_2_Driver' extension
creating build/temp.linux-armv7l-2.7
creating build/temp.linux-armv7l-2.7/source
creating build/temp.linux-armv7l-2.7/source/Raspberry_Pi_2
arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototyp es -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/include/python2.7 -c source/_Raspberry_Pi_ 2_Driver.c -o build/temp.linux-armv7l-2.7/source/_Raspberry_Pi_2_Driver.o -std=g nu99
arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototyp es -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/include/python2.7 -c source/common_dht_rea d.c -o build/temp.linux-armv7l-2.7/source/common_dht_read.o -std=gnu99
arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototyp es -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/include/python2.7 -c source/Raspberry_Pi_2 /pi_2_dht_read.c -o build/temp.linux-armv7l-2.7/source/Raspberry_Pi_2/pi_2_dht_r ead.o -std=gnu99
arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototyp es -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/include/python2.7 -c source/Raspberry_Pi_2 /pi_2_mmio.c -o build/temp.linux-armv7l-2.7/source/Raspberry_Pi_2/pi_2_mmio.o -s td=gnu99
arm-linux-gnueabihf-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z ,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D _FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security - Wl,-z,relro -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=for mat-security build/temp.linux-armv7l-2.7/source/_Raspberry_Pi_2_Driver.o build/t emp.linux-armv7l-2.7/source/common_dht_read.o build/temp.linux-armv7l-2.7/source /Raspberry_Pi_2/pi_2_dht_read.o build/temp.linux-armv7l-2.7/source/Raspberry_Pi_ 2/pi_2_mmio.o -lrt -o build/lib.linux-armv7l-2.7/Adafruit_DHT/Raspberry_Pi_2_Dri ver.so
creating build/bdist.linux-armv7l
creating build/bdist.linux-armv7l/egg
creating build/bdist.linux-armv7l/egg/Adafruit_DHT
copying build/lib.linux-armv7l-2.7/Adafruit_DHT/__init__.py -> build/bdist.linux -armv7l/egg/Adafruit_DHT
copying build/lib.linux-armv7l-2.7/Adafruit_DHT/Test.py -> build/bdist.linux-arm v7l/egg/Adafruit_DHT
copying build/lib.linux-armv7l-2.7/Adafruit_DHT/Raspberry_Pi_2_Driver.so -> buil d/bdist.linux-armv7l/egg/Adafruit_DHT
copying build/lib.linux-armv7l-2.7/Adafruit_DHT/Raspberry_Pi.py -> build/bdist.l inux-armv7l/egg/Adafruit_DHT
copying build/lib.linux-armv7l-2.7/Adafruit_DHT/Raspberry_Pi_2.py -> build/bdist .linux-armv7l/egg/Adafruit_DHT
copying build/lib.linux-armv7l-2.7/Adafruit_DHT/Beaglebone_Black.py -> build/bdi st.linux-armv7l/egg/Adafruit_DHT
copying build/lib.linux-armv7l-2.7/Adafruit_DHT/platform_detect.py -> build/bdis t.linux-armv7l/egg/Adafruit_DHT
copying build/lib.linux-armv7l-2.7/Adafruit_DHT/common.py -> build/bdist.linux-a rmv7l/egg/Adafruit_DHT
byte-compiling build/bdist.linux-armv7l/egg/Adafruit_DHT/__init__.py to __init__ .pyc
byte-compiling build/bdist.linux-armv7l/egg/Adafruit_DHT/Test.py to Test.pyc
byte-compiling build/bdist.linux-armv7l/egg/Adafruit_DHT/Raspberry_Pi.py to Rasp berry_Pi.pyc
byte-compiling build/bdist.linux-armv7l/egg/Adafruit_DHT/Raspberry_Pi_2.py to Ra spberry_Pi_2.pyc
byte-compiling build/bdist.linux-armv7l/egg/Adafruit_DHT/Beaglebone_Black.py to Beaglebone_Black.pyc
byte-compiling build/bdist.linux-armv7l/egg/Adafruit_DHT/platform_detect.py to p latform_detect.pyc
byte-compiling build/bdist.linux-armv7l/egg/Adafruit_DHT/common.py to common.pyc
creating stub loader for Adafruit_DHT/Raspberry_Pi_2_Driver.so
byte-compiling build/bdist.linux-armv7l/egg/Adafruit_DHT/Raspberry_Pi_2_Driver.p y to Raspberry_Pi_2_Driver.pyc
creating build/bdist.linux-armv7l/egg/EGG-INFO
copying Adafruit_DHT.egg-info/PKG-INFO -> build/bdist.linux-armv7l/egg/EGG-INFO
copying Adafruit_DHT.egg-info/SOURCES.txt -> build/bdist.linux-armv7l/egg/EGG-IN FO
copying Adafruit_DHT.egg-info/dependency_links.txt -> build/bdist.linux-armv7l/e gg/EGG-INFO
copying Adafruit_DHT.egg-info/top_level.txt -> build/bdist.linux-armv7l/egg/EGG- INFO
writing build/bdist.linux-armv7l/egg/EGG-INFO/native_libs.txt
zip_safe flag not set; analyzing archive contents...
creating dist
creating 'dist/Adafruit_DHT-1.3.0-py2.7-linux-armv7l.egg' and adding 'build/bdis t.linux-armv7l/egg' to it
removing 'build/bdist.linux-armv7l/egg' (and everything under it)
Processing Adafruit_DHT-1.3.0-py2.7-linux-armv7l.egg
Copying Adafruit_DHT-1.3.0-py2.7-linux-armv7l.egg to /usr/local/lib/python2.7/di st-packages
Adding Adafruit-DHT 1.3.0 to easy-install.pth file

Installed /usr/local/lib/python2.7/dist-packages/Adafruit_DHT-1.3.0-py2.7-linux- armv7l.egg
Processing dependencies for Adafruit-DHT==1.3.0
Finished processing dependencies for Adafruit-DHT==1.3.0
pi@pi2:~/Adafruit_Python_DHT $

Remek, ha eddig eljutottunk, akkor már ki is próbálhatjuk működik e a hőmérő, bár itt még csak a konzolt használjuk megjelenítőként nem az LCD-t. Ha nem jelenik meg semmi, vagy hibaüzenetet kapunk, akkor ellenőrizzük a telepítést.

Az első teszt, még nem az LCD-re:

pi@pi2:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 22 26
Temp=18.7* Humidity=47.2%
pi@pi2:~/Adafruit_Python_DHT/examples $

A 22 a modul típust jelöli (DHT11-nél ez az érték 11), míg a 26 a GPIO 26 portszámot jelöli.

Teszt, LCD modul használatával:

#!/usr/bin/python
import time
import sys
import Adafruit_CharLCD as LCD
import Adafruit_DHT
# DHT konfig
humidity, temperature = Adafruit_DHT.read_retry(22, 26)
# Raspberry Pi pin configuration:
lcd_rs = 27 # Note this might need to be changed to 21 for older revisi$
lcd_en = 22
lcd_d4 = 25
lcd_d5 = 24
lcd_d6 = 23
lcd_d7 = 18
lcd_backlight = 4

# Define LCD column and row size for 16x2 LCD.
lcd_columns = 16
lcd_rows = 2

# Initialize the LCD using the pins above.
lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
 lcd_columns, lcd_rows, lcd_backlight)

if humidity is not None and temperature is not None:

 temp = 'Temp={0:0.1f} C'.format(temperature)
 humidity = 'Humidity={1:0.1f} %'.format(temperature,humidity)
else:
 print('Failed to get reading. Try again!')

# Print a two line message
lcd.clear()
lcd.message(temp + "\n" + humidity)

Hozzunk létre egy fájlt, és a fenti programot másoljuk bele. Módosítsuk a paramétereket a saját bekötésünknek megfelelően. “humidity, temperature = Adafruit_DHT.read_retry(22, 26)” mint feljebb már írtam 22 a DHT22, ha ilyen szenzorunk van akkor a 22 maradhat, 26 pedig a GPIO portszám. Ha másra kötöttük akkor azt a portszámot írjuk be itt.

Ha mindet jól csináltunk és futtatjuk a kis programunkat, akkor az LCD kijelzőn megjelenik az aktuális hőmérséklet és páratartalom.

Raspberry-DHT22-LCD

Raspberry-DHT22-LCD