Décoder une trame NMEA avec python

Pour mémoire une trame NMEA est une chaîne de caractères dans laquelle est rangé plusieurs champs de données séparés par des virgules :

trame nmea champs

Avec Python il est possible de décoder une trame NMEA.

Préparation de l'environnement python

Pour cette activité, un éditeur en ligne suffit largement comme trinket.io.
Vous vous créez un compte, c'est gratuit.

Pour lancer python 3 :

trinket nvx python3

Pour utiliser l'éditeur :

trinket editeur

Comment analyser une chaîne de caractères constituée de plusieurs champs ?

Dans un premier temps, vous allez copier/coller dans l'éditeur le petit script suivant qui vous explique comment analyser une chaîne de caractères :

#-------traitement des données---------------------------
#création d'une variable texte
eleveTexte="Dupond;Jean;21;16ans"
#découpage de eleveTexte en utilisant les points-virgules
#et en rangeant les différentes parties dans un tableau
#remarque : en python un tableau se nomme une liste
eleveListe=eleveTexte.split(";")

#-------affichage des informations----------------------
#affiche la variable texte
print("variable texte :",eleveTexte)
#affiche le tableau en entier
print("tableau :",eleveListe)
#affiche le 2ème élément du tableau
print("Prénom",eleveListe[1])
#affiche l'age
print("Age : ",eleveListe[3])

Exécuter le script afin de comprendre comment on peut analyser une chaîne de caractères constituée de plusieurs éléments.

Afin de savoir si vous avez compris, ajouter une ligne au script pour afficher la classe et obtenir le résultat suivant :

affiche classe

Comment extraire des caractères d'une chaîne de caractères ?

Le problème qui se pose est que l'heure d'envoi de la trame est une chaîne de caractères comme suit : 073028.314

Comment afficher l'heure sous la forme 07H30mn ?

Il se trouve qu'une chaîne de caractère en python est aussi un tableau dont la 1ère lettre est d'indice 0.

Tester le code suivant avec l'éditeur python dans un nouveau script :

heure="073028.314"
print("heure d'envoi :",heure[0:2],"H ")

Remarque

A noter que la notation python heure[0:2] permet de désigner les caractères de l'indice 0 jusqu'à l'indice 2 exclu.
La notation mathématique vous aidera à comprendre cette phrase : heure[0:2[

Afin de savoir si vous avez compris, modifier la ligne 2 pour afficher l'heure comme suit : 7 H 30 mn

Créer un script python pour décoder une trame NMEA

Maintenant que vous avez compris les deux notions précédentes vous allez créer un autre script qui décode la trame NMEA et qui affiche :

- l'heure d'envoi,

- la latitude,

- la longitude,

- l'altitude.

La première ligne de votre script est la déclaration de la variable trameNmea qui contient la trame que vous avez récupérée sur votre smartphone. A titre d'exemple elle est de la forme GPGGA :

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

Vous testerez bien évidemment votre script afin de vérifier le résultat.