Was kann der DHT22?

  • kostet zwischen 6€ und 9€
  • 3,3 - 5V Eingangsspannung
  • max. 2.5 mA (während der Datenübertragung)
  • 40-50 µA Standby-Strom
  • Luftfeuchtigkeit: 0 bis 100% relative Luftfeuchtigkeit mit ±2% Genauigkeit
  • Temperaturbereich: -40 bis 80°C ± 0,5°C
  • Sampling Rate: max. 0,5Hz (eine Messung in 2 Sekunden)

Aufbau

Um den DHT22 am Raspberry Pi zu betreiben ist noch ein Pullup-Widerstand von 4,7 bis 10kΩ nötig. Dieser wird zwischen Datenleitung und der 3,3V Spannungsversorgung geschaltet. Man darf den Sensor nur mit 3,3V Spannung versorgen, da die Logik des Raspberry Pi nur 3,3V verträgt.

Steckbrett mit DHT22 und Raspberry Pi
Steckbrett mit DHT22 und Raspberry Pi

Die roten Leitungen liegen auf 3,3V, die schwarzen Leitungen liegen auf Masse und die weiße Leitung ist die Datenleitung. Man kann den DHT22 an jedem GPIO-Pin betreiben, hier wird er an Pin GPIO 4 des Raspberry Pi betrieben.

Belegung DHT22

  • Pin 1: 3,3V
  • Pin 2: Daten
  • Pin 3: frei
  • Pin 4: Masse

Programmierung

Es gibt von Adafruit eine Python-Bibliothek, welche sehr einfach zu nutzen ist, um den Sensor abzufragen.

sudo apt-get update
sudo apt-get install build-essential python-dev
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install

Im examples Verzeichnis findet man ein paar Beispiele. Der folgende Code ist ein funktionierendes Minimalbeispiel, welches man einfach erweitern kann. Man muss bedenken, dass der Code als root bzw. mit sudo ausgeführt werden, da man direkt auf die Hardware des Raspberry Pi zugreift. Hier findet man Nummerierung der Pins.

#!/usr/bin/python
# -*- coding: utf-8 -*-
#

import Adafruit_DHT

# GPIO pin for DTH-22
# see http://pi.gadgetoid.com/pinout
pin = 4

# Try to grab a sensor reading.  Use the read_retry method which will retry up
# to 15 times to get a sensor reading (waiting 2 seconds between each retry).
humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, pin)

if humidity is None or temperature is None:
    print 'Failed to get reading DTH-22. Try again!'
else:
    print "Temperature: %8.2f°C" % temperature
    print "Humidity:    %8.2f%%" % humidity