NMEA 0183
NMEA 0183 (o più comunemente NMEA) è uno standard di comunicazione di dati utilizzato soprattutto in nautica e nella comunicazione di dati satellitari GPS. L'ente che gestisce e sviluppa il protocollo è la National Marine Electronics Association. Questo protocollo si basa sul principio che la fonte, detta talker, può soltanto inviare i dati (sentences) e la ricevente, detta listener, può soltanto riceverli.
Indice |
[modifica] Struttura generale delle sentences
Tutte le sentences hanno una struttura del tipo:
$PREFISSO,dato1,dato2 ... datoN-1,datoN*CHECKSUM
La frase inizia sempre con $ e termina sempre con CR LF. Ogni sentenza è lunga al massimo 80 caratteri.
[modifica] Prefisso
Il prefisso è la prima parte della stringa, che serve a specificare di che tipo è il talker, ad esempio, autopilota, dispositivo GPS, controllo velocità, controllo direzione, ecc.
In caso dell'utilizzo di un dispositivo GPS, il prefisso è GP seguito dal tipo della frase. Tutte le frasi vengono identificate con 3 lettere (es: RMC,RMB, ecc.). Un dispositivo GLONASS utilizza il prefisso GL, mentre un ricevitore GNSS utilizza il prefisso GN
[modifica] Checksum
Il Checksum viene calcolato escludendo il carattere di inizio stringa e il carattere *. L'algoritmo usato è l'exclusive OR 8bit, componendo il risultato in 2 lettere o numeri. La cifra più significativa delle due verrà inviata per prima.
Esempio di funzione per il calcolo del checksum di una stringa NMEA in Python: [1]
def Checksum_NMEA(stringa_input): # Calcolo del checksum in formato NMEA - attenzione, per semplicità le eccezioni non sono gestite payload_start = stringa_input.find('$') + 1 # trova il primo carattere dopo $ payload_end = stringa_input.find('*') # trova il carattere * payload = stringa_input [ payload_start : payload_end ] # dati di cui fare XOR ck = 0 for ch in payload: # ciclo di calcolo del checksum ck = ck ^ ord(ch) # XOR str_ck = '%02X' % ck # trasforma il valore calcolato in una stringa di 2 caratteri return(str_ck)
[modifica] Le frasi
Le frasi sono in totale più di 50, la maggior parte proprietarie di ciascun dispositivo. Le frasi standard e più comuni del protocollo sono:
- $GPRMC
- $GPRMB
- $GPGGA
- $GPGSA
- $GPGLL
- $GPGSV
- $GPRTE