Forum: Mikrocontroller und Digitale Elektronik Fragen zum NMEA Protokoll


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Yves E. (yves19)


Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich arbeite aktuell an einem GPS Tracker der seine Daten per LoRa an 
einen ESP32 sendet der die GPS Daten dann wiederrum an mein Handy 
überträgt.

Sieht dann also etwa so aus:
GPS Modul mit LoRa Sender -> LoRa Empfänger mit ESP32 und BT -> Handy 
mit Bluetooth GPS App

Folgendes Problem tritt auf, obwohl die ausgewählten Sentences (GGA, 
RMC, GSA) fehlerfrei übertragen werden und vom Telefon empfangen werden 
(kann ich mit der App im BT Terminal einsehen), kann das Telefon damit 
nichts anfangen.
Wenn sich mein Handy mit dem ESP verbindet, dann wird sofort alles 
aktualisiert, also Uhrzeit Position, GEschwindigkeit usw. aber danach 
kommt keine aktualisierung. Ich dachte erst, es läge an den Intervallen 
in denen gesendet wird, da der GPS Tracker ja stromsparend sein muss, 
werden nur ca. alle 20 Sekunden Daten gesendet und habe die mal 
runtergeschraubt, aber Fehlanzeige, keine Besserung.
Wenn ich die GPS Daten so wie sie vom Modul kommen auslese (GPS direkt 
am ESP) und 1:1 per BT weiterleite, funktioniert alles tadellos.
Kann das vielleicht an der langsamen Übertragung liegen? Gibt es bei 
NMEA Timeouts?
Die niedrigste spezifizierte Baudrate liegt ja bei 4800b/s, ist das 
vielleicht das Problem?
Ich hab auch schon versucht, auf dem ESP zu puffern und die gepufferten 
Sentences immerwieder rauszusenden, bis neue per LoRa eintreffen, aber 
Fehlanzeige.

von STK500-Besitzer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Yves E. schrieb:
> Wenn ich die GPS Daten so wie sie vom Modul kommen auslese (GPS direkt
> am ESP) und 1:1 per BT weiterleite, funktioniert alles tadellos.

Dann liegt es wohl kaum an NMEA.
Deine LoRa-Verbindung zickt rum.

von Yves E. (yves19)


Bewertung
0 lesenswert
nicht lesenswert
Aber die Sentences kommen fehlerfrei an, somit kann es nicht an der LoRa 
Verbindung liegen und am BT auch nicht.


EDIT: Ok, echt schräg, ich habe nun mal im Code des ESP statt der 
write() Methode, der ich den Pointer zum schreibenden puffer und dessen 
Größe übergeben habe, die print() Methode verwendet. Plötzlich 
funktioniert es tadellos...
Tatsächlich war das auch ein Unterschied zu vorher als ich das Modul 
direkt am ESP hatte. Merkwürdig, vielleicht hat der Interpreter auf dem 
Telefon ein Problem damit, wenn er mehr als ein NULL bekommt.
Die Sentences sind ja nicht immer gleich lang, daher habe ich vor dem 
beschreiben des Puffers diesen immer mit memset(puffer, '\0', 82) mit 
NULLs beschrieben.
print hört ja beim ersten \0 mit dem ausgeben auf. Das ist meines 
Wissens hier der einzige Unterschied.
Wieder was gelernt. Ich denke das Problem ist damit gelöst.

: Bearbeitet durch User
von STK500-Besitzer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Yves E. schrieb:
> Die Sentences sind ja nicht immer gleich lang, daher habe ich vor dem
> beschreiben des Puffers diesen immer mit memset(puffer, '\0', 82) mit
> NULLs beschrieben.
> print hört ja beim ersten \0 mit dem ausgeben auf. Das ist meines
> Wissens hier der einzige Unterschied.
> Wieder was gelernt. Ich denke das Problem ist damit gelöst.

Die Sentences enden mit <CR><LF> (in C-Nomenklatur "\r\n").
Vielleicht wurden die "verschluckt".

von Yves E. (yves19)


Bewertung
0 lesenswert
nicht lesenswert
Dachte ich auch erst, aber das kann eigentlich nicht sein. Ich habe eine 
Methode geschrieben, welche anfängt ein char array mit den ankommenden 
Daten vom  GPS Modul Byteweise zu beschreiben, sobald ein "$" oder "!" 
kommt. Das wird dann solange fortgesetzt bis der line feed kommt, da 
habe ich zum vergleichen den Hexwert 0x0A verwendet. Hätte man natürlich 
auch mit "\n" machen können, aber das hat ebenso gut funktioniert.
Das \n muss angekommen sein, sonst hätte beim Empfänger nicht mit jedem 
neuen Sentence eine neue Zeile begonnen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.