Keine Kommunikation mit GPS-Modulen bei 6 Sensoren

Hallo OBS-Community,

bei unserem ersten öffentlichen OBS-Workshop gestern in der Welcome Werkstatt in Hamburg-Barmbek, sind wir leider auf ein blödes Problem gestoßen: 6/8 Sensoren waren am Ende des Tages nicht lauffähig. Alle sechs zeigen das gleiche Fehlerbild:

  • Bootvorgang dauert sehr lange, nach ca. 60 Sekunden zeigt das Display (0 sats SN:0) an (Auch nach 30min ändert sich an dem Fehlerbild nichts)
  • Die GPS-Module haben wir im verbauten Zustand über die Pinleiste des ausgebauten ESP32 mit nem USB/Seriell-Adapter an einen Rechner angeschlossen und mit der ublox Software (u-center) getestet: Dort funktionieren sie einwandfrei – die Module selber sind also funktionsfähig.
  • Wir haben einen ESP32 aus einem älteren, funktionierenden Sensor in diese neuen, nicht laufenden Sensoren eingesetzt → gleiches Fehlerbild. Der ESP32 scheidet als Fehlerquelle also eigentlich aus.
  • Bei einem der fehlerhaften Sensoren haben wir das GPS-Modul gegen eins aus einer älteren Bestellung getauscht, dann hat alles funktioniert → Fehler/Problem muss am GPS-Modul liegen, alle restlichen Komponenten scheinen korrekt zu funktionieren.

Was wir auch überprüft haben/woran es nicht liegt:

  • JP1 ist verbunden
  • TX/RX, bzw. generell alle GPS-Kontakte sind korrekt angeschlossen

Die zugehörige About-Seite des fehlerhaften Sensors findet sich hier:

Irgendwie scheint es ein Kommunikationsproblem zwischen ESP32 und den GPS-Modulen zu geben. Aber irgendwie auch nicht so ganz. Wenn die beiden Komponenten gar nicht sprechen könnten, dann müsste es ja ein „GPS Off“ Fehler geben, richtig?

Habt ihr eine Idee, was wir da noch untersuchen können? Die serielle Kommunikation mal auf einem Oszilloskop anschauen?

4 „Gefällt mir“

@andreas kann vermutlich am besten was zu der Frage nach dem GPS OFF Fehler aus dem vorletzten Absatz sagen - Ich hatte ja schon im Chat alle Ideen die ich zum Problem beisteuern konnte beigesteuert.

edit: Mit dem Oszi könnte man vermutlich draufgucken. Interessant wäre, ob die TX vom GPS vom Level her für die Inputspannungen der ESP32 UART reichen und den Spannungen an einem funktionierenden Gerät übereinstimmen - Wenn die etwas zu wenig Spannung haben reichts vielleicht für den USB-UART, aber nicht für den ESP?

Eine weitere Sache die man probieren könnte wäre der „Batteriespannungs“ Umbau, bei dem der 3.3V pin vom GPS nicht mit 3.3V sondern mit der Batteriespannung (hinter dem Schalter, also weiterhin schaltbar) verbunden wird. Das GPS hat seinen eigenen 3.3V wandler, und es gab berichte, dass es mit Batteriespannung besser bedient ist - @Jan.D war wennn ich das richtig verstanden habe bei euch, der hatte das glaube ich mal aufgebracht. Da der ESP auch noch mal die Last auf den (im OBS verbauten) 3.3V Wandler erhöht könnte es auch sein dass es dann auf der 3.3V seite für das GPS knapper wird, und es deshalb Ohne ESP funktioniert, mit aber nicht mehr.

Alles nur geraten, aber ohne probieren kann man schwer mehr machen.

@preya - prüfe bitte als erstes ob das GPS Modul Spannung hat. Leuchtet / Blinkt eine der LEDs (bin gerade nicht sicher ob das der Fall sein sollte oder ob die LED nur bei Empfang blinkt) bzw. messe die Spannung am GPS Modul.
Du hast recht, eigentlich sollte dann auch „GPS Off?“ angezeigt werden. da muss ich später genauer schauen. „Komisch“ ist auch, dass eine 1 bei GPS valid checksum gemeldet wird. Das könnte ein Hinweis auf den Fehler oder aber ein Seiteneffekt in der Firmware sein.

@preya ok, die 1 ist kein unerwarteter Seiteneffekt. Es scheint, dass zumindest eine Nachricht erfolgreich ausgetauscht wird. Kommst du an die serielle Ausgabe des ESP? Das geht nur wenn der ESP per USB angeschlossen ist und z.B. über install.openbikesensor.org - „Connect“ - „Logs & Console“.

Hallo. Ich hab auch bei dem Workshop teilgenommen und das GPS scheint nicht zu funktionieren. Habe mal nachgemessen und zumindest die Stromversorgung des GPS moduls bekommt 3,3 V zwischen den 3.3V und GND Pins.

Ich hab mal eine Entwicklungsfirmware vom aktuellsten code von GitHub gebaut und geflasht. In den Logausgaben steht folgendes:

Hard resetting via RTS pin...
==================================== [SUCCESS] Took 50.10 seconds ====================================
--- Available filters and text transformations: colorize, debug, default, direct, esp32_exception_decoder, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at https://bit.ly/pio-monitor-filters
--- Miniterm on /dev/cu.usbserial-0001  115200,8,N,1 ---
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
[    40][I][OpenBikeSensorFirmware.cpp:197] setup(): openbikesensor.org - OBS/v0.15local
[    42][W][Wire.cpp:204] begin(): Bus already started in Master Mode.
[    86][I][VoltageMeter.cpp:40] VoltageMeter(): Initializing VoltageMeter.
[    87][I][VoltageMeter.cpp:54] VoltageMeter(): Characterized using eFuse Vref
[    89][I][VoltageMeter.cpp:62] VoltageMeter(): eFuse Two Point: NOT supported
[    96][I][VoltageMeter.cpp:66] VoltageMeter(): eFuse Vref: Supported
[   106][I][VoltageMeter.cpp:75] VoltageMeter(): VoltageMeter initialized got 0.21V.
[   141][W][sd_diskio.cpp:174] sdCommand(): no token received
[   247][W][sd_diskio.cpp:174] sdCommand(): no token received
[   351][I][OpenBikeSensorFirmware.cpp:590] loadConfig(): Load cfg
{
  "obs": [
    {
      "obsName": "OpenBikeSensor-30e0",
      "name": "default",
      "simRa": false,
      "bluetooth": false,
      "offset": [
        35,
        35
      ],
      "portalUrl": "https://portal.openbikesensor.org",
      "httpPin": "302201",
      "portalToken": "",
      "displayConfig": 525,
      "privacyConfig": 1,
      "confirmationTimeSeconds": 5,
      "devConfig": 0,
      "selectedPreset": 0,
      "privacyArea": []
    }
  ]
}Dumping current configuration, current selected profile is 0:
{
  "obs": [
    {
      "obsName": "OpenBikeSensor-30e0",
      "name": "default",
      "simRa": false,
      "bluetooth": false,
      "offset": [
        35,
        35
      ],
      "portalUrl": "https://portal.openbikesensor.org",
      "httpPin": "302201",
      "portalToken": "",
      "displayConfig": 525,
      "privacyConfig": 1,
      "confirmationTimeSeconds": 5,
      "devConfig": 0,
      "selectedPreset": 0,
      "privacyArea": []
    }
  ]
}
[  1149][E][HardwareSerial.cpp:278] setRxBufferSize(): RX Buffer can't be resized when Serial is already running.

[  1163][E][gps.cpp:810] parseUbxMessage(): ACK-NAK 0x3406
[  1163][E][gps.cpp:350] sendAndWaitForAck(): Failed to send cfg. 0x3406 NAK: 1 
[  1202][E][gps.cpp:810] parseUbxMessage(): ACK-NAK 0x3406
[  1203][E][gps.cpp:350] sendAndWaitForAck(): Failed to send cfg. 0x3406 NAK: 1 
[  1204][E][gps.cpp:293] setBaud(): Switch to 115200 was not possible, back to 9600.
[  2211][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x3406
[  3211][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x3406
[  4211][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x3406
[  4211][E][gps.cpp:350] sendAndWaitForAck(): Failed to send cfg. 0x3406 NAK: 0 
[  4213][E][gps.cpp:298] setBaud(): NO GPS????
[ 10217][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x3406
[ 11217][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x3406
[ 12217][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x3406
[ 12217][E][gps.cpp:350] sendAndWaitForAck(): Failed to send cfg. 0x3406 NAK: 0 
[ 13219][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x3406
[ 14219][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x3406
[ 15219][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x3406
[ 15219][E][gps.cpp:350] sendAndWaitForAck(): Failed to send cfg. 0x3406 NAK: 0 
[ 15221][I][gps.cpp:174] softResetGps(): Soft-RESET GPS!
[ 16226][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x0406
[ 17226][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x0406
[ 18226][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x0406
[ 18226][E][gps.cpp:350] sendAndWaitForAck(): Failed to send cfg. 0x0406 NAK: 0 
[ 18429][W][sd_diskio.cpp:174] sdCommand(): no token received
[ 18533][W][sd_diskio.cpp:174] sdCommand(): no token received
[ 18634][I][gps.cpp:207] enableAlpIfDataIsAvailable(): Enable ALP
[ 19634][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x0106
[ 20634][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x0106
[ 21634][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x0106
[ 21634][E][gps.cpp:350] sendAndWaitForAck(): Failed to send cfg. 0x0106 NAK: 0 
[ 22736][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x2406
[ 23736][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x2406
[ 24736][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x2406
[ 24736][E][gps.cpp:350] sendAndWaitForAck(): Failed to send cfg. 0x2406 NAK: 0 
[ 25738][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x3406
[ 26738][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x3406
[ 27738][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x3406
[ 27738][E][gps.cpp:350] sendAndWaitForAck(): Failed to send cfg. 0x3406 NAK: 0 
[ 28780][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x0106
[ 29780][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x0106
[ 30780][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x0106
[ 30780][E][gps.cpp:350] sendAndWaitForAck(): Failed to send cfg. 0x0106 NAK: 0 
[ 30790][W][sd_diskio.cpp:174] sdCommand(): no token received
[ 30895][W][sd_diskio.cpp:174] sdCommand(): no token received
[ 31000][W][sd_diskio.cpp:174] sdCommand(): no token received
[ 31103][W][sd_diskio.cpp:174] sdCommand(): no token received
[ 31213][W][sd_diskio.cpp:174] sdCommand(): no token received
[ 31316][W][sd_diskio.cpp:174] sdCommand(): no token received
[ 31426][W][sd_diskio.cpp:174] sdCommand(): no token received
[ 31531][W][Wire.cpp:204] begin(): Bus already started in Master Mode.
[ 32537][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x0106
[ 33537][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x0106
[ 34537][E][gps.cpp:345] sendAndWaitForAck(): Retry to send 0x0106
[ 34537][E][gps.cpp:350] sendAndWaitForAck(): Failed to send cfg. 0x0106 NAK: 0 

Gerne offen anderen Code oder so auszuprobieren.

1 „Gefällt mir“

Danke für das log. Ich hab befürchtet, dass das Modul eventuell kein UBX spricht, aber dann sollte es Lognachrichten zu Unparsed NMEA geben. Da kommt aber nix.

Interessant ist zu Wissen was denn die eine gültige Nachricht ist, die ankommt. Eventuell bekommen wir das Modul so in den Griff. Kannst Du in src/gps.cpp in die Methode Gps::handle Zeile 377 in der Schleife ein log_w("GPS in: 0x%02x", data); einbauen. Jedes Byte das vom GPS Modul kommt muss da durch.

2 „Gefällt mir“

Weiter geht es hier: GPS issues - module swVersion: 5.00 · Issue #309 · openbikesensor/OpenBikeSensorFirmware · GitHub

2 „Gefällt mir“

Vielleicht ist ein Update der U-BLOX-Chips ein Weg?
https://learn.sparkfun.com/tutorials/how-to-upgrade-firmware-of-a-u-blox-gnss-receiver/all
Könnt ihr damit was anfangen oder habt ihr das zuvor schon ausprobiert?

Eigentlich ne gute Idee, nur dass der NEO-6M, der im OBS benutz wird, nicht als unterstützt mit aufgelistet ist.

Jedoch könnten wir das GPS Modul einzeln mit einem UART USB Adapter an einem Windows Rechner anschließen und prüfen ob die ublox Software problemlos mit dem Chip funktioniert.

@tfar,

das haben wir mit allen HHer-Modulen parallel während des Wörkshops gemacht (das war der Aufbau draußen).
Alle verbauten Module bekamen / bekommen mit U-Center einen FIX.
Das hatten wir so geplant, um sicher zu sein, keine toten Gurken einzubauen.
Dass die Teile nun eine andere Firmware haben (soweit ich das verstanden habe), merkt U-Center nicht.
Da die Version aber wohl niedriger ist, kann die OBS-Firmware das nicht bedienen.

Scheinen sehr alte Module zu sein, die wir da bekommen haben.

Ahh. Top. Dann kann ich mir die Arbeit ja sparen. Dann muss sich wohl was in dem Protokoll zwischen esp32 und ublox geändert haben.

@tfar und @andreas

Ja, war denn das auf GITHUB nicht ein Ergebnis, dass die GPS-Mogule eine ältere FW haben als die bisher verwendeten?

Oder wie?

Damit wir NOOBs etwas besser folgen können, könntet ihr ab und zu zusammenfassen, was der Stand ist?

Ja. Die Firmware scheint eine ältere zu sein, bzw. gibt sich als solche aus.

Nach ein paar Anpassungen von @andreas konnte der ESP32 auch kontinuierlich Nachrichten vom ublox Modul empfangen. Jedoch ist selbst nach Stunden keine GPS Zeit oder ein GPS fix dabei rumgekommen.

Ach so!
Du hast also momentan eine FW Special edition am Start. Gut.

Dann teste doch noch einmal, ob nicht irgendwas mit dem Modul ist. Musst es nicht ausbauen, siehe hier:

Sorry @tfar für die folgende Fragen: „…auch nach Stunden keinen Fix“ => das geht eher nur draußen.

  • Warst Du draußen?
  • Hast Du ALP vorher geladen, dann sollte es <5min dauern.

Hab eben noch einmal die SD Karte formatiert und den OSB neu initialisiert. Mit ALP Daten hat er jetzt nach ein paar Minuten eine Zeit bekommen. Werde den nun mal draußen testen ob er einen Fix bekommt.

[1325718][I][gps.cpp:419] addStatisticsMessage(): New: NAVSOL gps week changed: 0 → 2209 at 2022-05-12T18:26:49Z

Nach 10 minuten hab ich jetzt auch einen GPS fix. Der SN Wert lag oft so um und bei 80. Hab mal ein paar Testwerte speichern lassen mit Knopfdruck und am Rechner die GPS Positionen in der CSV Datei verifiziert. Das passt jetzt alles. Wahrscheinlich hatte sich mein OSB die ALP Daten nicht korrekt geholt.

Zusammenfassend, sollte mit einem Firmware Update alles funktionieren.

2 „Gefällt mir“

Moin zusammen,
ich war auch beim Workshop dabei und habe die Probleme mit dem GPS-Modul. Wäre es möglich, dass ich einmal mit der angepassten OBS-Firmware testen könnte, ob sich damit bei mir das Problem ebenfalls lösen lässt?
Vielen Dank!

@andreas

Hallo Andreas,

ja, also wir haben potenziell 6x Leute mit „alter FW in den GPS-Modulen“.
Es wäre ja nicht gut, wenn nun dafür @tfar s Version verwendet würde, denn dieser Fork wäre ungepflegt und würde durch ein Update über die Weboberfläche zerschossen.

Wie stehen die Chancen, das Feature mit in die offizielle Version der OBS-FW zu überführen?

Möchte auch nochmal sagen, dass ich das Zusammenwirken von @andreas und @tfar ganz großartig finde! Applaus! :clap:

3 „Gefällt mir“

Hallo Jan, ich kann dich beruhigen, es gibt keinen separaten Fork der Firmware für die Unterstützung der älteren GPS Firmware. Die Änderungen sind im aktuellen Entwicklungsstand der Firmware. Es gab allerdings zeitgleich Änderungen am verwendeten Framework. Ich muss leider zunächst auf die ältere Version des Frameworks zurückschwenken, dann gibt es eine neue pre-release mit allen Änderungen.

@basti - verwende die neueste pre-release v0.16.765 zum Testen. Feedback ist willkommen.

1 „Gefällt mir“