Meine Mini-Wetterstation
Temperatur und Feuchtigkeit messen und anzeigen
Mit dem Sensor-Modul DHT11 lässt sich glatt eine kleine Mini-Wetterstation aufbauen. Der Sensor, der online problemlos
unter 2 Euro zu bekommen ist, misst zwei Werte, die bei einer Wetterstation nicht fehlen dürfen: Temperatur und Luftfeuchtigkeit. Die Werte,
die über nur eine Leitung geliefert werden, werden von Raspberry Pi in Empfang genommen und „verständlich“ gemacht. Mit einem LCD_Display
machen wir anschließend die Werte sichtbar.
LCD-Display
Das Display 4x20 kann Text in vier Zeilen, je 20 Zeichen pro Zeile, anzeigen. Solche Displays-Module sind für eine
I2C-Kommunikation nicht ausgelegt. Hierzu verwenden wir ein Interface Modul FC-113.
I2C Interface
Das Modul erspart uns viel Verdrahtungsarbeit. Darüber hinaus sparen wir mit dem Modul die GPIOs, die dann für andere Zwecke
zur Verfügung stehen.
Das Display mit dem Modul arbeitet mit 5 V. Damit keine gefährlichen Kollisionen mit den Raspi-Ein- und Ausgängen entstehen, kommt zwischen
dem Display–Duo und Raspberry Pi ein Pegel-Konverter ins Spiel.
Level Konverter
Mit dem Konverter werden beide Seiten, 3,3V von Raspi und 5V vom Display gefahrlos zusammengebracht.
Um das Display anzusteuern, wird die RPLCD-Bibliothek (https://pypi.org/project/RPLCD/) verwendet.
Eine Raspi-Schaltung mit 4x20-Display wurde u.a. hier vorgestellt:
Die Arbeit, die mit dem Auslesen, Umwandlung und Anzeige der Daten zusammenhängt, erledigt in dem Beispiel
Raspberry Pi.
Raspberry Pi 3B
Der Sensor
Der Sensor DHT11
Der Baustein, um den es hier geht, ist ein zweifacher Sensor, der die aktuelle Temperatur und Luftfeuchtigkeit liefert.
Der Sensor trägt die Bezeichnung DHT11. Bei der gleichen Schaltung und Bibliothek könnte man noch die Sensoren DHT22 oder AM2302 einsetzen.
Die Werte, die der Sensor erfasst, werden über das 1-Wire-Protokoll ausgegeben. DHT11 misst die Temperatur in einem Bereich von 0 °C bis
+50 °C. Die Temperaturmessgenauigkeit beträgt dabei ± 2,0 °C. Sein Feuchtigkeit-Messbereich erstreckt sich von 20 % bis 90 %. Die
Genauigkeit hier beträgt ±5%.
Die Arbeitsspannung des Sensors beträgt 3V bis 5V. Somit kann er problemlos an die 3,3V von Raspberry Pi angeschlossen werden.
Der Sensor DHT22 erfasst dagegen die Temperatur im Bereich von -40°C bis +80°C mit einer Genauigkeit von ± 0,5 °C. Er kann die
Luftfeuchtigkeit von 0% bis 100% mit einem Toleranzwert von ± 2% erfassen. Der DHT11 hat somit kleinere Erfassungsbereiche und ist
nicht so genau, für eine einfache „Mini-Wetterstation“ ist sein Können jedoch völlig ausreichend.
Der Sensor hat einen Daten-Pin, der an jeden freien GPIO-Pin angeschlossen werden kann. Es wird empfohlen, die Daten-Leitung mit
einem Pull-up-Widerstand mit dem VCC-Anschluss zu verbinden.
Die Pinbelegung des Sensors von Frontansicht betrachtend (von links nach rechts):
1. VCC
2. Data
3. N.C.
4. GND
Die entsprechende Verschaltung aller Komponenten ist auf der folgenden Abbildung zu sehen:
Schaltplan
Die fertig aufgebaute Testschaltung:
Testschaltung
Das Programm
Neben der Bibliothek RPLCD, die für die Kommunikation mit dem Display zuständig ist, kommt in dem Versuch die
Bibliothek Python_DHT zum Einsatz. Sie ist extra für die Sensoren DHT11, DHT22 und AM2302 entwickelt und funktioniert auch bei
Python 3. Im Internet findet man sie unter der Adresse https://github.com/coding-world/Python_DHT. Mit folgenden Schritten im
LXTerminal kann die Bibliothek installiert werden:
Das Python-Programm beinhaltet keine Geheimnisse. In einer Schleife werden in bestimmten Zeitabständen regelmäßig die
Temperatur und Feuchtigkeitswerte abgefragt und auf dem Display angezeigt. Programmcode:
# ------------------------------------------------------------
# Mini Wetterstation
# mit DHT11 (DHT22/AM2302)
# Raspberry Pi 3B, Python 3
# ------------------------------------------------------------
from RPLCD.i2c import CharLCD
import time
import Python_DHT as dht
lcd=CharLCD('PCF8574',0x27)
Sensor = dht.DHT11 # Hier kann auch DHT22 oder # AM2302 angegeben werden
Pin = 4 # Pin (BCM), an dem der Sensor # angeschlossen wird
while True:
lcd.clear() # Begrüßung
lcd.cursor_pos =(1,7)
lcd.write_string("Deine")
lcd.cursor_pos =(2,1)
lcd.write_string("Mini-Wetterstation")
time.sleep(2)
Feuchtigkeit, Temperatur = dht.read_retry(Sensor, Pin) # Daten abrufen
lcd.clear()
if Feuchtigkeit is not None and Temperatur is not None: # Anzeige, bei OK
lcd.cursor_pos =(0,1)
lcd.write_string("Temperatur:")
lcd.cursor_pos =(1,12)
lcd.write_string("%.1f *C" % Temperatur)
lcd.cursor_pos =(2,1)
lcd.write_string("Feuchtigkeit:")
lcd.cursor_pos =(3,12)
lcd.write_string("%.0f" % Feuchtigkeit)
lcd.write_string(" %")
else:
lcd.cursor_pos =(1,0) # Störung
lcd.write_string("----- Stoerung -----")
lcd.cursor_pos =(2,1)
lcd.write_string("Bitte")
lcd.cursor_pos =(3,3)
lcd.write_string("repariere mich!")
time.sleep(5)
# ------------------------------------------------------------------