Mit dem NEO-6M-GPS-Empfänger-Modul die geografische Position ermitteln

Zusammen mit dem SIM800L GSM/GPRS Modul (hier mein Artikel dazu) habe ich damals auch ein GPS-Empfangsmodul von uBlox, das Neo-6M gekauft, als ich mehr zufälligerweise bei einem chinesischen Versender darüber stolperte. Es war nicht teuer, das Thema sehr interessant, also habe ich es damals mitbestellt.

Momentan (Mai 2023) werden auf AliExpress viele Module angeboten, die sich zwar "NEO-6M" nennen, aber auf dessen Bildern das u-blox-Logo entfernt wurde. Ich nehme darum an, dass es sich hier um Remakes handelt, die dann eventuell nicht 100% kompatibel sind. Außerdem dürfte damit die Nutzung der u-center-Software (siehe weiter unten hier im Artikel) urheberrechtlich bedenklich sein. Ich empfehle darauf zu achten, ein Modul mit u-blox-Logo zu kaufen, wenn zu kriegen. Die sind unter Umständen ein paar Euro teurer.

Als Geocacher bin ich GPS-mäßig natürlich etwas vorbelastet und kenne mich mit Geo-Koordinaten und GPS-Empfängern recht gut aus. Für meine Geocaching-Touren benutze ich aber ein Oregon 600 von Garmin. Das ist ein Outdoor-GPS-Empfänger für Wanderer, Bergsteiger usw., gleich mit integriertem Display und Karten. Aber das kostet auch so einiges. Dafür ist es wetterfest, kompakt und stromsparend.

So ein eher günstiges, programmierbares (bzw. per Mikrocontroller abfragbares) Modul kann bestimmt auch beim Geocaching sehr nützlich sein.

Kurz-Einführung GPS-Technik

Eine ganz kurze Einführung in die Technik der Positionsbestimmung mittels GPS für diejenigen, die nicht viel damit anfangen können:

GPS steht für Global Positioning System und ist eines der Systeme, mit denen man Signale von den um die Erdkugel schwirrenden speziellen Satelliten auffangen unter auswerten kann. Dabei senden die Satelliten außer ihrer eigenen Position auch einen hochgenauen Zeitstempel mit. Dafür haben sie extra Atomuhren an Bord.

Hat man jetzt 3 oder mehr Satellitendaten empfangen kann man aufgrund der Laufzeit und den empfangenden Satellitenpositionsdaten die eigene Position auf der Erde ermitteln (sogenannter 2D-Fix, Stichwort Triangulation). Ab 4 empfangenen Satelliten sogar samt der Höhe über Normalnull (sogenannter 3D-Fix).

Das GPS stammt von den USA und war anfangs nur für militärische Zwecke vorgesehen, wurde im Mai 2000 aber für die zivile Nutzung mit einer brauchbaren Genauigkeit freigegeben. Das war dann auch die Geburtsstunde des Geocachings.

Außer GPS gibt es noch das russische GLONASS, das chinesische Beidou und das europäische Galileo. Auch Indien will sein eigenes Süppchen kochen und baut derzeit NAVIC auf, das allerdings wird nicht weltumspannend wie die anderen Systeme sein, sondern nur regional.

Mögliche Anwendungsfälle

Reverse Cachebox

Als Geocacher kam mir zuerst eine eigene Reverse Cachebox (auch "Reverse Geocache Puzzle Box" genannt) in den Sinn. Das ist eine Blackbox, die einem lediglich auf einem Display anzeigt, wie weit es zu dem in der Box gespeicherten Zielkoordinaten ist. Bei jedem Knopfdruck wird die Entfernung aktualisiert.

Man läuft als Sucher also erst einmal in eine zufällige Richtung, um zu sehen, ob die Entfernung zum Ziel ab- oder zunimmt. Nimmt sie zu, läuft man in die andere Richtung. So bekommt man durch Versuchen die Richtung heraus und irgendwann kommt man dann auch beim Ziel heraus. Wegen Hindernissen vielleicht auch nur auf einem Zick-Zack-Kurs. Dieses Rate- und Wanderspiel kann sehr viel Spaß machen.

An den Zielkoordinaten kann man sich dann in ein Logbuch eintragen oder empfängt ein WLAN, in diesem Intranet man dann einen Gästebucheintrag via Webbrowser hinterlassen kann. Danach legt man die Box, auf dessen Rückseite sich natürlich die Spielregeln befinden wieder irgendwo halbwegs wetterfest aus, für den nächsten Spieler.

Für den eigentlichen Besitzer wäre es natürlich gut, wenn die Box hin und wieder seine aktuellen Koordinaten funken würde, damit bei niedrigerem Batteriestand diese gewechselt werden können. Das kann man über LoraWAN oder SMS über Mobilfunk.

Leider haben sich die Zeiten allerdings geändert und es mit der Ehrlichkeit der Menschen nicht mehr so weit her. Das habe ich schon mitbekommen, weil meine Travel Bugs (siehe Geocaching Lexikon der Fachbegriffe) immer schneller verschwanden, sprich gestohlen wurden. Früher konnte man sich vielleicht noch auf die Ehrlichkeit und dem Respekt gegenüber fremden Eigentum verlassen, aber heute möchte ich das Risiko nicht eingeben, da in so einer Box ja auch viel Arbeit und Geld steckt.

Aber für ein Team-Building-Event auf einem Firmen-Event, wo die Box zum Buffet in einer halben Stunde Suchen führt ist das sicher der Gag. Und die Box kann dabei ja auch nicht so leicht weg kommen.

Positionsüberwachung

Dem GPS-Modul kann man noch ein Modul zur Funkübertragung zur Seite stellen, je nachdem, wie weit sich die Schaltung entfernt wählt man ein Funk via 433 Mhz, WLAN, LoraWAN oder Mobilfunk-SMS.

Damit kann man dann die Geo-Koordinaten der Schaltung in gewüsnchten Zeitintervallen nach Hause funken und aufzeichnen, um sich die Route später auf Google Earth oder Maps oder OSM anzuschauen. Dabei bitte die Gesetze beachten und nicht irgendwelche Leute stalken. Aber vielleicht interessant euch ja, wo euer Kater sich nachts herumtreibt. Oder euer Hund büchst manchmal aus und ihr wollt dann wissen, wo ihr ihn wiederfindet?

Auch als Diebstahlschutz für euren fahrbaren Untersatz taugt das sicher. Wenn die Schaltung schön klein und versteckt ist, dann dürfte sie nach einem Klau irgendwo in ein Diebeslager führen, wo sich dann auch noch mehr beispielsweise geklaute Fahrräder herumtummeln. Vielleicht kann euch dann die Polizei helfen, wieder an euer Fahrrad zu kommen (ich würde da ja nichts eigenmächtiges in Sachen Wiederbeschaffung versuchen).

Routenaufzeichnung

Aber vielleicht braucht ihr ja auch gar keine Echtzeitüberwachung, sondern wollt nur die Route von euren Fahrradtouren aufzeichnen?

Dann ist es sicher nicht schwer, dem GPS-Modul noch ein Micro SD-Kartenleser zur Seite zu stellen und alle paar Sekunden die empfangenen Koordinaten wegzuschreiben.

Den Track kann man sich dann wieder auf einer Karte anschauen, die Durchschnittsgeschwindigkeit ausrechnen, die absolvierten Höhenmeter, die Ruhepausen und so weiter und so fort.

Geschwindkeitsmessung

Natürlich lässt sich auch die Zeitspanne zwischen zwei Aufzeichnungspunkten von Zeit und Koordinate ausrechnen und damit die Geschwindigkeit, mit der sich die Schaltung fortbewegt. Oder anders ausgedrückt: damit läßt sich ein digitales Tachometer realisieren, dass vielleicht noch die Himmelsrichtung anzeigt, in die man fährt und warnt, wenn man schneller als 50 km/h fährt. Oder die Geschwindigkeitensbereiche mittels Farben anzeigt, so dass man sofort mitbekommt, wenn man zu schnell fährt, ohne erst groß nachzuschauen, wo denn nun genau die Tachonadel steht.

Die Bussgelder bei Geschwindigkeitsüberschreitungen werden auch immer happiger und ich persönlich fahre nie absichtlich, sondern höchstens aus Versehen geringfügig zu schnell. Aber angesichts leerer Gemeindekassen sieht man hier wohl eine willkommene Einnahmequelle in vielen Gemeinden. Eine Falle, in die ich mit sowas weniger oft tappen würde.

Außerdem fand ich die digitalen Tachos schon immer cooler als die analogen mit Nadel. Und solange das originale Tachometer noch einwandfrei funktioniert, dürfte ein zweites, zusätzliches nicht verboten sein, aber nagelt mich da nicht fest. Gesetze und Verordnungen sind manchmal komisch.

Technische Daten und Features des Neo-6M


Das alles und mehr geht mit dem Neo-6M GPS-Modul.

Das Neo-6M ist nicht das neueste Modul von uBlox, die sind mittlerweile bei Generation 10. Allerdings ist das Neo-6M günstig samt Trägerplatine auf allen möglichen Plattformen zu kriegen. Und es ist ausreichend für unsere Zwecke.

Das uBlox Neo-6M-Modul, also der Teil auf der Platine unter dem kleinen Blechgehäuse läuft mit einer Versorgungsspannung von 2.7 bis 3.6 Volt. Und das Modul bietet, erkennbar an TX und RX eine serielle Schnittstelle. Damit können wir es mit einem FTDI-Adapter an den PC oder auch an einen Raspberry Pi anschließen. Siehe dazu auch mein Artikel Den Raspi mit 3.5 Zoll RPi Display TFT Touchscreen als Serial Monitor verwenden.

Damit hätte wir die allerwichtigsten Eigenschaften auch schon umrissen. Weitere Features sind: Was wir hardwaretechnisch außer der GPS-Modul-Platine (GPS6MV2, HW-248) brauchen, ist eine externe Antenne, ein FTDI-Adapter, ein paar Jumperkabel zum Verbinden von FTDI-Adapter und GPS-Modul und ein USB-Kabel zum Verbinden des FTDI-Adapter mit unserem PC (oder Raspberry Pi).

Ich habe mich für eine Keramikantenne als externe Antenne speziell für den GPS-Empfang entschieden, natürlich mit dem passenden Anschluss. Den muss ich dann nur noch in den Antennenanschluss auf dem GPS-Modul drücken. Oft wird eine Antenne auch mitgeliefert. Das wird dann günstiger.

Verkabelung

Der FTDI-Adapter und das GPS-Modul werden wie folgt miteinander verkabelt:



FTDI-Adapter GPS-Modul Kabelfarbe Bedeutung VCC VCC rot 3.3V GND GND schwarz Ground RX TX grün ser. Kommunikation TX RX gelb ser. Kommunikation
Der FTDI-Adapter wird auf 3.3V gejumpert, weil das GPS-Modul auf diesen Spannungsbereich (2.7V...3.6V) ausgelegt ist. Das ist auch völlig ausreichend und funktioniert wunderbar.

Danach können wir den FTDI-Adapter mit dem USB-Port des PCs verbinden und dieser sollte uns dann einen neuen COM-Port melden.

Erster Test mit dem PC

Softwareseitig brauchen wir noch ein Terminalprogramm. Das kann so etwas rudimentäres wie PuTTY sein, oder ein Terminalprogramm wie etwa Tera Term oder HTerm, je nachdem, was einem eher gefällt.

Im Terminalprogramm stellen wir den COM-Port ein, den uns der FTDI-Adapter bescherrt und die Default-Übertragungsrate des GPS-Moduls von 9600 bps. Damit können wir später noch hochgehen, wenn wir sicher sind, dass alles klappt. Die Kommunikationsparameter sind die üblichen: 8-N-1.

Wenn alles richtig verkabelt ist, dann sollte jetzt sekündlich eine Nachricht vom GPS-Modul angezeigt werden, die in etwa so aussieht:
$GPRMC,110926.00,V,,,,,,,230523,,,N*75 $GPVTG,,,,,,,,,N*30 $GPGGA,110926.00,,,,,0,00,99.99,,,,,,*6B $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30 $GPGSV,1,1,02,02,,,27,27,,,34*7E $GPGLL,,,,,110926.00,V,N*47
Das ist eine NMEA-0183-Nachricht. NMEA steht für National Marine Electronics Association (NMEA) und 0183 für das Protokoll, dass diese Organisation im März 1983 als Standard festgelegt hat. Es wurde als ein Standard für die Kommunikation zwischen Navigationsgeräten auf Schiffen definiert(1) und später zur Kommunikation zwischen GPS-Empfänger und PC und anderen, auch mobilen Endgeräten genutzt. Außer der seriellen Schnittstelle definiert es vor allem Namen und Inhalte von Datensätzen.

Der NEO-6M beherrscht NMEA 0183 in Version 2.3 (kompatibel zu V3.0).

Das NMEA-0183 Format

Solange allerdings die kleine blaue LED auf dem GPS Modul nicht blinkt, haben wir noch keinen GPS-Fix, das heißt, wir empfangen noch nicht genügend Satelliten, nämlich mindestens drei, um einen 2D-Fix (also ungefähre Position ohne Höhe) zu haben oder anders ausgedrückt: die eigenen Geo-Koordinaten können vom Neo-6M noch nicht berechnet werden mit diesen Daten.

Falls wir einen Fix haben, dann blinkt die kleine blaue LED. Wir müssen also nicht ständig auf die Ausgabe im Terminalfenster schauen, sondern erst, wenn die LED blinkt. Für besseren Empfang brauchen wir möglichst freie Sicht auf den Himmel. Bäume, Gebäude, Wolken, das alles ist störend. Den besten Empfang hat man mitten auf der Wiese an einem wolkenlosen Sommertag.

Bevor wir einen Fix haben können wir uns die Auswertung der Daten sparen. Obwohl, wenigstens die Zeit kommt schon in der $GPRMC-Zeile mit:
$GPRMC,110926.00,V,,,,,,,230523,,,N*75 hhmmss MMDDYY
In diesem Beispiel ist also gerade der 23. Mai 2023 und es ist 11:09 und 26 Sekunden UTC. UTC ist die Universalzeit bei Längengrad Null (Greenwich, London). Da Deutschland UTC plus eine Stunde ist und wir gerade Sommerzeit (wann wird der Unsinn endlich abgeschafft?) haben und nochmal eine Stunde draufkommt, ist die lokale (gesetzliche) Zeit gerade 13:09:26.

Selbst mit schlechtem Satellitenempfang taugt das Modul so zumindest als Uhrzeitempfänger. Und die Uhrzeit ist sehr genau, da sie sich von den Atomuhren in den Satelliten ableitet. Die Zeit ist wohl besser zu empfangen wie das DCF-77 Signal.

Haben wir einen besseren Satellitenempfang, dann hat die NMEA-Nachricht schon bedeutend mehr Inhalt:
$GPRMC,111419.00,A,4927.03463,N,01056.77912,E,1.654,,230523,,,A*7C $GPVTG,,T,,M,1.654,N,3.063,K,A*23 $GPGGA,111419.00,4927.03463,N,01056.77912,E,1,03,5.10,447.8,M,47.1,M,,*59 $GPGSA,A,2,02,27,08,,,,,,,,,,5.20,5.10,1.00*0E $GPGSV,2,1,06,02,25,237,23,08,15,286,29,26,50,187,,27,49,290,31*7B $GPGSV,2,2,06,28,,,22,31,03,211,28*4C $GPGLL,4927.03463,N,01056.77912,E,111419.00,A,A*
Jetzt haben wir bei $GPRMC auch die Geo-Koordinaten, hier "4927.03463,N" für Nord und "01056.77912,E" für Ost. Mit ein klein umformatieren bekommen wir ein Format, dass wir direkt bei Google-Maps eingeben können, nämlich N49 27.03463, E010 56.77912:
4927.03463,N,01056.77912,E N49 27.03463,E010 56.77912
Die Angabe vor dem N ist der Breitengrad, das N steht für Nord, entsprechend wäre noch ein S für die südliche Hemisphäre möglich. Entsprechend ist die Angabe vor E der Längengrad, wobei "E" für East steht. Westlich von Greenwich/London stünde da dann "W". Dann muss zwei Stellen vor dem Komma (bzw. dem Dezimal-Punkt) noch ein Leer- oder Gradzeichen eingetragen werden, Außerdem rutscht das N und E an den Anfang.

Aus "4927.03463,N" wird also "N49° 27.03463". Aus "01056.77912,E" wird "E010° 56.77912". Und das heißt soviel wie "Nord 49 Grad und 27,03463 Minuten und Ost 10 Grad 56,77912 Minuten. Den Minutenteil hinter dem Komma rundet man normalerweise auf drei Stellen auf oder ab. Und das Gradzeichen kann man auch weglassen. Das ergibt dann "N49 27.035 E010 56.779". Das ist auch das übliche Format beim Geocaching.

Ach, nur für die Überneugierigen unter euch: nein, dass ist nicht meine echte Adresse, sondern nur eine beispielhafte.

Etwas umformatiert finde man die Daten auch in der Zeile $GPGLL. Die "A" bedeuten übrigens "alles okay" im Gegensatz zu dem vorherigen "V" für "Warnung".

Zwischen dem E und dem Datum steht noch die Geschwindigkeit über Grund in Knoten, hier "1.654". Das ist ein altes Geschwindigkeitsmaß, das sich auf ein eben so alten Längenmaß namens Seemeile (oder auch nautische Meile) basiert. Eine Seemeile entspricht 1852 Metern. Knoten sind Seemeilen pro Stunde (2). Will man also die gebräuchlichen Kilometer pro Stunden, multipliziert man die Knoten mit 1,852. 1,654 Knoten entsprechen somit 3,063208 km/h.

Bei der Geschwindigkeit muss man bedenken, dass diese anhand der fortlaufenden Positionensbestimmungen berechnet werden, welche aber eine Abweichung von der Realität haben, je nachdem wie gut der Empfang ist. Darum werden Bewegungen und Geschwindigkeiten evtl. auch angezeigt, wenn man auf der Stelle stehen bleibt, nur aufgrund der Empfangsungenauigkeiten.

Am Ende der $GPRMC-Zeile steht übrigens eine zweistellige hexadezimale Prüfsumme. Damit kann man sicherstellen, dass es keine Fehlübertragung in der seriellen Kommunikation gab.

$GPGGA,111419.00,4927.03463,N,01056.77912,E,1,03,5.10,447.8,M,47.1,M,,*59
Die $GPGGA-Zeile wiederholt eigentlich die bereits bekannten Daten, sagt aber noch etwas über die Empfangsqualität aus. Dabei bedeutet Unsere 1 steht also für "normaler GPS-Fix ohne Zuhilfenahme von Korrektursignalen". Darauf folgen die Anzahl der empfangenen Satelliten, aus dem die Position errechnet wurde, in diesem Fall waren es "nur" drei:
$GPGGA,111419.00,4927.03463,N,01056.77912,E,1,03,5.10,447.8,M,47.1,M,,*59
Auch wenn man mit nur 3 Satelliten eigentlich keine Höhe berechnen kann, so folgt die Höheangabe in Meter, hier 447.8 Meter über Normalnull. Auch wenn die Höhenangabe in diesem Fall um gut 100 Meter daneben liegt, ist es normalerweise wertvoll diese zu haben. Man muss auch dazu sagen, dass der Empfang in diesem Fall sehr schlecht war (Indoor).
$GPGGA,111419.00,4927.03463,N,01056.77912,E,1,03,5.10,447.8,M,47.1,M,,*59
Damit ist die $GPGGA die interessanteste, allerdings brauchen wir die $GPRMC-Zeile noch für das Datum. Wer nur die Geschwindigkeit braucht und sich die Umrechnung von Knoten nach km/h sparen will, wird in Zeile $GPVTG fündig:
$GPVTG,,T,,M,1.654,N,3.063,K,A*23
Und aus der Zeile $GPGSA kann man entnehmen, welche Satelliten für die Berechnung herangezogen wurden. Jede Satellit hat eine zweistellige Nummer. In diesem Fall waren es die Satelliten 02, 27 und 08:
$GPGSA,A,2,02,27,08,,,,,,,,,,5.20,5.10,1.00*0E
Die Zeilen, die mit GPGSV beginnen und im zweiten Feld durchnummeriert sind geben weitere Auskünfte über die sichtbaren Satelliten wie der Name (zweistellige Nummer) und Elevation und Azimuth in Grad sowie die Empfangsqualität in dBm.

Mit den standardmäßig (also im Einschaltzustand) gelieferten Daten hat man alles was man braucht, verfügbar:

Betrieb an einem Mikrocontroller

Ohne weiteres Konfigurieren erhalten wir also nötigen Daten aus unserem GPS-Modul. Die blaue LED macht es uns zudem einfach zu erkennen, wann wir einen GPS-Fix haben.

Die RX und TX Leitungen können wir natürlich auch direkt an einen Mikrocontroller anschließen, sei es ein Arduino oder STM32 oder etwas, was WLAN kann wie ein ESP8266 oder ein ESP32. Wir müssen nur darauf achten, dass RX und TX über Kreuz verbunden werden (also RX an TX und TX an RX) und können dann über die Serial-Befehlen die NMEA-Nachrichten alle Sekunde auffangen und auswerten.

Genauso geht das natürlich auch mit einem Raspberry Pi. Für den ersten Test ohne großes Python-Programm tut es auch ein Terminalprogramm, wie in meinem Artikel Den Raspi mit 3.5 Zoll RPi Display TFT Touchscreen als Serial Monitor verwenden beschrieben.

Damit lässt sich dann von Tachometer, über Höhenmesser, Geocache-Reverse-Box, genauer Atomuhranzeige alles Mögliche realisieren. Da die Neo-6M-Module inzwischen durchaus erschwinglich sind, ist das durchaus eine Option.

Betrieb an einem PC mit dem u-center

Natürlich kann man sich die NMEA-Daten über ein Terminalprogramm am PC anzeigen lassen, es gibt aber auch das Programm U-Center, welches man sich auf der Website von u-blox downloaden kann.



Nach dem entpacken, installieren und starten gibt man wie im Terminalprogramm (das zuerst beenden, es können nicht zwei Programme gleichzeitig auf einen COM Port zugreifen) den COM-Port und 9600 als Baudrate an und bekommt dann rechts allerlei kleine Fenster mit ausgiebigen Informationen angezeigt: über die errechnete Geo-Position und die Höhe, die empfangenen Satelliten, die GPS-Qualität, die Position auf einer Weltkarte, die Uhrzeit in UTC und mehr.



Außerdem kann man sich die Text Konsole (wie im Terminalfenster) anzeigen lassen oder die "Messages View". Darin kann man noch weitere Protokolle wie das PUBX oder UBX-Protokolle anschalten und dann die Nachrichten davon anzeigen lassen, was noch einmal mehr Daten liefert.

Einstellungen im u-center speichern


Mit dem U-Center lässt sich das GPS-Modul auch konfigurieren. Will man zum Beispiel ein Tachometer damit basteln und ein schnelleres Update der km/h-Anzeige, dann kann man bis zu 5 Aktualisierungen pro Sekunde einstellen, die das Modul hergibt.

Dazu geht man in die Configuration View unter View und klickt dort dann auf PRT (Ports) und stellt dort erst einmal die Baudrate hoch, z. B. auf 57600. Das, damit die Übertragung der Daten schneller geht und das überhaupt 5x in der Sekunde geschehen kann. Dann muss man unten links auf das Icon mit dem beschriebenen Papier klicken ("Send the Message"), um die Einstellung zu übernehmen.

Die Aktualisierungsfrequenz stellt man dann unter RATE (Rates) ein. Dort gibt man zum Beispiel 200 ms ein. Das bedeutet dann, dass zwischen den Nachrichten eine fünftel Sekunde gewartet wird. Macht eine Frequenz von 5 Hertz. Auch hier das Senden nicht vergessen.

Permanent gespeichert sind die Einstellungen damit aber noch nicht. Wenn ihr möchtet, dass die Einstellungen auch erhalten bleiben, müsst ihr sie im Menü CFG (Configuration) in den nichtflüchtigen Speicher des Moduls abspeichern. Dazu am besten alle Devices markieren (STRG+Mausklick), "Save" auswählen und wieder "Send the Message". Erst dann sind die Einstellungen permanent. Das u-center bzw. das Terminalprogramm bzw. der Sketch muss dann natürlich auch auf die neue Baudrate eingestellt werden, damit korrekt empfangen werden kann.

Mit dem u-center kann man vorzüglich herum spielen und sich demonstrieren lassen, was es alles an Daten gibt, die man sich anzeigen lassen kann. Viele Dinge sind sehr technisch und bedürfen einiges an Hintergrundwissen rund um GPS. Aber wer sich einfuchsen möchte, für den ist das U-Center eine große Fund- und Goldgrube.

Den meisten dürfte allerdings die Grundkonfiguration mit dem NMEA-Protokoll reichen. Trotzdem: das U-Center bietet einen schön aufbereiteten, auch grafischen Überblick über die empfangenen Daten. Außerdem ist es kostenlos und deshalb auf jeden Fall einen Blick wert.

Betrieb an einem mobilen Raspberry Pi 3B+

Meinen Raspberry Pi 3B+ habe ich ja mit einem TFT-Touchscreen aufgerüstet.

Dort kann ich mir dann im Terminalprogramm auf dem kleinen 3.5 Zoll-Bildschirm dann natürlich auch die Daten anzeigen lassen. Bei einer Aktualisierungsfrequenz von einem Hertz und 6 oder 7 Zeilen pro Sekunde, die über den Bildschirm huschen, braucht man dann aber auch ein schnelles Auge, um die Koordinaten herauszulesen. Da sich diese aber nicht ständig ändern, hat man trotzdem schnell die Koordinaten notiert.

Schöner wäre aber eine statische Anzeige, die die relevanten Daten aufbereitet darstellt. Sowas kann man sich natürlich selbst mit Python schreiben, oder man greift auf etwas zurück, das es schon gibt.

Dazu installieren wir uns den GPS-Daemon gpsd samt clients auf unserem Raspi:
sudo apt-get update sudo apt-get -y install gpsd gpsd-clients
Dann starten wir den Service mit
gpsd /dev/ttyUSB0 -G
Wir können auch die Konfigurations-Datei /etc/default/gpsd editieren, um diese Einstellung zu speichern:
sudo nano /etc/default/gpsd # Devices gpsd should collect to at boot time. # They need to be read/writeable, either by user gpsd or the group dialout. DEVICES="/dev/ttyUSB0" # Other options you want to pass to gpsd GPSD_OPTIONS="" # Automatically hot add/remove USB GPS devices via gpsdctl USBAUTO="true
Danach können wir das Tool cgps aufrufen. Und zwar mit den Parametern "-s", um die einlaufenden Meldungen auszublenden, "-l m", um das übliche Minutenformat für die Koordinaten einzustellen und "-u m" für metrische Einheiten:
cgps -s -l m -u m
Das können wir uns auch wieder in eine Batch-Datei speichern, dann müssen wir uns das nicht bis zum nächsten mal merken.

Die Ausgabe auf dem 480 x 320 Pixel großen Touchscreen auf dem Raspberry Pi 3B+ selbst sieht dann so aus:



Über Putty und SSH verbunden sehen wir, da wir mehr Platz haben, noch ein paar zusätzliche Informationen:
+-------------------------------------------+-------------------Seen 15/Used 6| | Time: 2023-05-24T09:00:32.000Z (18)| GNSS PRN Elev Azim SNR Use| | Latitude: 49 2x.xxxxxx' N | GP 4 4 6.0 316.0 15.0 Y | | Longitude: 10 5x.xxxxxx' E | GP 16 16 20.0 300.0 27.0 Y | | Alt (HAE, MSL): 392.050, 345.479 m | GP 26 26 54.0 295.0 27.0 Y | | Speed: 0.50 km/h | GP 28 28 36.0 214.0 25.0 Y | | Track (true, var): 181.3, 3.2 deg | GP 29 29 57.0 63.0 14.0 Y | | Climb: 1.56 m/min | GP 31 31 47.0 256.0 25.0 Y | | Status: 3D FIX (8 secs) | GP 5 5 23.0 71.0 0.0 N | | Long Err (XDOP, EPX): 1.20, +/- 17.9 m | GP 9 9 2.0 345.0 0.0 N | | Lat Err (YDOP, EPY): 1.08, +/- 16.2 m | GP 11 11 0.0 35.0 0.0 N | | Alt Err (VDOP, EPV): 2.19, +/- 50.6 m | GP 18 18 50.0 178.0 19.0 N | | 2D Err (HDOP, CEP): 1.59, +/- 30.2 m | GP 20 20 18.0 45.0 0.0 N | | 3D Err (PDOP, SEP): 2.71, +/- 51.5 m | GP 25 25 29.0 127.0 0.0 N | | Time Err (TDOP): 1.74 | SB120 33 28.0 213.0 0.0 N | | Geo Err (GDOP): 3.22 | SB124 37 32.0 166.0 0.0 N | | ECEF X, VX: 4079xxx.120 m -0.200 m/s | SB126 39 32.0 161.0 0.0 N | | ECEF Y, VY: 789xxx.290 m 0.490 m/s | | | ECEF Z, VZ: 4823xxx.420 m 0.110 m/s | | | Speed Err (EPS): +/- 4.8 km/h | | | Track Err (EPD): n/a | | | Time offset: 0.106219682 s | | | Grid Square: JN59xxxx | | +-------------------------------------------+----------------------------------+
Die Daten auf dem Raspi sind aber ausreichend. Dort haben wir: Als weitere Programme hätten wir noch gpsmon, welches aber auch nicht mehr Daten anzeigt und auf dem Raspi-Touchscreen nicht so recht will, aber über Putty funktioniert.

Track aufzeichnen

Um einen Track aufzuzeichnen, also eine Vielzahl von Wegpunkten, um einen Pfad nachzuvollziehen, empfiehlt sich gpxtrack. Über den Parameter "-f" geben wir einen Dateinamen mit, etwa "Track-Datum.gpx" und mit "-m [meter]" können wir bestimmen, wann ein neuer Trackpunkt aufgezeichnet werden soll. Alles darunter wird als "auf der Stelle stehen geblieben" interpretiert und es wird kein Wegpunkt aufgezeichnet. Ansonsten wird alle 5 Sekunden ein Trackpunkt in der Datei gespeichert, was man über "-i [sekunden]" aber auch ändern kann. Durch
gpxlogger -f track-2023-05-24-01.gpx
startet die Aufzeichnung, die man mittels STRG+C wieder beenden kann.

Das GPX-File entspricht dem GPX-Standard. Die Datei kann man dann in Google Earth oder Easy GPS laden kann und sich die Route darin anzeigen.

Quellen, Literaturverweise und weiterführende Links

(1) NMEA 0183 bei Wikipedia
(2) Die Einheit Knoten bei Wikipedia
(3) WAAS bei Wikipedia
(4) EGNOS bei Wikipedia
(5) MSAS bei Wikipedia
(6) Liste der NMEA 0183 Datensätze
(7) Website von u-blox / u-center