Bordcomputer, die Zweite…

Im zweiten Beitrag werde ich unserem Raspberry seine Position mitteilen. Klingt simpel, war es leider nicht.

Ursprünglich wollte ich ein gebrauchtes Garmin GPS III benutzen um über die NMEA 0183 Schnittstelle die Position auszulesen. Nach einiger Fummelarbeit mit alten Netzteilen, lief das GPS auch zuverlässig. Naiverweise dachte ich, dass ich mit der seriellen Schnittstelle des Pi einfach das Protokoll auslesen könnte. Leider erhielt ich nur Kauderwelsch. Okay die serielle Schnittstelle kann mal Macken haben, also auf die Schnelle einen USB Adapter auf RS232 Standard bestellt und wieder angeschlossen. Das Ergebnis blieb leider dasselbe. Nach tagelanger Frickelei (umstellen der Baudrate und und und) gab ich dieses Unterfangen frustriert auf.

Was nun? Sollten wir den Raspberry Pi ohne GPS betreiben? Sprich nur Musik und Filme? Kein Kartenplotter, keine Geschwindigkeitsanzeige! Einen Versuch wollte ich noch starten und besorgte mir eine günstige Platine mit GPS Empfänger, die die Daten auch im NMEA Standard ausgibt. Ich entschied mich gegen eine geläufige GPS USB-Maus, da diese 1. teurer sind und 2. ohne das Raspberry ein Auslesen des Signals unmöglich wäre (z.B. für das Funkgerät). Den Anschluss der Platine und die Einbindung ins System beschreibe ich im Folgenden für potentielle Nachahmer ein wenig präziser.

Der GPS Empfänger hat vier Ausgänge (VCC, GND, TxD, RxD), wovon drei jetzt mit dem USB Serial Adapter verbunden werden müssen. VCC ist die Plusleitung und GND die Masse. TxD steht für Transmit Data und sollte mit der Receive (RxD) Buchse des Adapters verbunden werden. Mehr ist nicht zu machen.

Jetzt müssen wir noch die Ansteuerung unserer Schnittstelle im Pi herausfinden. Dafür können wir uns mit sudo dmesg in der Konsole alle Systemnachrichten anzeigen lassen. Irgendwo taucht der USB Serial Adapter auf und auch der Alias mit dem er angesprochen werden kann. Bei mir war es /dev/ttyUSB0. Zuerst sollten wir die Baudrate checken. Dafür können wir mit dem Befehl sudo stty -a -F /dev/ttyUSB0 alle Informationen zu unserer Schnittstelle auslesen. Stimmt die Baudrate mit der vom GPS Empfänger überein, ist alles Gut. Andererseits können wir mit stty auch die Baudrate auf die geforderte Einstellung setzen. Als nächstes sollten wir überprüfen, ob die Schnittstelle auch echte NMEA Sequenzen empfängt. Mit cat /dev/ttyUSB0 können wir die empfangenen Daten anzeigen lassen. Passen die soweit, können wir damit fortfahren, die GPS Daten für andere Programme sichtbar zu machen.

Dafür bietet sich ein Hintergrunddienst (Daemon) an, der permanent die serielle Schnittstelle ausliest und die Daten von anderen Programmen angefordert werden können. Am weitesten verbreitet ist der GPS Daemon gpsd. Das Einpflegen der Position in OpenCPN und das Zugreifen von selbstgeschriebenen Programmen mittels Pythonbibliotheken ist damit im Nu erledigt. Mit sudo apt-get install gpsd gpsd-clients ist der Daemon fix installiert. Um die korrekte Schnittstelle zuzuweisen, muss noch die Konfiguartionsdatei mit sudo nano /etc/default/gpsd geändert werden. Im unteren Bild sieht man meine Einstellungen. Nach einem Neustart kann man mit dem Hilfsprogramm cgps die korrekte Funktionsweise testen. Jetzt sollte man die eigene Position angezeigt bekommen.

Zum Schluss binden wir den Empfänger noch in OpenCPN ein, was mithilfe des Daemons kein Problem mehr sein sollte. Unter Options->Connections->Add Connection eine Network Verbindung mit GPSD und der Adresse localhost erstellen. Schon hat auch OpenCPN die erforderlichen Daten und zeigt die aktuelle Bootsposition an. Nützlich ist hier auch das Dashboard Plugin, welches zusätzlich noch die Satelliten anzeigt (siehe Bilder).

Alle Grundanforderungen an unseren Bordcomputer sind nun erfüllt, fehlt noch der nahezu unsichtbare Einbau in Streuner. Allerdings finde ich Gefallen an dem kleinen Einplatinencomputer und habe eine Idee die Funktionen noch zu erweitern.

Aber diese Idee ist einen eigenen Post wert…