Blog

ESP32 Projekt: Anzeige für Wettervorhersage

ESP32 Projekt: Anzeige für Wettervorhersage

Januar 7, 2018 Matthias Pajek

Wie wird das Wetter morgen und übermorgen? Die klassischen Wetterstationsprojekte, die man in der Szene sieht können darüber keine Aussage machen, weil sie nur die aktuellen Temperaturwerte anzeigen und loggen. Wir wählen hier einen anderen Ansatz: Mit dem ESP32 (https://az-delivery.de/products/esp32-developmentboard) laden wir die Wettervorhersage für die nächsten fünf Tage von https://openweathermap.org herunter und zeigen sie auf einem kleinen OLED Display (https://az-delivery.de/products/0-96zolldisplay) an.

Das Projekt wird in drei Abschnitten umgesetzt: (1) Vorbereitung der Hardware, (2) Generierung eines API Keys für OpenWeatherMap, um auf Daten zugreifen zu können, und (3) Software zum Herunterladen und Anzeigen der Wettervorhersage.

Hardware

Das Display wird mit 3.3 V und GND an das ESP32 angeschlossen. Für die I²C Verbindung werden außerdem SCL mit G22 und SDA mit G21 verbunden. Die folgende Abbildung zeigt die fertig verkabelte Hardware.

Auf dem Mini-Display können sogar Grafiken angezeigt werden. Mit den Beispielsketchen der Library sind diese nur wenige Klicks entfernt.

Auf dem Mini-Display können sogar Grafiken angezeigt werden. Mit den Beispielsketchen der Library sind diese nur wenige Klicks entfernt.

Openweathermap API

OpenWeatherMap ist eine IT Firma, die Wetterdaten zur Verfügung stellt. In kleinem Rahmen sogar kostenlos. Um Wetterdaten zu erhalten muss man HTTP Anfragen an die OpenWeatherMap API (https://openweathermap.org/forecast5) senden. Dazu ist eine Authentifizierung per API-Key erforderlich. Sie können Ihren API-Key auf der Preis Seite erhalten (https://openweathermap.org/price). Er sieht zum Beispiel so aus:

a254362gegeg715dce096a37b32c17aa

Wenn Sie jetzt im Browser die URL http://api.openweathermap.org/data/2.5/forecast?q=Karlsruhe,de&appid=a254362gegeg715dce096a37b32c17aa aufrufen, erhalten Sie die Wettervorhersage für die nächsten fünf Tage für Karlsruhe. Ersetzen Sie in der URL Karlsruhe durch den Namen ihrer Stadt und den API Key hinter appid= durch Ihren.

Die zurückgegebenen Daten sind im JSON Format. Das Attribut temp gibt die vorhergesagte Temperatur in Kelvin für den Zeitpunkt dt an. Letzteres ist ein Unix Timestamp, der noch einmal in lesbarer Form als dt_txt mitgeschickt wird. Beispiel für den Anfang einer Response:
{
cod: "200",
message: 0.0447,
cnt: 40,
list: [
{
dt: 1503241200,
main: {
temp: 293.69,
temp_min: 293.69,
temp_max: 293.738,
pressure: 1017.16,
sea_level: 1037.44,
grnd_level: 1017.16,
humidity: 53,
temp_kf: -0.05
},
weather: [
{
id: 800,
main: "Clear",
description: "clear sky",
icon: "01d"
}
],
clouds: {
all: 0
}, [...]

Software

Dieser Abschnitt skizziert die Funktionsweise des Programms. Für ein tiefergehendes Verständnis ist ein Blick in den Code (https://github.com/Simsso/Microcontroller-Examples/tree/master/ESP32/WeatherDisplay) unerlässlich. Die Dateien des Projekts haben folgende Aufgaben:

  • WeatherDisplay.ino: Arduino-Sketch, Main Programm: Verbindet alle Komponenten.
  • OpenWeatherMapAPI.h: OpenWeatherMap API Header Datei: Definiert, wie auf die OpenWeatherMap zugegriffen werden kann.
  • OpenWeatherMapAPI.cpp: OpenWeatherMap API Code Datei: Implementiert die Methoden der vorherstehenden Header Datei.
  • OLEDScreen.h: OLED Screen Header Datei: Steuert das OLED Display an und gibt die Wetter Daten grafisch aus.
  • WeatherForecastSample.cpp: Wettervorhersagen-Sample: Klasse, die eine einzelne Wettervorhersage repräsentiert.

API Zugriffe mit dem ESP32

Um die Wetterinformationen anzuzeigen, muss das ESP32 die oben auszugsweise gelisteten Daten von der OpenWeatherMap API erhalten. Der Code für das Herunterladen und Auslesen befindet sich wegen seiner Länge in separaten C++ Dateien, die im Hauptsketch mit #include eingebunden werden. Um das Beispielprogramm ausführen zu können müssen Sie also den gesamten Ordnerinhalt von https://github.com/Simsso/Microcontroller-Examples/tree/master/ESP32/WeatherDisplay herunterladen und dann die .ino Datei mit der Arduino IDE öffnen. Im Programm werden in regelmäßigen Zeitabständen (standardmäßig 2 Stunden) Wetterdaten heruntergeladen. Diese werden mit der ArduinoJson Library (https://github.com/bblanchon/ArduinoJson/) geparsed, das heißt so augelesen, dass sie im Programm weiterverwendet werden können.

Um den Code in Betrieb nehmen zu können müssen Sie neben der Installation der Libraries

  • Ihre WLAN SSID und das Passwort eintragen (Datei WeatherDisplay.ino),
  • die Stadt, für die eine Vorhersage gemacht werden soll aktualisieren (Datei WeatherDisplay.ino, Variable query) und
  • einen gültigen OpenWeatherMap API Key eintragen (Datei WeatherDisplay.ino, Variable apiKey).

Anzeige der Wettervorhersage

Das Display, das die heruntergeladenen Wetterdaten anzeigt, kann zum Beispiel mit der Ai_Ardulib_SSD1306 Library angesteuert werden (https://github.com/acrobotic/Ai_Ardulib_SSD1306). Diese enthielt zum Zeitpunkt der Veröffentlichung dieses Posts einen Bug, der in dieser Pull-Request behoben wurde: https://github.com/barbeque/Ai_Ardulib_SSD1306/tree/patch-1. Laden Sie den Code daher sicherheitshalber über letzteren Link herunter.

In der aktuellen Ausführung zeigt das WeatherDisplay-Programm die Wettervorhersage plain, das heißt ohne weitere Formatierung, an. Sie sind herzlich dazu eingeladen, die Anzeige zum Beispiel mit Wolken-/Sonnengrafiken aufzuhübschen (englisches Tutorial dazu: http://www.instructables.com/id/Display-Images-on-OLED-Screen-With-Arduino-ATtiny8/.

Bei dieser Wettervorhersage — 13°C — ist das mit dem ESP32 Herumspielen einfach die beste Beschäftigung.

Inhalt abgerufen von: https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/esp32-projekt-anzeige-fur-wettervorhersage.

Menü