Zur Navigation

GPS Sensor an Raspberry Pi funktioniert nicht richtig

1 Tom12

Hallo,
Es ist so, dass ich die GPS Daten zwar in Rohform auslesen kann, obwohl dabei mehr Pakete verloren gehen als ankommen, allerdings ist es einfach nicht möglich diese an den GPS Daemon weiterzuleiten.
Ich habe den GPS Sensor mit neuen Jumperkabeln, an meinen Raspberry Pi 3B+ angeschlossen . Das Betriebssystem auf dem Raspberry Pi ist Raspian Booster.
Die Serielle Schnittstelle, habe ich über das GUI freigegeben .
GPS Modul Raspberry Pi
VCC 3.3V (Pin 1)
RX TXD/GPIO 14 (Pin 8)
TX RXD/GPIO 15 (Pin 10)
GND Ground (Pin 6)
Am GPS Sensor blinkt auch ganz normal die blaue Lampe.
Wenn ich nun den Befehl
sudo cat /dev/serial0
oder auch
sudo cat /dev/ttyS0
eingebe, bekomme ich die Sensordaten in der Rohform, allerdings komplett unsortiert und mit mehr Fehlern als echten Daten (wobei ich bis jetzt noch nicht überprüft habe, ob diese überhaupt richtig sind) .
Also an der Seriellen Schnittstelle, sollte das Problem schon einmal nicht liegen. Als nächstes habe ich mich dann nach dieser Anleitung gerichtet (https://tutorials-raspberrypi.de/raspberry-pi-gps-ortung-navigation/), die allerdings ein wenig anders ist, da es sich hierbei um eine Anleitung für ein älteres Modell handelt (z. B. die Freischaltung der Seriellen Schnittstelle ist anders & /dev/ttyAMA0 heißt jetzt /dev/ttyS0). Ich habe also zum einen die Befehle
sudo apt-get update
und
sudo apt-get install minicom gpsd gpsd-clients
eingegeben
Als nächstes steht in der Anleitung, dass dem Modul eine Baudrate von 9600 geben soll, was das genau ist, habe ich noch nicht so ganz verstanden, aber ich denke mal das ist so etwas in der Art wie eine Taktfrequenz. Dies mache ich mit dem Befehl
sudo stty -F /dev/serial0 9600
. Ich bekomme hier keine Ausgabe, so wie auch in dem Tutorial beschrieben. Mit dem Befehl
sudo stty -F /dev/serial0
lasse ich mir dann noch die aktuelle Konfiguration ausgeben.
Laut der Anleitung, soll man jetzt den ersten Test mit dem Befehl minicom -b 9600 -o -D /dev/ttyAMA0, den ich natürlich so abwandle machen:
sudo minicom -b 9600 -o -D /dev/serial0
das ist irgendwie komisch formatiert, so dass ich mit Strg + A und Q Dann das Programm wieder abbreche .

Als letztes, und das ist jetzt der Punkt der nicht klappt, gebe ich den Befehl
sudo gpsd /dev/serial0 -F /var/run/gpsd.sock -n
ein. Es kommt keine Ausgabe. Als nächstes, sollte normalerweise mit dem Befehl
cgps
die Sensordaten Strukturiert ausgegeben werden. Dies ist allerdings nicht der Fall. Stattdessen kommen bei allen Werten die Ausgaben n/a und beim Status steht NO FIX (0 secs) Nach mehreren Sekunden springt das UI weg und es kommt die Fehlermeldung
cgps: GPS timeout
.
Ich habe schon alles Mögliche probiert und weiß momentan nicht weiter.


Ich hoffe mir kann jemand helfen.

09.04.2020 13:05

2 Jörg Kruse

Die Anleitung ist ja schon etwa älter, die /etc/inittab wird es auf deinem raspbian wohl nicht mehr geben; mit "Raspian Booster" meinst du vermutlich "Buster"?

Auf Debian Buster läuft Systemd als init Prozess, d.h. der gpsd sollte mit systemctl gestartet werden. Vielleicht in der Art, wie das in der ersten Antwort hier angegeben ist:

https://raspberrypi.stackexchange.com/questions/28483/cgps-gps-timeout

09.04.2020 17:46 | geändert: 09.04.2020 17:49

3 Tom12

mit "Raspian Booster" meinst du vermutlich "Buster"?
Ja genau, Raspian Buster

Die Anleitung ist ja schon etwa älter, die /etc/inittab wird es auf deinem raspbian wohl nicht mehr geben;
Ja, bei Raspian Buster geht das ja über Raspi-config, das habe ich ja such schon gemacht, siehe zweites Bild.

Auf Debian Buster läuft Systemd als init Prozess, d.h. der gpsd sollte mit systemctl gestartet werden.
Das müsste ich doch machen, wenn ich möchte, dass der Dienst direkt nach dem starten automatisch mitgestartet wird, es sollte so eigentlich auch so funktionieren.

Vielleicht in der Art, wie das in der ersten Antwort hier angegeben ist:
https://raspberrypi.stackexchange.com/questions/28483/cgps-gps-timeout
Ich habe das mal ausprobiert, was dort als Antwort stand:

Ich habe also zuerst den Prozess beendet:
sudo killall gpsd
Dann die Serielle Schnittstelle an die Daemone weitergeleitet:
sudo gpsd /dev/serial0 -F /var/run/gpsd.socket
Dann meine /etc/deafult/gpsd Date so geändert wie oben beschrieben:

Und dann wollte ich diesen Befehl ausführen:
sudo systemctl enable gpsd.socket
Da kam dann allerdings diese Fehlermeldung:
Failed to enable unit: File gpsd.socket: No such device or address

Naja, der Prozess läuft auf jeden Fall fleißig weiter:


Dann beende ich den Prozess mal wieder:
sudo killall gpsd
, damit ich Ihn mal mit dem -N Parameter starten kann, ob das Fehler auswirft
sudo gpsd /dev/serial0 -N
und in der Tat, bekomme ich eine Fehlermeldung:
gpsd:ERROR: can't bind to IPv4 port gpsd, Address already in use
gpsd:ERROR: maybe gpsd is already running!
gpsd:ERROR: can't bind to IPv6 port gpsd, Address already in use
gpsd:ERROR: maybe gpsd is already running!

GPSD nutzt den Port 2947
Also teste ich mal aus, wenn ich vorher den Prozess beende, ob der Port belegt ist:

Er ist also besetzt, aber ich hab keine Ahnung wovon... und wie ich den trotzdem nutzen kann.
Selbst wenn ich dem Programm cgps die Schnittstelle manuell übermittle bekomme ich keine Daten:


Vielleicht liegt das ganze doch irgendwie am Port? Ich wüsste nur nicht wie ich das Problem beheben könnte.

09.04.2020 18:44

4 Jörg Kruse

"1/init" ist Systemd. Systemd wartet hier wohl auf eine Verbindung auf Port 2947, um den konfigurierten Prozess (gpsd) bei Bedarf zu starten.

or Edit /etc/default/gpsd file, input your device name and parameters:

"or", d.h. ab hier folgt eine alternative Vorgehensweise. Da du beide ausgeführt hast, war der Port im zweiten Fall wohl schon belegt

Wenn du die /etc/default/gpsd editiert hast, vielleicht nochmal diese Reihenfolge probieren, um gpsd über systemctl zu starten:

sudo killall gpsd
sudo systemctl enable gpsd.socket
sudo systemctl start gpsd.socket 
sudo cgps -s

09.04.2020 19:57

5 Tom12

Ich habe die Befehle so noch einmal eingegeben, allerdings hat es immer noch nicht geklappt:

Ich habe auch den Server noch einmal neugestartet und
cgps
ausgeführt. Da kam jetzt eine neue Fehlermeldung
cgps: no gpsd running or network error: -6, can't connect to host/port pair

Auch der Befehl
ps -e | grep gpsd
gibt keine Ausgabe. Ich denke, das bedeutet einfach nur, dass ein Neustart die Konfiguration zurücksetzt.
Jetzt kommt natürlich bei dem oberen Code auch wieder ein Fehlercode...:



Nach einem einfachen Ausführen hiervon
sudo gpsd /dev/serial0 -F /var/run/gpsd.sock -n
ISt der Prozess auch wieder am start
und die blockierung vom Port auch:

Der unterschied zu vorher ist jetzt aus irgend einem Grund, dass der Port nicht mehr von init sondern von gpsd besetzt ist.

cgps
klappt natürlich immer noch nicht...

Bei
sudo gpsd /dev/serial0 -N
bekomme ich auch immer noch den Fehler
gpsd:ERROR: can't bind to IPv4 port gpsd, Address already in use
gpsd:ERROR: maybe gpsd is already running!
gpsd:ERROR: can't bind to IPv6 port gpsd, Address already in use
gpsd:ERROR: maybe gpsd is already running!

Das ganze ist leider irgendwie viel komplizierter als ich zuerst dachte...

09.04.2020 20:37

6 Tom12

Also, ich habe jetzt nochmal einen Neustart gemacht
So sieht das bei mir momentan aus...


Jetzt habe ich die
/etc/default/gpsd
Datei einmal geändert und nochmal das gleiche wie gerade alles überprüft.

11.04.2020 15:04 | geändert: 11.04.2020 15:13

7 Jörg Kruse

Jetzt ist der Port laut netstat nicht belegt.

In der Antwort von yoyojacky enthält GPSD_OPTIONS in /etc/default/gpsd die Option -F mit dem Pfad /var/run/gpsd.socket. Wenn du dies bei dir auch noch einträgst und dann erst noch den Server neu startest (weil die Datei beim Booten erstellt wird), sollte die Socketdatei danach hoffentlich vorhanden sein, so dass sie mit systemctl aktiviert und gestartet werden kann?

11.04.2020 16:50 | geändert: 11.04.2020 16:53

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]