GPS und NMEA

Pokemon GO und andere Spielchen haben offenbart, wie stark wir Menschen heute mit Ortungsdaten konfrontiert sind. Es ist quasi zur Pflicht geworden, dass zu jeder Lebensminute auch eine GPS-Position gespeichert wird.

Und niemand weiß, wie viele Ehen schon in die Brüche gingen, weil Facebook an die Partnerin meldete, dass der Gatte im übernächsten Nachbargarten sitzt und nicht wie “gemeldet” ein Meeting im Ausland hat.

Und das ist alles nur deshalb möglich, weil wir solche Empfänger mittragen, die von ein paar Satelliten Signale auffangen …


Heutige Smartphones frustrieren mich als Software-Entwickler. Man hat eine Ortungs- und Logging-App in 20 Minuten fertig gestellt.
Keine Herausforderung, keine Motivation … einfach nur 0815.

Die Schnittstellen in Android, dotNet Framework oder WinRT laufen nach dem Schema:

  • openPositionService()
  • registerEventHandler()
  • receivePositionObjects()

ab. … Langweilig!

Interessanter wird es mit Mikrocontrollern oder NMEA 0183-basierten GPS-Dongles.

NMEA

Das NMEA Protokoll ist ein uraltes zeilenbasiertes Textprotokoll, das von einer Vielzahl von GPS-Empfänger-Chips unterstützt wird und seine Daten über eine serielle Schnittstelle zur Verfügung stellt.

Bei DIY Mikrocontroller Projekten ist das häufig ein 5 Volt TTL Signal, aber alte 12 Volt RS232 COM-Port Schnittstellen gibt es sicher auch noch. Für PCs und Laptops haben sich USB-Dongles etabliert, die als virtuelle serielle Schnittstelle auftreten.

Die Chips senden etwa im Sekunden- oder Zweisekundentakt Datenzeilen an den Empfänger, der sie parsen und interpretieren darf.

Alle Zeilen beginnen mit einem Dollarzeichen und Datenfelder sind durch Kommata getrennt. Der bekannteste Datensatz im GPS Bereich ist der GPRMC Block (Recommended minimum specific GPS data). z.B.:
$GPRMC,225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,020.3,E*68
Er beinhaltet:

  • Uhrzeit HHMMSS, also 22:54:46
  • Status flag, A = OK, V = Warning
  • Breitengrad, 2 Stellen vor dem Dezimalpunkt sind Minutenangaben, alles davor sind Grad, also 49 Grad, 16.45 Minuten
  • Nord- oder Südhalbkugel der Breitengradangabe, N = Nord, S = Süd
  • Längengrad, wieder beginnt 2 Stellen vor dem Dezimalpunkt Minutenangabe und davor befinden sich die ganzen Grade, also 123 Grad, 11.12 Minuten
  • Ost- oder Westseite der Längengradangabe, W = Westen, E = Osten (East)
  • Geschwindigkeit über dem Boden in “Konten”, hier 000.5
  • Kurs in Grad, hier 054.7
  • Aktuelles 6-stelliges Datum, 19. November 1994
  • Magnetische Variation, hier 20.3 Grad
  • Richtung der magnetischen Variation, hier E für Osten

Optional können alle Zeilen durch eine Prüfsumme abgesichert werden, die mit einem Stern * eingeleitet wird. Der XOR-basierte Prüfsummenalgorithmus ist sogar auf Wikipedia dokumentiert.

Ein Line-Feed (LF) Zeichen terminiert die Zeile.

Es gibt aber noch zahlreiche andere Zeilenblöcke, die detailliert über die Satellitenpositionen und mögliche Abweichungen berichten.

Fazit

NMEA und GPS sind eine geniale Sache und heute für den Eigenbau relativ günstig zu erhalten.

Das tolle an NMEA ist seine Einfachheit und die Tatsache, dass es mit einfachsten C-Funktionen implementiert werden kann. Und so kann man sich seinen eigen GPS-Empfänger leicht selbst bauen und wesentlich mehr Infos aus den Signalen herauslesen, als das unsere Smartphone APIs heute tun, um sich bei Facebook und Co anzubiedern.

Viele Elektronik-Läden führen zumindest einen USB-Dongle für den Laptop und für den Arduino DIY Bereich lässt sich schnell der eine oder andere Chip finden, der mit dem Lieblingsmikrocontroller über serielle TTL Bits redet.

Anstatt also Pikachus und Taubsis in der Fußgängerzone am Smartphone zu jagen, könnte man auch versuchen, sich eine Bluetooth und WLAN Karte beim Spaziergang mitzuspeichern, wenn man empfangene Netze mit Ortungsdaten kombiniert.

PS: Ich weiß … das gibt’s auch am Smartphone … aber selber bauen macht mehr Spaß.
Hier mein Bastel-Teil als Beispiel, Chip auf der einen Seite, Empfänger-Antenne auf der anderen:

GPS TTL Module