Ich habe mich nun seit längerer Zeit schon mit dem Thema GPS am Raspberry PI beschäftigt und dabei diverse Möglichkeiten ausprobiert die Position u.Ä. zu bestimmen. Angefangen von GPS-Mäusen bis hin zu HAT’s mit externen Antennen.

In der Regel findet die Kommunikation zwischen GPS-Maus oder HAT über das NMEA 0183 Protokoll statt. Es gibt allerdings auch Außnahmen wie z.B. bei Waveshare Produkten.

Über NMEA-0183

NMEA 0183 ist ein serielles Protokoll, um Daten auszutauschen und besteht aus einzelnen Datensätzen. Jeder Datensatz beinhaltet ein Prefix, das angibt um welche Art von Informationen es sich handelt, gefolgt von den eigentlichen Daten. Die Daten sowie das Prefix sind mit einem Komma voneinander getrennt. Welche verschiedenen Präfixe es gibt, ist für die meisten Anwendungen genau festgelegt. Für GPS ist dies zum Beispiel in folgendem GitHub-Repository festgelegt.

Ein solcher NMEA Datensatz kann zum Beispiel wie folgt aussehen:

$GPGGA,143759.00,5124.18429,N,00702.19915,E,1,07,2.13,56.7,M,46.4,M,,
GPGGAPräfix:
Global Positioning System Fix Data
UTC143759.00
5124.18429Breitengrad
NN/S: Nord oder Süd Indikator
00702.19915Längengrad
EE/W: Ost oder West Indikator.
1FixQuality – Qualität des GPS-Fix
07NumOfSatellites: Anzahl der Satelliten
2.13HDOP: Horizontal Dilution of Precision. Ein Maß für die Genauigkeit der horizontalen Position.
56,7Altitude: Höhe über dem Meeresspiegel
MM: Einheit für die Höhe (in Metern).
46,4GPSAge: Das Alter der letzten DGPS-Korrektur. DGPS steht für Differenzial-GPS.
MDiffRefID: Referenzstations-ID für Differenzialkorrekturen.
checksum: Eine optionale Prüfsumme, die für die Integrität der Nachricht verwendet wird. Dieses Feld ist nicht immer in den NMEA0183-Nachrichten vorhanden.
Aufbau eines NMEA Datensatzes

Hardware Beispiele

Die einfachste Art, die Position mit dem Raspberry Pi zu bestimmen, ist sicherlich die Verwendung einer per USB angeschlossenen GPS-Maus. Ich konnte bereits mit dem Modell ARCELI VK-162 G-Maus sehr gute Erfahrungen machen. Möchte man jedoch die Reichweite und Genauigkeit etwas verbessern, würde ich zu einem HAT raten, der mit einer externen Antenne verbunden werden kann. Ein Beispiel für eine solche Erweiterungsplatine ist der L76X Multi-GNSS HAT. Bei der Auswahl von GPS-Geräten sollte man auf die Datenausgabe achten. NMEA 0183 ist dabei zu empfehlen, da es eine Norm ist und eine strukturierte und einfach zu verstehende Syntax bietet.

Auslesen der GPS-Informationen

Es gibt verschiedene Varianten, um die GPS-Informationen auf dem Raspberry Pi auszulesen. Die sicherlich einfachste Lösung ist meiner Meinung nach die Verwendung des sogenannten SignalK-Servers. Dieser bietet REST- und WebSocket-Endpunkte sowie eine Weboberfläche, um die Daten einzusehen. Mit SignalK ist es kein Problem, die GPS-Maus oder den HAT über eine serielle Verbindung (basierend auf NMEA-0183) einzubinden.