ich übe (mit Betonung auf übe ) mit einem Raspberry Pi3+ und Raspian von einem GPS-Empfänger binäre Daten auszulesen. (Präzisionsdaten sind in NMEA nicht drin, das wäre einfacher)
Das GPS sendet zyklisch jede Sekunde 44 Byte. Die ersten 4 Byte sind Fixwerte (ID) 0xb5, 0x62, 0x01, 0x14, danach folgen die Nutzdaten, welche anschliessend berechnet werden müssen und zum Schluss noch 2 Byte CRC
Komisch ist, dass mit meinem Code plötzlich zeilenweise die Enddaten fehlen. Und irgendwann wieder gut sind. Geschätzt sind etwa 10% falsche und dann gerade aneinander über mehrere Sekunden. Dass der Empfänger diese nicht sendet schliesse ich mit höchster Wahrscheinlichkeit aus (hab auch mal mit einem Terminalprogramm verglichen). Es muss am Programm oder am Raspi liegen.
Müsste ich an meinem Code etwas ändern, damit das nicht passiert? Zudem finde ich Code auch nicht gerade "schön". Gibt es eine elegantere Lösung?!
Im Netz bin ich noch nicht auf eine gute Variante gestossen...
Danke schon mal...
Code: Alles auswählen
import serial
import codecs
import time
import binascii
list = []
a = []
b = False
serport = serial.Serial("/dev/ttyACM0", baudrate = 9600)
while (True):
byte_in = serport.read()
x = binascii.hexlify(byte_in)
if x == "b5":
byte_in = serport.read()
x = binascii.hexlify(byte_in)
if x == "62":
byte_in = serport.read()
x = binascii.hexlify(byte_in)
if x == "01":
byte_in = serport.read()
x = binascii.hexlify(byte_in)
if x == "14":
#print(" ".join(list))
a = list
list = []
b = True
else:
list.append(x)
if b == True:
print(" ".join(a))
b = False
# Ausgabe (nur die erste Zeile ist korrekt - vollständig, in den andern Zeilen fehlt der Schluss, Beginn ist ohne ID - die ist ja fix)
#24 00 00 00 00 00 f8 72 22 22 f8 4a c7 04 8f 61 9c 1b e4 b4 0e 00 4f fc 0d 00 15 29 03 03 76 2a 00 00 0c 39 00 00 c2 b1
#24 00 00 00 00 00 20 19 22 22 c7 4a c7 04 8d 61 9c 1b 68 00 d3 fc 0d 00 09 2d ff fe ac 29 00 00 35 38 00 00 b3 92
#24 00 00 00 00 00 08 1d 22 22 ca 4a c7 04 8d 61 9c 1b 6a 00 d5 fc 0d 00 cf d6 04 03 ad 29 00 00 2d 38 00 00 18 7c
#24 00 00 00 00 00 f0 20 22 22 cc 4a c7 04 8b 61 9c 1b 6d 00 d8 fc 0d 00 f3 1f fe fe 00 00 2a 38 00 00 70 eb
#24 00 00 00 00 00 d8 24 22 22 ce 4a c7 04 8a 61 9c 1b 6c 00 d7 fc 0d 00 e6 10 02 02 c5 29 00 00 2e 38 00 00 5b fe
#24 00 00 00 00 00 c0 28 22 22 cf 4a c7 04 8a 61 9c 1b 62 00 cd fc 0d 00 f7 db 03 03 ce 29 00 00 2f 38 00 00 1c 12