Raspberry Pi Sensoren

Raspberry Pi: Temperatur und Luftfeuchtigkeitssensor DHT22

Raspberry Pi DHT22
Geschrieben von Tony

Ein gängiges Einsatzgebiet des Raspberry Pi ist die Erfassung der Temperatur und weiteren Wetterdaten in Form einer Wetterstation, eines Klimaloggers oder zur wetterabhängigen Steuerung von Komponenten. Mit dem Temperatursensor DHT22 bzw. DHT11 lässt sich mit dem Raspberry Pi die Temperatur und Luftfeuchtigkeit messen. Im Folgenden wird erklärt, wie man den Temperatur- und Luftfeuchtigkeitssensor DHT22 mit dem Raspberry Pi ansteuern und verwenden kann.

Temperatur und Luftfeuchtigkeitssensor DHT22

Gegenüber dem bisher vorgestellten 1-Wire Temperatursensor DS1820 kann man mit dem DHT22 einen Wert mehr erfassen – konkret die Temperatur und die Luftfeuchtigkeit der Umgebung. Neben dem DHT22 Sensor, auch bekannt als AM2302, gibt es das Vorgängermodell, den DHT11. Die beiden Sensor-Modelle unterscheiden sich grundlegend lediglich nur in der Messgenauigkeit. Der Temperatursensor DHT22 hat eine Temperatur-Messgenauigkeit von ±0,5°C und etwa 2% maximale Abweichungen bei der Luftfeuchtigkeit. Mit einer Abweichung von ±2°C und 5% bei Temperatur und Luftfeuchtigkeit ist die Genauigkeit beim DHT11 etwas schlechter. Inwieweit sich diese Auswirkung bemerkbar macht kann ich an dieser Stelle nicht sagen, da für dieses Tutorial der DHT22 verwendet wird. In diversen Diskussionen im Netz wird allerdings darauf hingewiesen, dass die Messgenauigkeit des DHT11 sehr ungenau sein soll, sodass ich empfehle den DHT22 zu nutzen.

Der DHT22 ist in Sachen Pins baugleich zum DHT11, sodass diese Anleitung für beide Sensoren genutzt werden kann. Der Temperatursensor verfügt über 4 Pins, wovon aber nur 3 verwendet bzw. benötigt werden. Der DHT22 kann theoretisch mit einer Spannung zwischen 3,3 und 5,5 Volt versorgt werden. Das digitale Signal, welches wir dann vom DHT22 auswerten, hat als High-Pegel die angelegte Betriebsspannung. Da die GPIO-Pins des Raspberry Pi nur 3,3 Volt vertragen versorgen wir den DHT22 mit 3,3. Zum Auslesen der Sensordaten benötigen wir lediglich einen GPIO Pin (Pin 2: DATA). Pin 3 des DHT22 wird in diesem Tutorial nicht belegt. Im Folgenden sind die Pins und deren Bedeutung des DHT22 bzw DHT11 zu betrachten.

DHT22 Pins

DHT22 Pins

  • Pin 1: VDD, Betriebsspannung 3,3 Volt
  • Pin 2: DATA, Datenleitung (an GPIO)
  • Pin 3: Null
  • Pin 4: GND, Masse

Schaltungsaufbau

Anhand der bisherigen Erläuterungen lässt sich der Schaltungsaufbau zur Ansteuerung des DHT22 mit dem Raspberry Pi bereits erahnen. Versorgt wird der Sensor mit 5 Volt des Raspberry Pi. Dazu verbinden wird Pin 1 des Sensors mit dem 3,3 Volt Pin (Pin 1) des Einplatinencomputers. Der GND Pin wird an den GND Pin des Pi (Pin 6) angeschlossen. Die Datenleitung des Sensors (Pin 2) wird an einen GPIO Pin deiner Wahl angesteckt. Hinzu kommt, dass zwischen die Datenleitung des DHT22 und die 5 Volt Versorgung ein 4,7 kOhm Pull-Up-Widerstand geschalten wird. Optional geht auch ein Widerstand mit einem Wert zwischen 4,7 kOhm und 10 kOhm. Das resultierende Schaltbild wird im Folgenden ersichtlich.

DHT22 an Raspberry Pi

DHT22 an Raspberry Pi

Raspberry Pi: DHT22 auslesen mit Python

Zum Ansteuern und Auslesen des Temperatur- und Luftfeuchtigkeitssensor DHT22 kann beispielsweise die Programmiersprache Python verwendet werden. Dafür nutzen wir die DHT Python Bibliothek von Adafruit. Bevor wir diese herunterladen brigen wir das System auf den neusten Stand und installieren, falls noch nicht vorher erledigt, wichtige Pakete.

sudo apt-get update
sudo apt-get install build-essential python-dev python-openssl

Anschließend können wir die Adafruit DHT-Bibliothek herunterladen und installieren.

git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install

Durch das Einbinden und nutzen der Adafruit DHT-Bibliothek können wir im eigenen Quellcode die Ansteuerung recht einfach realisieren. Für einen ersten Test kann die Temperatur und Luftfeuchtigkeit mit Hilfe des mitgelieferten Beispielprogramms der Adafruit Bibliothek genutzt werden. Dazu wechseln wir weiter in das Verzeichnis mit den Beispielskripten und führen die Datei AdafruitDHT.py mit entsprechenden Parametern aus.

cd examples
sudo ./AdafruitDHT.py 22 4

Dem Beispielskript übergeben wir insgesamt zwei Zahlen. Der erste Parameter beschreibt dabei die Art des DHT Sensors. In diesem Tutorial ist das der DHT22 Sensor, sprich die 22. Wer den DHT11 benutzt muss hier die 11 als ersten Parameter übergeben. Der zweite Parameter ist die Nummer des GPIO Pins, mit welchem die Datenleitung des DHT22 an den Raspberry Pi verbunden ist. In diesem Fall wird für diese Anleitung der GPIO Pin 4 (Pin 7) des Pi verwendet. Das Skript gibt anschließend die aktuelle Temperatur und Luftfeuchtigkeit aus.

DHT22 Adafruit Example

DHT22 Adafruit Example

Die Abfrage dauert rund 2 bis 3 Sekunden. Schnellere Abfrage-Intervalle funktionieren an dieser Stelle nicht.

Eigener Skript

Um den Temperatur und Luftfeuchtigkeitssensor DHT22 in einer eigenen Anwendung auszulesen kann die Adafruit Bibliothek gleichermaßen verwendet werden. Dazu erstellen wir mit dem Editor nano eine neue Datei.

nano dht22.py

In die Datei, hier beispielhaft angedeutet, fügen wir folgende Zeilen ein. Die Kommentare im Quellcode erklären die einzelnen Bedeutungen der Codezeilen. Mit den Variablen humidity und temperature kann anschließend weitergarbeitet werden.

Über den Autor

Tony

Ich bin Tony, begeistert von Einplatinencomputer und berichte über meine Erfahrungen und Projekte mit dem Raspberry Pi, Banana Pi und anderen Minicomputern.

Hinterlasse eine Antwort

Kommentare

  • Hallo, vielen Dank für dieses Tutorial! Könnten Sie vielleicht noch eine Ergänzung dazu schreiben? Ich würde nämlich gerne die Temperatur (und Luftfeuchtigkeits) Verläufe mit einer Grafik auf einer Webseite ausgeben (rrdtool, glaube ich). Könnten Sie dies vielleicht noch ergänzen?

    Vielen Dank im Voraus!

    • Hallo Lean,

      danke für dein Feedback und den Anstoß zur Weiterführung des Artikels. Gerne schau ich mir die Sache an und verfasse eine Ergänzung bzw. das Thema in einem weiteren Artikel :=) Mir schwebt da auch eine Lösung mit SQLite vor, anstatt dem rrdtool 🙂

  • Hey Tony,

    klasse Tutorial,

    nur bräuchte ich ein bisschen Hilfe bzw. habe ein paar fragen:

    was genau kann ich mit der dht22.py anfangen?
    Ich habe einen Apache-Webserver auf meinem raspberry und möchte gerne die Temperatur auslesen lassen und in der index.php anzeigen lassen. Hier meine temperature.php:

    so wollte ich erstmal, dass überhaupt etwas angezeigt wird. Aber es wird leider nichts angezeigt, es fehlt der wert vor „raumtemperatur“.

    Hast du eine Idee?

  • Hi Tony,

    tolle Idee wieder und erstmal Danke für den Artikel.
    Hast du Erfahrungen mit unterschiedlichen Sensoren? Ich habe bei amazon welche für 5€ gefunden un der von dir verlinkte kostete 10€. Um das Geld geht es mir nicht aber wäre trotzdem interessant in wie weit sich die unterscheiden. Noch günstigere Angebote kommen für mich nicht in Frage, da es sich dann meistens im Angebote aus China handelt mit langer Lieferzeit.

    • Hallo Daniel,

      bisher habe ich mal welche auf eBay (aus China und Deutschland) und bei Amazon bestellt. Qualitativ habe ich dabei keine Unterschiede festgestellt 🙂 Mit der langen Lieferzeit aus China liegst du leider richtig… Sensoren oder andere Hardware bestelle ich dennoch auch gerne in China, wenn sich die Lieferzeit im Rahmen hält und die Sensoren für mein Projekt / Vorhaben nicht all zu sehr eilen.

    • An sich nicht verkehrt, aber der VZ läuft mit MySQL. Das ist bisschen too much für ein paar Sensorwerte, vor allem weil MySQL auf dem Pi fleißig Ressourcen zieht.

  • Hallo,
    Das Tutorial hat mir auch sehr weiter geholfen aber die Visualiserung auf einer Webseite fehlt irgendwie. Gibt es das schon bei euch neue erkentnisse??

    Vielen dank

    • Im Rahmen jetzt speziell zu diesem Tutorial noch nicht. Aber ich schau mich die Tage mal. Eventuell wäre auch Cayenne etwas für dich. Dieses System bildet eine umfassende Visualisierung 🙂

  • Ist da ein Fehler im Text oder in der Grafik? Der 4,7 kOhm Widerstand ist laut Text zwischen 5 V und Data Pin zu schalten, laut Grafik aber zwischen Pin 1 des Raspberry (3,3 Volt) und Data. Auch im Text steht die GPIO Pins vertragen keine 5 Volt. Also Fehler im Text?

  • Hallo,

    erstmal vorweg: Dein Beitrag ist klasse. Nur irgendwie klappt es bei mir nicht.
    Wenn ich den Test mache für

    cd examples
    sudo python3 AdafruitDHT.py 11 4

    erhalte ich nur folgende Meldung:
    Traceback (most recent call last):
    File „AdafruitDHT.py“, line 41, in
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
    File „usr/local/lib/python3.2/dist-packages/Adafruit_DHT-1.3.1-py3.2-linux-armv71.egg/Adafruit_DHT/common.py“, line 90, in read_retry…
    ……………
    ……………
    RuntimeError: Error accessing GPIO
    Das ist mein erster Versuch mit dem Raspberry pi – dementsprechend kenne ich mich noch nicht besonders aus.
    Ich habe den DHT11 sowie einen Raspberry pi 2 b
    Kann mir hier jemand helfen? Bin am verzweifeln 🙁

    LG
    Timo

  • Kann mir jemand erklären wie man ein .py script schreiben kann, mit dem man die Werte des DHT22 in 2 .csv Dateien abspeichern kann? Diese werte sollen dann alle 10 min überschrieben werden. Eine Datei soll für Temperatur sein, eine andere für Luftfeuchtigkeit.