NMEA 0183

Un article de Wikipédia, l'encyclopédie libre.

La norme NMEA 0183 est une spécification pour la communication entre équipements marins, dont les équipements GPS. Elle est définie et contrôlée par la National Marine Electronics Association (NMEA), association américaine de fabricants d'appareils électroniques maritimes, basée à Severna Park au Maryland (États-Unis d'Amérique).

Principe[modifier | modifier le code]

La norme 0183 utilise une simple communication série pour transmettre une "phrase" à un ou plusieurs écoutants. Une trame NMEA utilise tous les caractères ASCII.

Exemple :

Waypoint Arrival Alarm:

$GPAAM,A,A,0.10,N,WPTNME*32

où :

AAM     Arrival alarm
A       Arrival circle entered
A       Perpendicular passed
0.10    Circle radius
N       Nautical miles
WPTNME  Waypoint name
*32     Checksum data

La nouvelle norme, NMEA 2000 (en), permet plusieurs "discussions" avec un débit plus rapide.

La norme est propriétaire et payante. Toutefois, la plus grande partie du protocole a été récupérée grâce à des sources publiques et à l'utilisation de la rétro-ingénierie[1].

Structure des trames[modifier | modifier le code]

Les trames NMEA sont codées au format ASCII et sont de la forme :

$<talker ID><Trame type>[,<données>,<données>]*<checksum>

Décodage :

Champs Longueur Signification
$ 1 Marqueur de début de trame
Talker ID 2 Équipement ayant généré la trame NMEA
Trame type 3 Code identifiant le contenu de la trame
Données variable Charge utile dont le contenu est défini par le "Trame type". Chaque valeur est séparée par le caractère ','
* 1 Séparateur de checksum
Checksum 2 Somme de contrôle générée par un ou exclusif de tous les caractères situés entre '$' et '*' (exclus)
Fin de ligne 2 Caractères "carriage return" + "line feed" marquant un retour à la ligne (<CR><LF> soit <0x0D><0x0A> )

Exemple :

$GPGGA,064036.289,4836.5375,N,00740.9373,E,1,04,3.2,200.2,M,,,,0000*0E

Talker ID[modifier | modifier le code]

Le type d'équipement à l'origine du signal (talker id) est défini par les deux caractères qui suivent le $[2]. Les principaux préfixes sont :

Le préfixe GN est utilisé dans le cas de signaux mixés GPS + GLONASS.

Type de trames[modifier | modifier le code]

La longueur maximale d'une trame est 82 octets (en incluant les caractères de fin de ligne)[3]

Il existe plus d'une trentaine de trames NMEA différentes. Chaque trame a sa syntaxe propre mais selon le cas, elles peuvent ou doivent se terminer, après le caractère '*', par une somme de contrôle. Ce mécanisme permet de vérifier que la trame n'a pas été altérée lors de sa transmission[4].

Un récepteur GPS renvoie souvent plusieurs types de trames complémentaires (les GGA et RMC en sont un exemple) car tous les logiciels qui interprètent le NMEA ne connaissent pas toutes les trames. De même de nombreux GPS transmettent des trames non standardisées propres à leur fabricant (d'habitude ces trames propriétaires ne commencent pas par $GP. Par exemple, «GL» réservé aux GLONASS).

Les trames NMEA font toutes référence à l'ellipsoïde WGS84 comme base de son système de coordonnées.

Quelques exemples de types de trames :

La trame GGA (Global Positioning System Fix Data)[modifier | modifier le code]

Elle est très courante car elle fait partie de celles qui sont utilisées pour connaître la position courante du récepteur GPS.

$GPGGA,064036.289,4836.5375,N,00740.9373,E,1,04,3.2,200.2,M,,,,0000*0E

$GPGGA       : Type de trame
064036.289  9: Trame envoyée à 06 h 40 min 36 s 289 (heure UTC)
4836.5375,N  : Latitude 48,608958° Nord = 48° 36' 32.25" Nord
00740.9373,E,: Longitude 7,682288° Est = 7° 40' 56.238" Est
1            : Type de positionnement (le 1 est un positionnement GPS)
04           : Nombre de satellites utilisés pour calculer les coordonnées
3.2          : Précision horizontale ou HDOP (Horizontal dilution of precision)
200.2,M      : Altitude 200,2, en mètres
,,,,,0000    : D'autres informations peuvent être inscrites dans ces champs
*            : séparateur de checksum
0E           : Somme de contrôle de parité, un simple XOR sur les caractères entre $ et *[4]

La trame RMC (Recommended Minimum Navigation Information)[modifier | modifier le code]

Une autre trame très courante pour les bateaux est la RMC, qui donne l'heure, la latitude, la longitude, la date, ainsi que la vitesse et la route sur le fond mais pas l'altitude.

$GPRMC,053740.000,A,2503.6319,N,12136.0099,E,2.69,79.65,100106,,,A*53

$GPRMC       : type de trame
053740.000  0: heure UTC exprimée en hhmmss.sss : 5 h 37 min 40 s
A            : état A=données valides, V=données invalides
2503.6319    : Latitude exprimée en ddmm.mmmmm: 25° 03.6319' = 25° 03' 37,914"
N            : indicateur de latitude N=nord, S=sud
12136.0099  9: Longitude exprimée en dddmm.mmmmm: 121° 36.0099' = 121° 36' 00,594"
E            : indicateur de longitude E=est, W=ouest
2.69         : vitesse sur le fond en nœuds (2,69 nd = 3,10 mph = 4,98 km/h)
79.65        : route sur le fond en degrés
100106       : date exprimée en jjmmaa : 
,            : déclinaison magnétique en degrés (souvent vide pour un GPS)
,            : sens de la déclinaison E=est, W=ouest (souvent vide pour un GPS)
A            : mode de positionnement A=autonome, D=DGPS, E=DR
*            : séparateur de checksum
53           : somme de contrôle de parité au format hexadécimal[4] 

Notes et références[modifier | modifier le code]

  1. OpenCPN, gpsdecode
  2. NMEA Revealed
  3. « NMEA Revealed », sur gpsd.gitlab.io (consulté le )
  4. a b et c Les caractères suivant le '$' initial jusqu'au '*' final (exclus tous les deux) sont 'xoré' (s ^= *cp++; en 'C') (Ger Rietman, « How to calculate the NMEA checksum »).

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]