Arduino Lektion 69: OpenWeatherMap Daten auf OLED Display anzeigen

In diesem Tutorial möchte ich beschreiben, wie man Daten von der offenen Schnittstelle OpenWeatherMap.org auf einem OLED Display anzeigt.

Daten für den Standort "Braunschweig" auf dem NodeMCU mit OLED Display von Openweathermap.org
Daten für den Standort „Braunschweig“ auf dem NodeMCU mit OLED Display von Openweathermap.org

Ich nutze dazu den NodeMCU mit 0,96 Zoll OLED Display, dieser Microcontroller wurde mir vom OnlineShop Makershop.de kostenfrei zur Verfügung gestellt.
Den NodeMCU mit 0,96Zoll OLED Display kann man für knap 13,75€ unter https://www.makershop.de/plattformen/arduino/nodemcu-oled/ beziehen. 

Dieses Tutorial sollte jedoch auch mit anderen, baugleichen Microcontrollern (wie zbsp. der Wemos D1 mini mit OLED Display) funktionieren.

Anmelden bei OpenWeatherMap.org

Damit man den Service von OpenWeatherMap.org nutzen kann, muss man sich anmelden. Die Anmeldung ist kostenfrei und schnell erledigt.

OpenWeatherMap - erstellen eines Accounts
OpenWeatherMap – erstellen eines Accounts

Nachdem die Daten eingegeben wurden, ist man angemeldet. (Es gibt also kein DoubleOptIn, was sehr fraglich ist.)

Unter dem Menüpunkt „API keys“ findet man nun den Standard Api key. Welchen wir nun nutzen werden um die Daten von der Schnittstelle abzugreifen.

Preise

Die Nutzung der Schnittstelle ist im Basispaket kostenlos, jedoch ist die Nutzung dann etwas eingeschränkt.

Man kann dann zbsp. „nur“ 60 aufrufe pro Minute starten und auch die Verfügbarkeit des Services ist mit 95% gegeben. Weitere Einschränkungen können unter https://openweathermap.org/price eingesehen werden. In meinem Fall reicht das Basispaket völlig aus.

Zugriff auf die API

Für die API gibt es bereits zahlreiche Implementierungen für diverse Sprachen.
Leider ist für den Arduino nichts dabei, aber so schwierig ist das ja nicht. Man muss ja nur einen Request an die API senden und erhält ein JSON zurück.

Ich nutze neben der Arduino IDE noch zusätzlich das Tool Postman, dieses Tool gibt es als Erweiterung für Google Chrome und als Standalone Lösung.

Beispiel Aufruf mit Postman

Starten wir zuerst einen Aufruf der API mit dem API key sowie der Stadt Braunschweig.

Als Response erhalten wir im Standardfall einen JSON.

Diesem JSON Objekt können wir nun zbsp. die Daten für den Sonnenaufgang die aktuelle Windgeschwindigkeit sowie Luftdruck, Luftfeuchtigkeit usw. entnehmen.

Arduino Sketch

erzeugen einer Internetverbindung

Wollen wir also loslegen, als erstes schreiben wir unser Sketch das wir in das lokale Netzwerk gelangen und das wir somit Internetzugang haben.

Wenn man das Paket „ESP8266 by ESP8266 Community“ installiert so sind einige Beispielsketche enthalten. 

Paket "esp8266 by ESP8266 Community"
Paket „esp8266 by ESP8266 Community“

Paket „esp8266 by ESP8266 Community“

Ich verwende aus diesen Beispielen das Beispiel „BasicHttpClient“ als basis für den nachfolgenden Sketch.

In dem Beispiel habe ich die SSID, das Passwort entfern und den API key entfremdet. Wenn du das Beispiel auf deinem Microcontroller nachstellen möchtest so musst du diese Daten vorher anpassen.

Die Ausgabe auf dem seriellen Monitor der Arduino IDE sieht nun wiefolgt aus:

Ausgabe des HTTP Response auf dem seriellen Monitor der Arduino IDE
Ausgabe des HTTP Response auf dem seriellen Monitor der Arduino IDE

Nachdem wir also das JSON erhalten haben, müssen wir uns „nurnoch“ die für uns nützlichen Daten herausziehen. 

parsen des HTTP Response (JSON Objekt)

Für den Zugriff auf die Schlüssel / Wertepaare im JSON Objekt verwende ich nun die Bibliothek von https://arduinojson.org. Des Weiteren erzeuge ich den Quellcode über DEV-C++ IDE welche kostenfrei unter https://sourceforge.net/projects/orwelldevcpp/ heruntergeladen werden kann. 

installieren der Bibliothek ArduinoJSON

Die Bibliothek „ArduinoJson“ kann man ganz bequem über den Bibliotheksverwalter der Arduino IDE installiert werden. Dazu navigiert man über das Hauptmenü „Sketch“ > „Bibliothek einbinden“ > „Bibliotheken verwalten…“ es öffnet sich nun ein neues Fenster. Nachdem die Daten fertig geladen wurden (je nach Internet & Rechnergeschwindigkeit kann dieses variieren) wird in der Suchleiste (1) nach „ArduinoJSON“ gesucht. Der Eintrag lautet „ArduinoJson by Benoit Blanchon“. Gemäß der Entwicklerseite soll man die Version 5 auswählen, daher wähle ich hier die Version 5.13.2 (stand 30.09.2018) (2) und betätige danach die Schaltfläche „Installieren“ (3).

Installieren der Bibliothek "ArduinoJSON" in der Arduino IDE
Installieren der Bibliothek „ArduinoJSON“ in der Arduino IDE

Wenn die Bibliothek erfolgreich installiert wurde so steht hinter dem Titel nun die Versionsnummer gefolgt vom Text „INSTALLED“.

ArduinoJson erfolgreich installiert
ArduinoJson erfolgreich installiert

Klasse OpenWeatherMap

Die Klasse „OpenWeatherMap“ enthält die geparsten Daten aus dem JSON der Schnittstelle. Um den Parser zu verwenden muss dieser dem Projekt hinzugefügt werden. Dazu werden die Dateien „openWeatherMapParser.h“ sowie „OpenWeatherMap.h“ parallel zum Arduino Sketch abgelegt. 

Ablage der Resourcen

Das gesamte Projekt kann vom GitHub Repository https://github.com/StefanDraeger/Arduino-OpenWeatherMap heruntergeladen werden. Dort findest du alle Resourcen zu diesem Projekt.

Drehspulinstrument für Icons

Für die Darstellung der Icons nutze ich ein Drehspulinstrument. Sicherlich könnte man die Icons auch als XBM convertieren und dann auf dem Display anzeigen jedoch finde ich diese Lösung etwas cooler.

Drehspulinstrument Vorder / Rückseite
Drehspulinstrument Vorder / Rückseite

Was wird benötigt?

Ich verwende dazu ein Drehspulinstrument mit einer Anzeige für maximal 100µA.

Das Drehspulinstrument habe ich bei Wish.com für je 2,70€ erstanden.

Angebot von Drehspulinstrumente auf wish.com
Angebot von Drehspulinstrumente auf wish.com

Auf der Plattform Wish.com gibt es sicherlich einiges an Schrott und der durchgestrichene Preis ist unter Garantie ein Mondpreis aber mit solchen Artikeln habe ich bisher immer glück gehabt. Der Preis von 3€ ist echt unschlagbar auf ebay.de oder anderen Portalen zahlt mal deutlich mehr (Okay die Lieferzeit wird für den ein oder anderen ein K.O. Kriterium sein.).

Des Weiteren wird ein Widerstand von 46kOhm und 30kOhm benötigt und zusätzlich einige Kabel.

Der 46kOhm Widerstand wird für den Test der Schaltung am Arduino UNO und der 30kOhm wird für den Live Betrieb mit dem NoceMCU benötigt.

Wollen wir zuerst ein kleines Projekt starten um zu testen wie sich das Drehspulinstrument am Arduino UNO verhält.

Arduino Sketch

Im nachfolgenden Sketch habe ich eine einfache Schleife welche die Zahlen von 0 bis 255 hochzählt und am digitalen PWM Pin 9 ausgibt.
Dieses bewirkt das die Nadel des Drehspulinstrumentes sich bewegt. 

Video

Drehspulinstrument am Arduino UNO

Als erstes haben wir mit diesem Sketch erreicht das die Nadel von links nach rechts „wandert“. Nun benötigen wir aber noch die exakten Daten damit wir die Icons korrekt positionieren müssen. Dazu prüfen wir nun wieviel Pixel ein uA auf der Skala des Drehspulinstruments sind. Je nach Größe und Model kann die nachfolgende Anleitung etwas abweichen.

Erstellen einer eigenen Skala mit den Icons

Erstellen wir uns also nun eine eigene Skala mit den Icons von OpenWeatherMap.org .
Auf der Seite https://openweathermap.org/weather-conditions findet man die verschiedenen Icons welche im JSON (und natürlich auch im XML) Response zu finden sind. Es sind insgesamt 12 verschiedene Icons verfügbar. Jedes Icon hat eine Größe von 50×50 Pixel. Das ergibt eine kurze Rechnung von 50 x 12 = 600 Pixel breite.
Die Skala ist jedoch „nur“ 5cm breit somit werden wir die Icons zusätzlich etwas schrumpfen müssen.

 

Skala mit Wettericons für das Drehspulinstrument
Skala mit Wettericons für das Drehspulinstrument

Im nun folgenden Schritt werden wir die Positionen für die Icons auf dem Drehspulinstrument ermittelt.
Hier gibt es zwei Möglichkeiten diese Positionen zu ermitteln, einmal die etwas aufwändige das man immer wieder (neuen) einen Wert setzt und dann kompiliert und den Sketch hochlädt. Oder man erstellt sich eine kleine Schaltung mit einem Drehpotentiometer über den Analogen Pin A0 und kann dann per Hand die Nadel bewegen und über dem seriellen Monitor die Arduino IDE den Wert ablesen. Und genau diese Schaltung erzeugen wir nun.

Schaltung zum ermitteln der Positionen der Icons auf dem Drehspulinstrument

Wir benötigen für die Schaltung:

  • 1x Arduino UNO (oder vergleichbarer Microcontroller)
  • 7x Steckbrettkabel, männlich – männlich
  • 1x Drehpotentiometer mit 50kOhm
  • 1x Drehspulinstrument
  • 1x Steckbrett mit min. 170 Pin
Schaltung - Drehpotentiometer und Drehspulinstrument
Schaltung – Drehpotentiometer und Drehspulinstrument
Schaltung - Drehpotentiometer und Drehspulinstrument am Arduino UNO
Schaltung – Drehpotentiometer und Drehspulinstrument am Arduino UNO

In der Schaltung habe ich einen Arduino UNO verwendet jedoch beim späteren Test mit dem NodeMCU habe ich festgestellt das der Widerstand von 46kOhm deutlich zuviel ist, somit musste ich auf ein 22kOhm ausweichen.
(Dieser währe jedoch zuwenig für den Arduino UNO!)

Video
Steuern eines Drehspulinstrumentes mit hilfe eines Drehpotentiometers am Arduino UNO
Arduino Sketch

Im nachfolgenden Sketch lese ich den analogen Wert des Drehpotentiometers am Pin A0 ein und mappe diesen mit der Funktion map auf den PWM Wert für das Drehspulinstrument.

Die Werte für die einzelnen Icons sind wiefolgt:

Im nachfolgenden werden wir nun das Beispiel 1 aus dem GitHub Repository von mir laden und für unsere Bedürfnisse anpassen. 

Am Anfang des Tutorials haben wir bereits eine Verbindung zum lokalen Netzwerk hergestellt und ein JSON als String empfangen und auf dem seriellen Monitor der Arduino IDE ausgegeben.

Wollen wir also nun das JSON Parsen und die Werte Seitenweise auf dem OLED Display des NodeMCU ausgeben.

Video

Anzeigen der Daten von OpenWeatherMap auf dem NodeMCU mit OLED Display

Fazit und Ausblick

Wir haben nun die aktuellen Wetterdaten auf dem OLED Display angezeigt, als nächstes können wir nun die letzten 5 Wetterdaten von der Schnittstelle empfangen und anzeigen usw. 

Das Parsen der Daten mit der Bibliothek ArduinoJSON kann einfacher nicht sein daher konnte dieses Projekt mit relativ wenig Aufwand bewerkstelligt werden einzig war etwas arbeit nötig um das JSON als Objekt darzustellen.

Als nächstes werde ich nun ein Gehäuse bauen und ein schönes Plätzchen auf meinem Schreibtisch suchen…..

 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.