Odczyt danych z GPSa (NMEA 0183)

0

Witam,
mam pytanie, co oznaczają w kodzie dane np fff, iff itd? Jak posługiwać się tymi danymi - nie rozumiem tego. Poniżej wrzucam kod który zrobiłem aby sobie tylko zobrazować różnice między tymi danymi, i w pierwszej iteracji każdy zapis daje coś innego, zaś w kolejnych iteracjach są różne wyniki jakie nie z + skacze na - to duże różnice w wynikach. Czy może ktoś mi ten zapis (to hex jak się nie mylę) wyjaśnić jak nim się posługiwać aby odczytać dane z układu GPS-CubeOrange-RaspberryPI? W internecie tylko w dokumentacji znalazłem info "jak podłączać przewody", natomiast jak odczytać depeszę już nie :/

Bardzo dziękuję za pomoc.

import serial
import struct

SER = serial.Serial("/dev/serial0", 921600)
i = 0
print(SER)

ask = input('ver unpack: ')

if ask == 'iff':
    iteracje = int(input('give the number of iterations: '))
    while i < iteracje:
        print('iff: ', struct.unpack("iff", SER.read_until('\n', size=12)))
        i += 1

if ask == 'full':
    for i in range(0, 5):
        print('\niteration: ', i)
        print('iff  : ', struct.unpack("iff", SER.read_until('\n', size=12)))
        print('fff  : ', struct.unpack("fff", SER.read_until('\n', size=12)))
        print('ffff : ', struct.unpack("ffff", SER.read_until('\n', size=16)))
        print('hhl  : ', struct.unpack("hhl", SER.read_until('\n', size=8)))
        print('f    : ', struct.unpack("f", SER.read_until('\n', size=4)))
        print('fffff: ', struct.unpack("fffff", SER.read_until('\n', size=20)))
        print('iiiii: ', struct.unpack("iiiii", SER.read_until('\n', size=20)))

oraz wynik

iterations no:  0
iff  :  (2134983731, 5.091303940405988e-21, -420023642357760.0)
fff  :  (1.878526371448801e-32, 6.544785497106023e-39, 0.0)
ffff :  (131072.0, 1.8420024395376077e-32, 7.738646947159909e-39, 0.0)
hhl  :  (13066, 16708, -1067970255)
f    :  (-0.504926323890686,)
fffff:  (-147.80001831054688, 50227.0390625, 0.0, 0.0, -0.7844738960266113)
iiiii:  (1413755658, 0, 1144195584, 1477401409, 21770944)

iterations no:  1
iff  :  (332189119, 716.1681518554688, 9.949219096706201e-44)
fff  :  (0.0, 432704.0, 716.1679077148438)
ffff :  (1.1770907100328463e-43, 3.213062882423401e-08, 8.483911835110607e-32, 60062793728.0)
hhl  :  (-16639, -13102, 856343315)
f    :  (2.5565289183141963e-41,)
fffff:  (0.0, -858993459200.0, 3.230459810765751e-08, 3.0228810472414954e-41, 6.162975822039155e-33)
iiiii:  (323044403, 1623218190, -557907629, 180556748, 4670515)
1

A czytałeś dokumentację do struct.pack i struct.unpack ?

print('iff  : ', struct.unpack("iff", SER.read_until('\n', size=12)))

Czytasz 12 bajtów i następnie 4 pierwsze interpretujesz jako int32, dwa następne jako float32.
Kolejne linijki czytają następne dane - nie ma zatem prawie szans żeby wyświetlane wyniki były porównywalne z tym co zobaczyłeś wcześniej.

0
Bartłomiej Golenko napisał(a):

A czytałeś dokumentację do struct.pack i struct.unpack ?

print('iff  : ', struct.unpack("iff", SER.read_until('\n', size=12)))

Czytasz 12 bajtów i następnie 4 pierwsze interpretujesz jako int32, dwa następne jako float32.
Kolejne linijki czytają następne dane - nie ma zatem prawie szans żeby wyświetlane wyniki były porównywalne z tym co zobaczyłeś wcześniej.

Dziękuję za wskazówkę :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1