Mit einem DHT22/AM2302 Digital Temperatur- und Luftfeuchtigkeitssensor und Zugriff auf die Wetterdaten von openweathermap.org wird die LED-Matrix Uhr zur Wetterstation.

Die Anzeige erfolgt auf einem 2×8 LED-Dot-Matrix-Display und ist eine Erweiterung des LED-Matrix Uhr Projektes. Die dort geschriebene Datei RollingClock.py wird hier wiederverwendet.

Zum Auslesen des DHT22-Sensors verwende ich die Adafruit_Python_DHT Bibliothek, die wie folgt installiert wird:

pip3 install Adafruit_Python_DHT

Da der Sensor nicht immer auf Anhieb die gewünschten Wert liefert, werden automatisch bis zu 15 Wiederholungen angestoßen bis die Werte gelesen werden konnten. Dies muss also nicht selbst implementiert werden. Da der Abstand zwischen den Wiederholung jedoch 2 Sekunden beträgt kann das auslesen bis zu 30 Sekunden dauern.

Der DHT22 wird wie folgt verdrahtet:

Um die Wetterdaten von openweathermap.org abzurufen, muss unter https://openweathermap.org/api ein kostenloser API-Key beantragt werden. Im folgenden Programm ist “___OPENWEATHERMAP-API-KEY___” dann durch Deinen API Key zu ersetzen. Natürlich kannst Du auch “Frankfurt” durch eine andere Stadt ersetzen oder über die gut dokumentierte API auch andere Informationen abrufen und ausgeben.

Da in dem bei der LED Matrix Uhr verwendeten Font CP437_FONT das °-Zeichen offenbar nicht dort ist, wo ich es erwartet hätte habe ich im Code das °-Zeichen durch “chr(248)” (eigentlich das ø-Zeichen) ersetzt.

Source Code

WeatherTicker.py

#!/usr/bin/env python3
# WeatherTicker by joe703 / https://www.youtube.com/c/Joe703

import time
from datetime import datetime
import json, urllib.request
import RollingClock
import Adafruit_DHT

DHT_SENSOR = Adafruit_DHT.DHT22
DHT_DATA = 4

def ReadWeatherData():
    try:
        final_url = "http://api.openweathermap.org/data/2.5/weather?appid=___OPENWEATHERMAP-API-KEY___&q=Frankfurt&units=metric&lang=de"
        res = urllib.request.urlopen(final_url).read().decode('utf-8')
        weather_data = json.loads(res)
        WetterText = "Wetter in Frankfurt: " + str(round(weather_data['main']['temp_min'],1)) + chr(248)+"C / "+ str(weather_data['main']['humidity']) + "% Luftfeuchtigkeit - " + weather_data['weather'][0]['description']
    except:
        WetterText = "Kein Wetter heute ???"    
    return WetterText

def ReadDht():
    humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_DATA)
    if humidity is not None and temperature is not None:
        DhtText = "Temperatur: " + str(round(temperature,1)) + chr(248)+"C / "+ str(round(humidity)) + "% Luftfeuchtigkeit"
    else:
        DhtText = "Fehler beim lesen des DHT22-Sensors"
    return DhtText

def TestText():
    text = ""
    for i in range(1,255):
        text = text + chr(i)
    print (text)
    return text

if __name__ == "__main__":
    Wochentag=["Sonntag ", "Montag ", "Dienstag ", "Mittwoch ", "Donnerstag ", "Freitag ", "Samstag "]
    ShowText = "Datum"

    # Main for Test
    Uhr = RollingClock.RollingClock() 
    Uhr.start()
    
    print("Uhr gestartet")
    print("Press Ctrl-C to quit.")
    try:
        while True:
            datum = datetime.now().strftime('%d.%m.%Y')
            tag = datetime.now().strftime('%w')
            sekunden = datetime.now().strftime('%S')
            
            if sekunden=="05":         
                if ShowText == "Datum":
                    Uhr.ShowText(Wochentag[int(tag)] + datum)
                    ShowText = "DHT22"
                elif ShowText == "DHT22":
                    Uhr.ShowText(ReadDht())
                    ShowText = "Frankfurt"
                elif ShowText == "Frankfurt":
                    Uhr.ShowText(ReadWeatherData())
                    ShowText = "Datum"
                    
            time.sleep(1)
    except KeyboardInterrupt:
        pass    
    Uhr.close()
    print("Stop der Uhr angefordert")
    Uhr.join()
    print("Uhr gestoppt")

Amazon Links

*Werbung! Wenn Du auf einen der Amazon Links klickst und anschließend ein beliebiges Produkt auf Amazon kaufst, unterstützt Du meine Seite mit einem kleinen Anteil. Dir entstehen dadurch KEINE Mehrkosten und Du zahlst den ganz normalen Preis. Danke!

Temperatur- und Luftfeuchtigkeitssensor
DHT22/AM2302 Digital – https://amzn.to/2PlTqY4

LED Dot Matrix Display
MAX7219 8×32 Dot Matrix LED Anzeigemodul – https://amzn.to/3izeRiG

Raspberry Pi 3
Raspberry Pi 3 Model B – https://amzn.to/3o5kWou
Netzteil 3A mit Schalter – https://amzn.to/3pcK6D2

Alternativ: Raspberry Pi 3 Starter Kit
Raspberry Pi 3 Model B Starter Kit inkl. SD-Karte vorinstalliert mit Raspbian OS – https://amzn.to/2M9Zt0b

Raspberry Pi Zubehör
Raspberry Pi Gehäuse – https://amzn.to/399Te5P
16GB microSD Karte – https://amzn.to/2KAdzaK
Steckbrett (3 Stück) – https://amzn.to/3pjimN7