ESP8266 Google Maps API Routenplaner auf LCD anzeigen

Google bietet viele seiner Services für normale Anwender kostenlos an. Eine beliebte Anwendung ist die Google Maps API, welche neben der Routenplanung auch den aktuellen Verkehr kennt. Wer aus mehreren Strecken zum Ziel wählen kann, wird sicher wissen, dass je nach Verkehrslage / Stau eine andere schneller ist.

In diesem Tutorial nutzen wir auf dem ESP8266 Google Maps API, um die voraussichtliche Streckenzeit abzufragen und auf einem LCD (Liquid Crystal Display) anzeigen lassen.

 

Zubehör

Für dieses Tutorial wirst du folgende Teile benötigen:

Falls du dich entscheidest maximal zwei Strecken anzeigen zu lassen, würde auch ein kleineres Display (16×02 Zeichen) ausreichen.

 

Vorbereitung – Strecken auswählen

Um die Daten einer Strecke über die Google Maps API abfragen zu können, brauchen wir die Start-, End- und Zwischenpunkte. Diese können entweder als Text („Hauptstraße X, Stadt Y“) oder im Idealfall als Breiten- und Lägenkoordinate verfübar sein.

Die Korrdinaten bekommen wir ganz einfach über Google Maps, klicken per Rechtsklick auf einen Punkt und anschließend „Was ist hier?“. In meinem Beispiel wähle ich folgende:

  • Start: Alexanderplatz, Berlin (52.520490, 13.413232)
  • Ziel: Olympiastadion, Berlin (52.513226, 13.239923)

Nun könnte es verschiedene Routen geben, die (je nach Verkehrslage) unterschiedlich lange dauern. Daher erstellen wir zwei Beispielrouten, die über verschiedene Zwischenpunkte führen:

  1. Über die Siegessäule (52.515109, 13.350030).
  2. Über die Mollstraße (52.525538, 13.419398), dann am Leopoldplatz (52.546504, 13.359172) vorbei.

Zeigt man die entsprechenden Routen in Google Maps an, sehen diese folgendermaßen aus:

Erste ausgewähle Route per Google Maps

Zweite ausgewähle Route per Google Maps

Natürlich kannst du auch noch weitere Routen erstellen, aber für dieses Beispiel sollen zwei genügen.

Das Ziel ist es nun per aktueller Abfrage die geschätzte Zeit (anhand der aktuellen Verkehrlage) zu bekommen, um dann die beste Route wählen zu können.

 

 

Google Maps API Key für ESP8266 bekommen

Um die Schnittstelle nutzen zu können, benötigen wir einen API Schlüssel. Diesen bekommen wir ganz einfach von Google selbst. Die Nutzung ist bis zu einem Kontigent von 2500 Abfragen am Tag kostenlos. Um den Google Maps API Schlüssel zu erhalten, führen wir folgende Schritte aus:

  1. Öffnen der Google API Console.
  2. Neues Projekt erstellen.
  3. „Google Maps JavaScript API“ auswählen und API Schlüssel kopieren.

Um den Schlüssel zu überprüfen können wir folgende URL im Browser aufrufen (DEIN_API_KEY muss entsprechend durch den gerade kopieren Schlüssel ersetzt werden):

https://maps.googleapis.com/maps/api/directions/json?origin=Berlin&destination=Hamburg&key=DEIN_API_KEY

Du solltest auf der Seite nun JSON Code angezeigt bekommen. Die Ausgabe sollte hiermit (o.ä.) beginnen:

{
 "geocoded_waypoints" : [
 {
 "geocoder_status" : "OK",
 "place_id" : "ChIJAVkDPzdOqEcRcDteW0YgIQQ",
 "types" : [ "locality", "political" ]
 },
 {
...

Falls dein API Key ungültig ist, würde eine solche Ausgabe erscheinen:

{
 "error_message" : "The provided API key is invalid.",
 "routes" : [],
 "status" : "REQUEST_DENIED"
}

In diesem Fall musst du deinen Schlüssel überprüfen oder ggf. einen neuen erstellen.

 

Auf der Dokumentationsseite findest du viele Optionen, die genutzt werden können. In diesem Tutorial nutzen wir vor allem auf die Streckenberechnung, aber auch andere Komponenten können genutzt werden.

Wer bereits einen Anwendungsfall sehen möchte, kann sich diese URL ansehen. Dabei muss wieder dein API Schlüssel eingesetzt werden. Ich habe hierbei die Streckeninformationen der zweiten Strecke anzeigen lassen:

https://maps.googleapis.com/maps/api/directions/json?origin=52.520490,13.413232&destination=52.513226,13.2399238&waypoints=52.525538,13.419398|52.546504,13.359172&key=DEIN_API_KEY

Im Gegensatz zum vorherigen Beispiel habe ich hier drei Parameter genutzt:

  • origin: Längen- und Breitenkoordinaten (mit Komma getrennt aber ohne Leerzeichen)
  • destination: Längen- und Breitenkoordinaten (mit Komma getrennt aber ohne Leerzeichen)
  • waypoints: Koordinaten, da jedoch mehrere Zwischenpunkte angegeben wurden, werden diese mit einem senkrechten Strich („|“) voneinander getrennt.

Unter dem Punkt „routes“ -> „0“ -> „legs“ befinden sich mehrere Kindknoten (0,1,2). Jeder Knoten hat u.a. zwei Knoten („distance“ und „duration“), in denen die für uns interessanten Informationen vorhanden sind. Zusammenaddiert ergeben sich die Dauer und Länge der gesamten Strecke.

 

ESP8266 Vorbereitung

Um die folgenden Skripte auf dem ESP8266 nutzen zu können, erstellen wir uns eine Custom NodeMCU Firmware. Folgende Module müssen zusätzlich ausgewählt werden: Bit, HTTP, IC, SJSON.

 

Wähle außerdem den Punkt „TLS/SSL“ aus, da die Google Maps API nur über SSL erreichbar ist.

Nachdem die Firmware auf den ESP8266 übertragen wurde, können wir mit den weiteren Vorkehrungen fortfahren.

Schließe dein HD44780 LC Display mit aufgelötetem Controller gemäß diesem Tutorial an und teste es ggf. In der verlinkten Anleitung wird die Bibliothek zum Steuern des LC Displays erstellt. Dafür muss die Adresse zunächst ausgelesen werden. Ich gehe davon aus, dass diese Schritte bearbeitet wurden, bevor zum nächsten Schritt dieses Tutorials fortgefahren wird.

ESP8266 I2C display HD44780

 

ESP8266 Google Maps Routenabfrage

Wir verbinden uns mittels ESPlorer mit dem NodeMCU und erstellen eine neue Datei („esp8266_google_maps_traffic.lua“) mit diesem Inhalt:

Hier musst du dementsprechend deinen WLAN Namen, das Passwort, den Google Maps API Key und deine Routen eintragen. Sofern öfters als alle 60 Sekunden abgefragt werden soll, kannst du dies auch einstellen.

Leider hat der NodeMCU das Problem, dass er keine größeren Ausgaben verwerten kann (zu geringer Speicher), weshalb wir nur das nötigste gefiltert erkennen müssen. Dazu kannst du entweder auf deinem eigenen Webserver (15% Rabatt mit Gutscheincode „TUTS-RASPI“ auf Clouds & Webspace) das PHP Skript laufen lassen, oder einfach meinen Service nehmen. Hierfür müssen nur die gleichen Parameter wie beim Google API Service angegeben werden:

https://tutorials-raspberrypi.de/wp-content/uploads/scripts/maps.php?....

 

Als letzten Schritt erstellen wir noch eine init.lua, in der wir das eigentliche Skript aufrufen, sodass dieses beim Booten des ESP8266 automatisch gestartet wird.

6 Kommentare

  1. Ich hatte eigentlich gedacht, dass technisch Bewanderte wissen, dass es entweder „LC Display“ oder einfach nur „LCD“ heißt, aber NICHT „LCD-Display“.

    Das ist doppelt doppelt gemoppelt. 😉

    Antworten
    • Stimmt schon, aber Leute, die sich nicht mit der Materie beschäftigen wissen häufig nicht wofür „LCD“ genau steht und suchen daher eher nach „LCD Displays“. Umgangsprachlich ähnlich mit „HIV Virus“. Man verzeihe mir den nicht ganz formellen Fachjargon 🙂

      Antworten
      • Da muss ich widersprechen: selbst auf den „Grabbeltischen“ in den Billigläden mit 5 oder weniger Buchstaben liegen schon seit Jahren immer häufiger Geräte mit „LC Display“. Und ich bin überzeugt davon, dass die durchschnittliche Intelligenz deren Kunden um Zehnerpotenzen geringer ist als die der Leser von Foren wie diesem, die sich mit der Materie beschäftigen.

        Was die Suchfunktion angeht: wer einfach nur nach „LCD Display“ ohne Anführungszeichen in eine Suchmaschine eingibt, führt automatisch eine Suche nach „LCD ODER DISPLAY“ durch. Und ich glaube, die meisten Sucher tippen eh nur „LCD“ als Suchbegriff ein.

        Daher würde ich als Autor eines Artikels in der Überschrift einfach nur „LCD“ benutzen, und im Artikel in der Einleitung einen kurzen Satz schreiben wie:

        „Ein LCD (liquid crystal display), manchmal auch LC-Display genannt, kann…“

        Damit sind die Suchmaschinen gefüttert, und jede(r) Suchende findet den Artikel.

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!