NMEA 0183 è uno standard utilizzato soprattutto in nautica e nella comunicazione di dati satellitari GPS. L'ente che sviluppa e gestisce il protocollo è la National Marine Electronics Association.

Struttura generale delle sentences modifica

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 frase è lunga al massimo 80 caratteri.

Prefisso modifica

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

Checksum modifica

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)

Le frasi modifica

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

Note modifica

Collegamenti esterni modifica