Luftfeuchte messen mit dem DHT22 und mit dem Raspberry Pi. Das ist die vierte von sieben Missionen in einem dreistündigen Program für Schüler mit ihren Lehrern. Ziel des Programms ist, Schüler dazu fit zu machen, dass sie eine Wetterstation aufzubauen können. Die vierte Mission behandelt die Messung der relativen Luftfeuchte und der Temperatur mit mit dem Sensor DHT22
Zuletzt getestet: 03.09.2021 auf Raspbian Buster (für die digitalen Bienenstöcke)
Update 10.02.2021 für Feuchtegradienten in Bienenstock-Klimadeckeln (PIP, setuptools)
Update 03.09.2021 (PIP installiert setuptools sebstständig)
Update 12.03.2022 (neue Version) Es gibt eine neugefasste Anleitung, die mit RaspiOS Bullseye getestet ist
Bisher erschienene Artikel zur RaspiLab Wetterstation
- Raspilab Wetterstation Grundsystem aufsetzen
- Raspilab Wetterstation Lebensdauer der SD-Karte erhöhen
- RaspiLab Wetterstation vierte Mission Luftfeuchte messen mit dem DHT22
- RaspiLab Wetterstation sechste Mission Druck messen mit dem BMP280
DHT22
Der Sensor DHT22 kann die relative Luftfeuchte und auch die Temperatur messen. Der Sensor soll eine Genauigkeit von 2% für die Feuchte und 0,5 Grad für die Temperatur haben. Es ist eine Betriebsspannung von 3,3V bis 5V möglich, daher eignet sich der DHT22 gut in Verbindung mit dem Raspberry Pi. Alternativ kann der Sensor DHT11 verwendet werden, der allerdings ungenauer ist und auch einen geringeren Feuchtebereich umfasstt..
Schaltplan
Abb. 1 zeigt die Beschaltung des DHT22. Der Widerstand mit 4,7 Kilo-Ohm ist ein sogenannter Pull-Up-Widerstand und sorgt dafür, dass Anschluss Signal eine definierte Spannung anliegt. Abb. 2 zeigt die Beschaltung auf dem Steckbrett für den Schülerworkshop, Abb. 3 zeigt ein anderes Anwendungsszenario: Messung in einem Meisen-Nistkasten. In Abb. 3 sind die Anschlüsse mit dem Raspberry verlötet, da die Verkabelung stark schwankenden Umweltbedingungen ausgesetzt ist und die Steckanschlüsse erfahrungsgemäß nach etwa einem Jahr korrodieren.
Abb. 1: Beschaltung des DHT22
Abb. 2: Verkabelung des Raspberry Pi mit dem Feuchte-Sensor DHT22 auf dem Steckbrett
Abb. 3; Verkabelung des DHT22 mit dem Raspberry Pi am Beispiel der digitalen Nistkasten-Kamera
Verkabelung des DHT22 mit dem Raspberry PI auf dem Steckbrett
- Sensor in J21, J22, J23 und J24
- Widerstand G22 und G17
- Jumperkabel F21 in rote (+) Außenleiste
- Jumperkabel F17 in rote (+) Außenleiste
- Jumperkabel rote (+) Außenleiste in Pin 1 (3,3V)
- Jumperkabel F22 in Pin 38 (GPIO20)
- Jumperkabel F24 in Pin 34 (Ground)
Verkabelung des DHT22 mit dem Raspberry Pi für den Nistkasten
Mit farbiger Litze sind die Anschlüsse direkt verlötet. Der Pull-Up-Widerstand ist direkt am Sensor angebracht. Alternativ können Sie den Widerstand auch in der Nähe der Anschlüsse am Raspberry anbringen. Hier wird für die Datenleitung GPIO 13 (Hardware-Pin-Nr. 33) verwendet. Die Versorgungsspannung (totes Kabel) kommt an 3,3,V, die Masse (schwarzes Kabel) an GND (Hardware-Pin-Nr. 34).
Vorbereiten des Raspberry Pi für die Feuchtemessung
Schritt 1: Der Sensor DHT22 benötigt seine eigenen Python-Pakete. Um die Pakete einzubinden zu können, geben sie folgenden Befehl ein:
Schritt 2: Laden Sie die Adafruit Bibliothek, die den Sensor DHT22 unterstützt. Die Bibliothek wird in ihrem Benutzerverzeichnis pi eingerichtet. Damit die funktioniert, benötigen Sie das Kommando git und müssen es zuvor installieren. Diese Vorbereitung kann entfallen, wenn Sie in anderen Projekten schon git installiert haben. Mit den folgenden drei Befehlen installieren Sie git und überprüfen die Version.
sudo apt update sudo apt install git git --version
Mit git laden Sie die erforderliche Bibliothek
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
Im Nutzerverzeichnis pi finden Sie nach der Installation ein Verzeichnis Adafruit_Python_DHT.
Schritt 3: Installieren Sie die Adafruit Bibliothek. Wechseln Sie in das Verzeichnis mit
cd Adafruit_Python_DHT
Update 10.02.2021: Zwischenschritt 3a
Bei eine Neuinstallation auf aktuellem Raspi OS (Buster vom 11.11.2011) offenbarte beim Aufruf von „sudo python setup.py install“, dass setup-Tools fehlen. Die Fehlermeldung lautet:
„ImportError: No module named setuptools“
Daher sind bei einem „frischen“ Raspi OS zwei Zwischenschritte erforderlich: 1. Installation des Python-Paketmanagers PIP und dann 2. Installation der setuptools mittels PIP. Dazu verwenden Sie die Befehle:
sudo apt install python-pip
Update 03.09.32021: Der folgende am 10.02. eingefügte Befehl ist anscheinend nicht mehr notwendig:
sudo pip install setuptools
Nach Installation von python-pip waren die setuptools verfügbar
Im Verzeichnis Adafruit_Python_DHT gibt es ein Installationsscript setup.py. Verwenden Sie das Script mit
sudo python setup.py install
Der Prozess dauert einen Moment und meldet sich mit der Angabe des Installationsverzeichnissses „Installed /usr/local/lib/python2.7/dist-packages/Adafruit_DHT-1.4.0-py2.7-linux-armv6l.egg …… Finished processing dependencies for Adafruit-DHT==1.4.0“ zurück.
Schritt 4: Nun können Sie testen ob Sensor funktioniert. Im Ordner Adafruit _Python_DHT wechseln Sie in das Verzeichnis „examples“.
cd examples
Testen Sie mit einem mitgelieferten Testscript
sudo python AdafruitDHT.py 2302 22
Die beiden Zahlenangaben sind für die Beschaltung entsprechend Abb. 1. Die 2302 bei der Eingabe steht für die Sensornummer. Schauen Sie einmal auf den Sensor, er trägt den Aufdruck AM2302. Die 22 steht für die GPIO Nummer (nicht für den belegten Pin auf Raspberry Pi). Wenn Sie einen anderen Pin verwenden, z.B. wie bei der Nistkastenschaltung in Abb. 3, lautet der Befehl
sudo python AdafruitDHT.py 2302 13
Die Ausgabe müsste nun so ähnlich wie folgt aussehen:
Temp=22.4* Humidity=34.8%
Für eine beispielhafte Belegung wie folgt
# Raspberry Pi Pinbelegung # SD-Karten-Seite # +------------+------+-----+ # | |GPIO |Pin | # +============+======+=====+ #+VCC |3,3V | | 1 | # +------------+------+-----+ #DS18B20 |SDA1 | 2 | 3 | # +------------+------+-----+ #LED |SCL1 | 3 | 5 | # +------------+------+-----+ #Autoboot |GPCLK0. | 4 | 7 | # +------------+------+-----+ #GND |GND | | 9 | # +------------+------+-----+ #DHT22 |CE1_1 |17 |11 | # +------------+------+-----+
lautet der Aufruf
sudo python AdafruitDHT.py 2302 17
Ein Python-Programm erstellen für: Luftfeuchte messen mit dem DHT22
Schritt 1: Erstellen Sie in Ihrem Verzeichnis pi die Datei für den Quelltext mit dem Editor nano:
nano dht22.py
Schritt 2: Fügen Sie den folgenden Quellcode in die Datei ein.
#!/usr/bin/python import Adafruit_DHT # Messdaten holen # (22 steht fuer die Sensornummer # und die 20 fuer die GPIO Nummer) luftfeuchtigkeit, temperatur = Adafruit_DHT.read_retry(22, 20) #Messdaten ausgeben und auf eine Stellenrunden print "Luftfeuchtigkeit ", luftfeuchtigkeit, "%" print "Temperatur ", temperatur, " Grad"
Der Aufruf Adafruit_DHT.read_retry(22, 20) erwartet die Sensornummer 22. Statt der 20 für die GPIO-Nummer geben Sie je nach Ihrer Verkabelung Ihre GPIO-Nummer an, im Falle des Nistkastensensors 13.
Schritt 3: Geben Sie dem Programm Ausführungsrechte mit
sudo chmod 777 dht22.py
Schritt 4: Testen Sie Ihr Script mit
./dht22.py
Der Sensor ist nicht schnell. Die Messung kann ein paar Sekunden dauern. Als Ausgabe sollte Sie sehen
Luftfeuchtigkeit 91.5999984741 % Temperatur 20.7999992371 Grad
Glückwunsch. Wenn Sie bis hier gekommen sind, haben Sie die vierte Mission geschafft.
Erweiterung: Daten runden und in Datei speichern
Diesen Teil des Workshops probieren Sie dann aus, wenn Sie die Daten weiter verwenden wollen. Das kann z.B. das Hochladen auf einen Webservice oder Nutzung einer Cloud-Lösung wie Dropbox sein. Oder aber Sie wollen, wie im Beispiel des Nistkastens, die Werte in die Bildaufnahme mit einbinden.
Erweitern Sie den Quelltext in dht22.py wie folgt:
#!/usr/bin/python # -*- coding: utf-8 -*- # Import für den Sensor import Adafruit_DHT # Import für Zeitfunktionen import time from time import sleep # Import für Dateioperationen import os # Messdaten holen # 22 steht für die Sensornummer # und die 13 für die GPIO Nummer # zweimal vor-lesen, da erste Messung unzuverlässig print "Erstes Lesen DHT22" luftfeuchtigkeit, temperatur = Adafruit_DHT.read_retry(22, 13) time.sleep(1) print "Zweites Lesen DHT22" luftfeuchtigkeit, temperatur = Adafruit_DHT.read_retry(22, 13) time.sleep(1) print "Drittes Lesen DHT22" luftfeuchtigkeit, temperatur = Adafruit_DHT.read_retry(22, 13) # Messdaten auf eine Stellen runden und ausgeben print "Runden" hum=str(round(luftfeuchtigkeit,1)) temp=str(round(temperatur,1)) print "Gemessene Werte:" print "Luftfeuchtigkeit",hum , "%" print "Temperatur",temp , "°C" # Daten in String zusammenstellen zeit = time.strftime("%y%m%d%-H%M%S") datei = open('dht22.txt','w') ausgabe = zeit+';'+temp+';'+hum print "In Datei:",ausgabe datei.write(ausgabe) datei.close print "Beendet"
externe Quellen
GIT installieren https://linuxize.com/post/how-to-install-git-on-raspberry-pi/
Hallo, der Beitrag ist sehr gut. Jedoch habe ich ein Problem nach dem Ausführen des Testskripts:
sudo python AdafruitDHT.py 2302 22
Egal welche GPIO Nummer ich angebe erhalte ich immer einen Fehler:
….
Anscheinend fehlt ein Treiber. Ich habe schon mehrere Möglichkeiten probiert. Jedoch bekomme ich diesen nicht installiert und der Fehler bleibt weiterhin bestehen.
Kann mir jemand helfen? Vielen Dank.
Leider ist die Ansprache des DHT22 nicht einfach. Mit der Raspberry Lösung kann ich mich erst wieder auseinandersetzen, wenn die Geräte zu brauchbaren Preisen verfügbar sind. Bis dahin arbeite ich mit ESP8266 und ESP32. Da gefühlt „alle“ den DHT verwenden wollen, kann es nur eine Frage der Zeit sein, bis die Community wieder eine Lösung bereit stellt.