Raspberry Pi – GPS Empfänger einrichten und mit Java auswerten

Für einige Projekte, z.b: im CarComputer-Bereich, wird die aktuelle GPS Position benötigt. Dazu kann an den Raspberrry Pi ein USB GPS Empfänger angeschlossen und ausgewertet werden. Die meisten der für den USB-Port erhältlichen GPS-Mäuse melden sich als serielles Gerät an und werden von dem Raspberry Pi ohne Treiberinstallation automatisch erkannt. Empfehlenswert ist der GlobalSat BU-353-S4 GPS-USB-Empfänger. Er bietet mit dem SirfStar 4 Chip eine sehr gute Empfangsleistung. Der Zugriff auf die GPS Daten kann über die Tool Suite gpsd erfolgen.

GPS Empfänger einrichten

Wird der GPS-Empfänger an den Raspberry Pi angeschlossen muss er in der Liste der USB Geräte auftauchen. Diese kann mit dem Befehl „lsusb“ aufgerufen werden.

root@raspberrypi:~# sudo lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port

Je nach Hersteller ist des GPS-Empfängers unterscheidet sich die Bezeichnung des Gerätes. In diesem Fall ist es das Gerät „Prolific Technology, Inc. PL2303 Serial Port“.
Raspbian weißt dem Gerät automatisch einen virtuellen USB Port zu. Welcher Port zugewiesen wurde kann aus dem Syslog gelesen werden mit dem Befehl: „sudo tail -f /var/log/syslog“. Hier wurde der Port „ttyUSB0“ zugewiesen. Die Logdatei kann wie die meisten Konsolen Programme mit Strg+C beendet werden:

root@raspberrypi:/dev# sudo tail -f /var/log/syslog
Apr  7 17:55:11 raspberrypi kernel: [4926303.396898] usb 1-1.3: New USB device strings: Mfr=0, Product=0, SerialNumber=0
Apr  7 17:55:11 raspberrypi kernel: [4926303.452197] usbcore: registered new interface driver usbserial
Apr  7 17:55:11 raspberrypi kernel: [4926303.454106] usbcore: registered new interface driver usbserial_generic
Apr  7 17:55:11 raspberrypi kernel: [4926303.455879] USB Serial support registered for generic
Apr  7 17:55:11 raspberrypi kernel: [4926303.455924] usbserial: USB Serial Driver core
Apr  7 17:55:11 raspberrypi kernel: [4926303.465107] usbcore: registered new interface driver pl2303
Apr  7 17:55:11 raspberrypi kernel: [4926303.465828] USB Serial support registered for pl2303
Apr  7 17:55:11 raspberrypi kernel: [4926303.465944] pl2303 1-1.3:1.0: pl2303 converter detected
Apr  7 17:55:11 raspberrypi kernel: [4926303.477427] usb 1-1.3: pl2303 converter now attached to ttyUSB0

Um die von dem GPS-Empfänger empfangen GPS-Koordinaten auszulesen empfehlen sich unter Linux die bereits angesprochenen gpsd Tools. Diese können mit folgendem Befehl installiert werden:

sudo apt-get install gpsd gpsd-clients python-gps

Der gpsd Daemon wird wie folgt gestartet:

sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock -G

Das Flag „-G“ sorgt dafür, das der Server unter allen IP-Adressen auf Port 2947 erreichbar ist und nicht nur unter localhost. Unter Windows kann dies z.B. mit Telnet getestet werden. (Telnet muss ab Windows 7 über „Programme und Funktionen“ in der Systemsteuerung nachinstalliert werden)

telnet IP_ADRESSE_RASPI 2947

Für den GlobalSat Empfänger kann es notwendig sein sein Binärprotokoll nach NMEA zu ändern damit dieses korrekt von gpsd verarbeitet wird. Dies kann mit dem Befehl „gpsctl -n“ erreicht werden.

Anzeige der GPS Daten

Die GPS-Daten können auf der Konsole mit dem Programm „cgps“ angezeigt werden. Dabei ist zu beachten das der GPS Empfänger freie Sicht zum Himmel benötigen um Daten zu empfangen.
cgps

sudo cgps -s

Mit dem Befehl „xgps“ steht ein grafische Programm zur Verfügung. Ist an dem Raspberry Pi kein Monitor angeschlossen kann die Ausgabe grafischer Programme auch über SSH erfolgen wie es in diesem Artikel beschrieben.
xgps

sudo xgps

Mit dem Programm „gpsmon“ der gpsd Toolsuite lassen sich die vom GPS Empfänger gesendet Rohdaten, meist in Form von NMEA Sätzen, live auf der Console sehen. Somit kann wunderbar überprüft werden ob Daten empfangen werden.

sudo gpsmon

NMEA_GPSMON

Auslesen der GPS-Daten in Java

Gpsd stellt die GPS-Daten in JSON codierter Form auf Port 2947 bereit. Dieses können über eine TCP/IP Socketverbindung auslesen werden. Vereinfacht wird dies unter Java mit der Library GPSd4java.

Allerdings war die Library bei mir nicht direkt lauffähig. Ich musste über die Socket-Verbindung zunächst einen Befehl schicken, der die JSON-Ausgabe der GPS-Daten startet.

?WATCH={"enable":true,"json":true};

java_gpsd_testclientDanach können mit der Library die Daten sehr gut ausgelesen werden. Dazu habe ich das kleine, auf dem Screenshot abgebildete, Java Programm geschrieben:

Download ausführbares Programm „jGpsdTest“:


Download des Source-Codes:

Veröffentlicht in Raspberry Pi und verschlagwortet mit , .

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert