DHT22 Temperatur- und Feuchtesensor

Das DHT22 ist ein preiswertes Sensormodul, dass uns Daten zur Umgebungstemperatur und zur Luftfeuchtigkeit liefert.

Der DHT22 Sensor

Dieser Sensor kommt meist in auf einer kleinen Platine in einem weißen Kunststoffgehäuse daher und besitzt vier Anschlusspins. Wenn der Sensor flach vor dir liegt sind diese Pins von links nach rechts so belegt:

  1. VCC (+5V oder +3,3V)
  2. DATA
  3. unbelegt
  4. GND

Daran kannst du schon erkennen, dass der Sensor weder mit I²C noch mit SPI kommuniziert. Er benutzt ein sog. 1-wire Protokoll bei dem er in festgelegten Abständen seine Messwerte als Datenblock über die Leitung schickt.

Dataframe

Der DHT22 sendet einen Dataframe von 40 Bit Länge, die sich wie folgt aufteilen.

Nach meinen Recherchen ist der Dataframe so aufgebaut.

ByteBitBedeutung
00-7Feuchtigkeit (High Byte
18-15Feuchtigkeit (Low Byte)
216-23Temperatur (High Byte)
324-31Temperatur (LowByte)
432-39Checksumme

Schaltungsaufbau

Da der dritte Pin nicht belegt ist, kommen wir mit drei Jumperkabeln aus. VCC wird mit 3,3V aus dem Raspberry Pi gespeist. Der Sensor verkraftet auch 5V. Allerdings kommen die nachher über DATA wieder in den Pi zurück. Das verkraften die GPIO Pins des Raspberry Pi 5 aber nicht. Daher achte am Raspi darauf, immer nur 3,3V in den DHT22 zu geben. Den DATA Pin schließen wir an GPIO 4 an, GND an einen der Masse Pins am Board. Ich benutze den direkt neben dem DATA Pin.

Verschaltung des DHT22 über ein Breadboard mit dem Raspberry Pi 5
raspithek.de - Olli Graf
dht22-raspi5Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Verschaltung des DHT22 über ein Breadboard mit dem Raspberry Pi 5

Du wirst im Netz vielleicht Schaltpläne finden, die einen 5-10kΩ Pull-Up Widerstand enthalten. Dieser ist notwendig, wenn die Kabellänge sehr lang ist (im Meterbereich) oder größere Funkstörungen in der Umgebung des Sensors bestehen. Ich habe ihn für dieses Beispiel weggelassen. Es gibt auch Bauformen bei denen das DHT22 Modul auf einer weiteren Platine sitzt, die nur drei Pins herausführt, dort ist wahrscheinlich auch ein Widerstand direkt verbaut.

Der  Raspberry Pi 5 ist mit 3 Jumperkabeln  mit dem  Breadboard verbunden, auf dem das DHT22 Modul sitzt.
raspithek.de - Olli Graf
aufbauCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Der Raspberry Pi 5 ist mit 3 Jumperkabeln mit dem Breadboard verbunden, auf dem das DHT22 Modul sitzt.

Projekt einrichten

Um den Sensor in Python auslesen zu können, richte ich zunächst ein Projektverzeichnis mit uv ein. Unter trixie wird das apt Package liblgpio-dev benötigt, das ich installiere. Dazu kommen noch die projektbezogenen Dependencies adafruit-circuitpython-dht und lgpio. Ersteres kommuniziert mit dem Sensor und stellt uns die empfangenen Messwerte zur Verfügung, sie baut auf lgpio auf.

mkdir dht22
cd dht22
uv init .
sudo apt install -y liblgpio-dev
uv add adafruit-circuitpython-dht lgpio

Programmcode

Das Pythonprogramm ist dank adafruit-circuitpython-dht relativ simpel. Es liest einfach alle zwei Sekunden neue Messwerte vom Sensor und gibt sie aus. Du findest es auch im Repo

import adafruit_dht
import time
import board
def main():
  dht_device = adafruit_dht.DHT22(board.D4)

  while True:
    try:
      temperatur = dht_device.temperature
      feuchte = dht_device.humidity

      print("🌡{:.1f}°C   -   💧 {}%".format(temperatur,feuchte))
    except RuntimeError as err:
        print(err.args[0])

    time.sleep(2.0)


if __name__ == "__main__":
    main()

In der Zeile dht_device = adafruit_dht.DHT22(board.D4) wird auch der Pin für die Datenleitung festgelegt. Zum Test stelle ich den gesamten Aufbau auf meinen Balkon. Es ist Tauwetter, das erklärt die Luftfeuchtigkeit.

Auf dem Balkon misst der DHT22 6,2°C und eine relative Luftfeuchtigkeit von 62-63%.
raspithek.de - Olli Graf
running-outdoorsCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Auf dem Balkon misst der DHT22 6,2°C und eine relative Luftfeuchtigkeit von 62-63%.

Übertaktung

Zum Abschluss möchte ich sehen, wie die sich Kommunikation zum Sensor bei einem höheren Takt des SoC verhält.Dazu konfiguriere ich in der /boot/firmware/config.txt den Takt auf 3100MHz um.

#Overclocking
arm_freq=3100
over_voltage=8

Überraschenderweise werden auch dann noch problemlos Daten vom Sensor empfangen.

Auch mit Übertaktung ist das Auslesen des Sensors möglich.
raspithek.de - Olli Graf
overclockedCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Auch mit Übertaktung ist das Auslesen des Sensors möglich.

Fazit

Der DHT22 ist ein Sensormodul für Temperatur und Luftfeuchtigkeit, dass sehr einfach zu verdrahten und zu verwenden ist.

Schreibe einen Kommentar

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert
Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
raspithek.de - Olli Graf
WordPress Cookie Hinweis von Real Cookie Banner