Visto che mi trovo a trasmettere dati GPS via radio e' necessario verificare che i dati non siano stati corrotti. Un metodo semplice e' quello di calcolare il checksum delle stringhe NMEA e dei pacchetti Ublox
NMEA
--------------------------------------------------
il checksum delle stringhe NMEA e' piuttosto semplice. Prima di tutto la stringa e' terminata da 0d e 0a.
Prendiamo per esempio la stringa
$GNVTG,,T,,M,0.005,N,0.010,K,A*39
il checksum e' 39
per il calcolo si toglie il primo carattere $ e tutto cio' che e' dopo il carattere *.
si prendono poi i caratteri e si effettua uno XOR di ogni carattere della stringa (in esadecimale)
quindi 47 XOR 4e XOR 56 XOR 54 XOR 47 ....... = 39
in questo caso il checksum calcolato e' uguale dal checksum ricevuto, Cio' vuol dire che il pacchetto e' stato ricevuto correttamente
--------------------------------------------------
UBX
I pacchetti UBX sono di tipo binario e non hanno una lunghezza fissa
I pacchetti partono con i due caratteri B5 e 62, seguono due byte che identificano la classe del messaggio e l'ID del messaggio. Seguono poi due bytes che indicano la lunghezza del messaggio (inteso solo come il payload), il payload e due bytes finali di checksum (8 bit unsigned)
Quindi il payload parte dal byte 7 in formato 16 bit senza segno in formato Little Endian
L'algoritmo di checksum e' quello di Fletcher.
Questa e' la versione scritta nel manuale Ublox
ma il codice piu' corretto dovrebbe essere il seguente, che rinormalizza ad ogni passaggio con il modulo 255
Visualizzazione post con etichetta NMEA. Mostra tutti i post
Visualizzazione post con etichetta NMEA. Mostra tutti i post
lunedì 4 luglio 2016
mercoledì 14 gennaio 2015
NTP Server con GPS via Android
In questo post viene spiegato come poter utilizzare un telefono Androided un calcolatore con Linux per creare un semplice NTP server
Questa funzione e' utile nel caso che si abbiano diversi sensori che necessariamente devono lavorare ben sincronizzati ed e' stata necessaria dopo la recente vulnerabilita' di NTP quando l'amministratore di una grande rete a cui mi appoggio ha deciso di tagliare tutto il traffico NTP (senza peraltro avvisare gli utenti)
Era richiesto che il PC ed il telefono fossero collegati via cavo USB (e non via Bluetooth) in modo da non avere perdita di connessione ed in modo anche di alimentare in modo semplice il telefono
a questo punto da shell si forwarda tutto il traffico sul protocollo ADB verso la porta 4352 TCP del calcolatore
adb forward tcp:4352 tcp:4352
per verificare la connessione si puo' usare telnet
telnet localhost 4352
se tutto e' andato a buon fine si dovrebbero passare i messaggi NMEA (anche se non si e' ottenuto il fix del GPS si vedono comunque le stringhe)
a questo punto si puo' installare il demone GPSD
si lancia quindi il demone che ascolta la porta 4352 dopo prima era stato dirottato il trafffico GPS del telefono
gpsd tcp://localhost:4352
per verificare se funziona il demone si puo' usare a linea di comando
cgps -d
mentre in X
xgps
per fare in modo da usare il dato del tempo per il server del tempo si deve installare il demone di NTP
apt-get install ntp
e si modifica il file di configurazione in /etc/ntp.conf
server 127.127.28.0 minpoll 4
fudge 127.127.28.0 time1 0.183 refid NMEA
server 127.127.28.1 minpoll 4 prefer
fudge 127.127.28.1 refid PPS
ntpq -p
Iscriviti a:
Post (Atom)
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...