Wetterstation_Ende

Wetterstation_Ende Titelbild

Folgende Teile braucht ihr für die Anleitung

Raspberry Pi Wetterstation Kit Produktbild

Raspberry Pi Wetterstation Kit | 19.95€

Daten Verarbeiten

Fassen wir zusammen, was wir bisher erreicht haben. Du hast die Sensoren, DS18B20 und DHT11 an deinen Raspberry Pi angeschlossen. Du weißt, wie du die Daten ausliest. Das 7 Segment Display hast du auch mit deinem Pi verbunden und gelernt, Informationen auf diesem anzuzeigen.

Jetzt fügen wir alles zusammen.
Auf dem Display soll die Temperatur sowohl innen, als auch außen sowie die Luftfeuchtigkeit angezeigt werden. Alle 20 Sekunden soll die Anzeige wechseln Lege eine neue Datei an, in diese Schreiben wir unser Programm.

nano WetterStation.py

Außentemperatur

Die Temperatur lesen wir aus der w1_slave Datei aus, dass haben wir am Anfang des Buches beschrieben. In Python öffnen wir die w1_slave Datei und lesen den Inhalt aus.

w1="/sys/bus/w1/devices/28-00000/w1_slave"
outdoor=open(w1).readlines()

Wenn wir uns die Variable outdoor ausgeben lassen dann sieht das so aus:

['56 01 4b 46 7f ff 0c 10 7b : crc=7b YES\n',
'56 01 4b 46 7f ff 0c 10 7b t=21375\n']

Erfahrene Programmierer sehen hier, dass outdoor ein Array ist, also eine Variable mit mehreren Ebenen, in diesem Fall genau zwei. Ein einzelnes Element in einem Array sprechen wir über den Array-Namen mit eckigen Klammern an. So können wir mit outdoor[0] den ersten Teil ausgeben und mit outdoor[1] den zweiten Teil. Beachte hierbei, dass wir in der Welt des Programmierens meistens bei 0 zu zählen beginnen! Da wir den ersten Teil nicht brauchen, reicht uns der zweite Teil, den wir so ansprechen:

print outdoor[1]

Die Ausgabe sieht dann wie folgt aus:

56 01 4b 46 7f ff 0c 10 7b t=21375

Leider passt diese lange Zahl nicht auf unser Display und es sind viel zu viele Informationen, die wir nicht brauchen. Wir wollen nur die Temperatur haben. Deswegen müssen wir einen Teil abschneiden. Alles bis zum = brauchen wir nicht. Um nur bestimmte Teile einer Variable zu nutzen, gibt es die einfache Möglichkeit, eckige Klammern und einen Doppelpunkt hinter die Variable zu setzen. In diesem kleinen Codebeispiel siehst du wie das geht.

variable = "Zu viel Text auf dem Schirm"
print (variable)
print (variable[8:])
print (variable[8:12])
print (variable[8:-15])

Tippe dieses kleine Programm ab und führe es aus. Bei der ersten Ausgabe geben wir den ganzen kompletten Text aus. In der dritten Zeile steht hinter der Variable noch [8:] . Das sorgt dafür, dass die Variable erst ab der achten Stelle ausgegeben wird. Zeile 4 hat hinter der 8 noch eine 12 stehen. Der Doppelpunkt steht für unseren String, die Zahl vor dem Doppelpunkt schneidet am Anfang acht Zeichen weg. Die Zahl hinter dem Doppelpunkt schneidet alles ab, was größer ist als diese Zahl. Also gibt die Zeile print variable[8:12] nur das aus, was an Position 8 bis 12 steht. Alles davor und dahinter kommt weg. In der letzten Zeile arbeiten wir mit einem Minus [8:-15]. Die 8 schneidet wieder alles weg, was vor Position 8 steht. Die 15 schneidet auch alles weg, aber durch das Minus nicht von vorne, sondern von hinten. Es werden also die letzten 15 stellen in unserem String weggeschnitten. Der Doppelpunkt ist immer unser String und mit den Werten davon und dahinter können wir den String beschneiden. Positive Zahlen schneiden von links, negative zahlen schneiden von rechts. Achte darauf, dass es nicht zu Überschneidungen kommt. print variable[8:4] Schneidet alles vor der achten Position weg und alles nach der vierten. Jeweils vom Anfang des Strings, es bleibt so nichts über was noch angezeigt werden könnte.

Kommen wir zurück zu unserem Temperatur-String.

f5 01 4b 46 7f ff 0c 10 84 t=31312

Um diesen zu verkürzen, könnten wir die Zeichen vom Anfang bis zum = zählen. Wir können auch von hinten bis zum = zählen. Praktisch wäre es, wenn Python uns sagen könnte, wo das = ist. Dafür gibt es eine Funktion, die Funktion find().

print (find.outdoor("="))

gibt uns die Position aus, in unserem Fall 28. Diese 28 ist die Position des = . Da wir das = nicht mit ausgeben wollen, addieren wir noch eine Position hinzu. Also 28+1. In Python Code sieht das so aus.

a = outdoor.find(“=“)
a = a+1
print (outdoor[1][a:])

Ergibt:

21375

Jetzt haben wir unseren String. Vielleicht ist es dir aufgefallen, am Ende ist ein Zeilenumbruch. Diesen schneiden wir auch heraus, indem wir am Ende des Strings noch eine Position abschneiden. print outdoor[a:-1] Was noch fehlt ist das Komma in der Temperaturanzeige. Dafür teilen wir unsere Temperatur durch 1000.

outdoor = (outdoor[a:-1]/1000)

Das war harte Arbeit und viel Theorie, um unseren Temperatur-String so herunter zu brechen. Der zweite Sensor ist wesentlich einfacher.

Deine WetterStation.py sollte jetzt so aussehen:

outdoor=open("/sys/bus/w1/devices/28-00000/w1_slave").readlines()
a = (outdoor[1].find("=")) + 1
outdoor = (int(outdoor[1][a:-1])/1000)
#print outdoor

In Zeile 1 lesen wir die ganze w1_slave Datei ein. Zeile 2 sucht mit der Funktion find() das = , addiert 1 zu der Position von = und speichert den Wert als Variable a. In Zeile 3 überschreiben wir. Wir nehmen die alte lange Variable outdoor, beschneiden sie mit [a:-1] und teilen das, was übrig ist durch 1000. Damit wir den Wert teilen können, müssen wir Python sagen, dass er die Variable als int(), also als Zahl behandeln soll. In der letzten Zeile geben wir die Variable outdoor aus.

Wichtig ist, dass wir in der Variablen Outdoor jetzt den reinen Temperaturwert haben.

DHT11

Im ersten Teil haben wir schon beschrieben wie der DHT11 angeschlossen und ausgelesen wird. Das kleine Script von vorhin nehmen wir jetzt als Grundlage und schreiben oder kopieren es in unsere Datei WetterStation.py .

Du kannst den Programmcode unten anfügen. Wichtig ist nur, dass du die erste Zeile mit dem import Python_DHT ganz oben in dein Programm schreibst. Das Alte Script sah so aus und kann komplett übernommen werden.

import Python_DHT 
sensor = Python_DHT.DHT11
pin = 17
feuchtigkeit, temperatur = Python_DHT
                 .read_retry(sensor, pin)
print("Temperatur = "+str(temperatur)+
                 "C Feuchtigkeit = "+str( feuchtigkeit)+"%")

Wie du siehst, geben wir in der letzten Zeile einen Satz aus, in dem die Variablen temperatur und feuchtigkeit vorkommen. Diese können wir direkt für unser Display nutzen. Am besten kommentierst du die letzte Zeile aus, indem du eine # davor schreibst. Dann ignoriert Python diesen Satz beim ausführen. Wichtig ist, dass wir zwei Variablen haben, Temperatur und Luftfeuchtigkeit .





Daten auf das Display bringen

Im vorherigen Teil haben wir alle Daten gesammelt und formatiert die wir brauchen. Diese Werte bringen wir jetzt auf das Display.

Öffne deine WetterStation.py Datei. Jetzt wollen wir das Display einbinden. Dafür fügen am Anfang den Import der max7219 Bibliothek ein und binden auch gleich die Zeit-Bibliothek time mit ein. Außerdem legen wir fest, dass wir ein Display haben. Der Anfang deiner WetterStation.py sollte so aussehen:

import Python_DHT 
import max7219.led as led
import time
device = led.sevensegment(cascaded=1)

Bevor wir jetzt Informationen auf dem Display anzeigen, müssen wir uns eine Reihenfolge und eine Dauer überlegen. In diesem Beispiel nehmen wir temperatur, feuchtigkeit, outdoor und zeigen Sie jeweils 20 Sekunden lang an.

Unsere Anzeige soll nicht nur einmal durchlaufen, sondern als Endlos-Schleife. Dafür nutzen wir while 1: Alles, was nach der Zeile while 1: kommt und ein Zeichen (Leertaste) oder einen Tab eingerückt ist, wird ausgeführt und das immer wieder und wieder und wieder - also genau das, was wir brauchen. Um die Schleife und dein Programm zu unterbrechen, kannst du die Tastenkombination Strg + c drücken.

Das sammeln der Daten soll in der Schleife liegen, deswegen starten wir die Zeile unter device = led ... als neue Zeile 5. Füge dort ein:

while 1:

Achtet darauf, dass wir alles ab dem while 1: mit Space oder Tab um eins einrücken!

Im vorherigen Teil haben wir bereits gelernt, wie man Text auf dem Display ausgeben kann. Es steht dir frei, verschiedene Varianten zu versuchen. z.B. einen langen Lauftext der alle drei Werte nach einander über das Display laufen lässt. Wir machen es mit write_text.

Nachdem du alles eingerückt hast, gehe ganz ans Ende deines Programms.

Jetzt schreiben wir die erste Ausgabe auf das Display. Achte darauf, auch diese mit Space oder tab einzurücken, damit auch die Ausgabe innerhalb der Schleife liegt.

 device.write_text(0, "1.  "+ str(temperatur))
 time.sleep(20)

Mit device.write_text() sprechen wir das Display 0 an. Dann übergeben wir die 1. und dazu die Variable temperatur als String.
Beachte, dass hinter der 1 noch zwei Leerzeichen kommen. Das machen wir, damit der ganze linke Block vom Display genutzt wird. Auch der rechte Block umfasst vier Zeichen und unser Temperatur-String hat auch vier Zeichen z.B. 23.0 , er passt also perfekt rein.
Das time.sleep(20) lässt das Programm 20 Sekunden schlafen. Danach endet der Durchlauf der Schleife. Danach geht es direkt hinter dem while 1: von oben mit einem neuen Durchlauf los. Die Temperatur wird neu eingelesen, formatiert und auf dem Display ausgegeben.

Unterbrechen kannst du den Kreislauf mit der Tastenkombination Strg + c .

Jetzt fügen wir noch die anderen beiden Sensoren hinzu.

 device.write_text(0, "2.  "+ str(feuchtigkeit))
 time.sleep(20)
 device.write_text(0, "3.  "+ str(outdoor) +".0")
 time.sleep(20)

Beim Feuchtigkeitssensor ist es genau wie beim Temperatursensor. Die Feuchtigkeit wird ausgegeben und das Programm schläft 20 Sekunden. Als letztes binden wir den Outdoor Sensor ein. Bei diesem haben wir nur eine ganze Zahl ohne das .0. Damit er optisch besser zu den anderen beiden passt, haben wir das .0 einfach hinten dran gehängt.

Starte dein Script mit dem Befehl:

python3 WetterStation.py

Jetzt läuft es 60 Sekunden lang und gibt dabei alle drei Werte aus. Danach werden die Sensoren neu eingelesen und die aktualisierten Daten werden auf das Display gebracht. Auf der nächsten Seite haben wir dir das ganze Programm noch einmal abgedruckt.

In dem Kit findest du neben den verwendeten Komponenten auch ein paar LEDs und Knöpfe. Die kannst du verwenden, um deine Wetterstation zu erweitern.
Du könntest eine Halterung für das Display bauen und dadrunter eine Beschriftung für die verschiedenen Werte anbringen. Vor jeden Wert bringst du eine LED an und lässt diese leuchten, wenn der entsprechende Wert angezeigt wird. Außerdem könntest du die Knöpfe neben der Beschriftung anbringen und dein Programm so umschreiben, dass beim drücken des Knopfs immer der passende Wert auf dem Display erscheint.

Wie das funktionieren kann, haben wir in einem anderen Projekt erklärt. Dieses findest du online auf:
https://codingworld.io/project/digitale-wuerfer-mit-8x8-led-matrix

Hier noch einmal das fertige Programm:

import Python_DHT 
import max7219.led as led
import time
device = led.sevensegment(cascaded=1)

while 1:
 w1 = "/sys/bus/w1/devices/28-00000/w1_slave"
 outdoor=open(w1).readlines()
 a = (outdoor[1].find("=")) + 1
 outdoor = (int(outdoor[1][a:-1])/1000)

 sensor = Python_DHT.DHT11
 pin = 17
 feuchtigkeit, temperatur = Python_DHT
                 .read_retry(sensor, pin) 
 device.write_text(0, "1.  "+ str(temperatur))
 time.sleep(20)
 device.write_text(0, "2.  "+ str(feuchtigkeit))
 time.sleep(20)
 device.write_text(0, "3.  "+ str(outdoor) +".0")
 time.sleep(20)









































Herzlichen Glückwunsch

Deine Wetterstation ist fertig. Auf deinem Display werden nun abwechselnd die Werte aus deinen Sensoren wiedergegeben. Du hast gelernt, wie man drei verschiedene Werte auf dem Sieben Segment Display anzeigen kann. Außerdem weißt du nun eine Menge über das Beschaffen und Beschneiden von Daten mit Python. Versuche, deine Wetterstation weiter zu verbessern.
Inspiration, Anleitungen und spannende Projekte dazu findest du auf CodingWorld.io

Wir hoffen, dass dir dieses Jugend Programmiert Kit gefallen hat.
Für Fragen, Tipps, Tricks und Feedback besuche uns auf CodingWorld.io

Noch Fragen oder Feedback?

Bevor du eine Frage stellen kannst musst du dich zuerst Anmelden oder Regestrieren!