Trame NMEA

Un récepteur GPS crée une chaîne de caractères, appelée trame, à partir des informations issues des satellites. Celle-ci a une structure imposée par une norme appelée NMEA-0183.

Comment convertir la trame fournie par le GPS en informations de géolocalisation ?

La structure d'une trame NMEA produite par un GPS

La norme NMEA détermine dans quel ordre sont placées les informations issues des satellites et sous quelle forme elles sont enregistrées.

Pour lire les informations comprises dans la trame, il est nécessaire de connaître ces règles d'écriture. Les données, comme l'heure, la latitude ou la longitude, sont placées dans des champs séparés par des virgules comme dans l'exemple suivant :

  • $GPGGA,073028.314,2514.3215,N,00819.1214,E,1,04,2.1,238.5,M,,,,0000*43

L'enregistrement d'une trame NMEA

Le GPS produit des trames NMEA[1] en permanence et les enregistre ou les envoie par réseaux. Il est possible de les récupérer grâce à des applications sur smartphone.

Ci-dessous :Trames NMEA envoyées par un GPS et enregistrées grâce à une application

Exemple

  • Donner la latitude, la longitude et l'heure sur la première trame NMEA de l'image ci-dessus.

Couper un texte en Python

Pour récupérer les informations à partir d'une trame NMEA, il est nécessaire de la « décoder », c'est-à- dire de séparer les champs et de les traduire.

Ceci peut être automatisé en appliquant un algorithme comme celui ci-contre

Couper un texte en Python

L'instruction split en Python permet de couper une chaîne de caractères en précisant le séparateur. Pour récupérer ensuite les morceaux, il suffit de préciser la position (comptée à partir de 0) de la donnée recherchée entre crochets.

Je comprends un programme

1
Trame="$GPGGA,12241.000,2135.3214,N,00740.9373,E,1,04,3.2,200.2,M,,,,0000*32"
2
Champs=Trame.split(",")
3
print(Champs[0])
4
print(Champs[l])
5
print(Champs[2])
6

Coup de pouce Python

  • La ligne 1 enregistre la trame en chaîne de caractères dans la variable Trame.

  • La ligne 2 découpe la trame à chaque virgule. La liste des champs obtenus est alors enregistrée dans la variable Champs.

  • La ligne 3 permet l'affichage du premier champ, ici : $GPGGA

  • La ligne 4 permet l'affichage du deuxième champ, ici : 12241.000

  • La ligne 5 permet l'affichage du troisième champ, ici : 2135.3214

Exemple

  • Comment programmer l'étape « Vérifier qu'il s'agit d'une trame de GPS » ?

  • À quelle étape de l'algorithme ci-dessus fait-on intervenir un programme qui utilise l'instruction split ?

  • Comment récupérer la latitude, la longitude et l'altitude d'une trame NMEA à l'aide d'un programme en Python ?

CONCLUSION.

  • Quelles sont les informations présentes dans une trame NMEA ? Comment peut-on les extraire ?