L’activité sera réalisée en deux temps :
Une première partie au cours de laquelle les élèves vont se familiariser avec le contenu de la trame NMEA, et extraire les données de localisation.Une deuxième partie au cours de laquelle le professeur utilise un véritable dispositif GPS et envoie la trame de ce GPS aux dispositifs récepteurs.
Partie 1 : analyse de la trame NMEA1) Format de donnéesa.Principe
Le capteur GPS est un composant électronique qui équipe de nombreux appareils électroniques. Il a pour rôle de décoder les informations transmises par les satellites GPS, de calculer sa position, et de mettre en forme les données, dans une trame NMEA.
La trame NMEA est une suite de caractères mis dans un format particulier (normalisé) pour permettre un échange entre systèmes et logiciels.
On pourra se référer à la page Wikipedia sur la norme [NMEA 0183]( https://fr.wikipedia.org/wiki/NMEA_0183) pour plus de précisions sur l’origine de ce format.
Chaque trame commence par le caractère $. Il est alors suivi d’un groupe de 5 lettres qui identifient l’origine du signal (2 lettres), et le type de trame (3 lettres).
Toutes les trames ne contiennent pas les mêmes informations. Nous ne pourrons interpréter que celles dont les 5 lettres sont GPGGA.
Voici un exemple de trame GPGGA :
$GPGGA,163221.000,4854.8644,N,00219.4940,E,2,9,0.94,52.1,M,47.3
Observons celle-ci :
Cette trame contient des données de type texte (str en Python), et numérique (float en Python). Les séparateurs entre données sont les virgules. Les séparateurs décimaux sont les points.
Elle fournit les informations suivantes :
- Horloge: 16h 32m 21s
- Latitude: 4854.8644 N
- Longitude: 219.4940 E
- Nombre de satellites utilisés: 9
- Altitude: 52.1 m
Comment extraire ces informations de la trame ?
Le script ci-dessous est fourni aux élèves. C’est un extrait du script
NMEA.py fourni dans le dossier de l’activité.
Ce script apporte deux fonctions, split et depil, dont le contenu n’est pas au programme de la classe de SNT.
La trame NMEA est constituée d’une longue chaine de caractères, et ressemble ainsi au message que recevront les élèves dans la partie 2.

Dans le script, lorsque l’on appelle la fonction split avec pour argument nmeasplit(nmea)
La fonction va découper la chaîne de caractère nmea au niveau des séparateurs entre données (à chaque virgule).
Les morceaux de chaîne de caractère générés sont alors mis dans la liste L.
Cette liste a alors le contenu :
L = =["GPGGA","163221.000","4854.8644","N","00219.4940","E","2","9","0.94","52.1","M","47.3"]
Les trois dernières lignes vont stocker dans une nouvelle liste nmeaLIST les seules valeurs de la liste L aux rangs 1, 2 et 4. Ces données sont transformées en type float dans la liste nmeaLIST.
b. Un format numérique particulier
- Latitude: 4854.8644 N
- Longitude: 219.4940 E
Mais attention au format numérique des données de position qui est très particulier :
Les latitudes et longitudes sont exprimées en degrés et minutes d’arc, mais avec un séparateur (point) qui correspond à la partie décimale des minutes. Les nombres sont exprimées sous la forme : DDMM.MMMM
Le premier ou les deux premiers chiffres correspondent au degrés. Les deux suivants, à la partie entière des minutes d’arc. Après le séparateur viennent les chiffres de la partie décimale des minutes.
L’idée sera alors de transformer cette valeur en une notation décimale, du type :DD.DDDDDD.
pour l’exemple précédent :
La latitude (Nord) est exprimée avec la série de chiffres 4854.8644
La partie entière des degrés est alors 48, soit 48°.
Pour définir cette valeur, on peut traiter le nombre 4854.8644 de la manière suivante :
partie entiere4854.8644/100=48
Nous pourrions stocker cette valeur, 48 dans la variable deg
Et le résultat de 4854.8644/100 dans une autre variable, que l’on nommera l :
l= 4854.8644/100= 48.548644
D’après ce qui précède, les minutes d’angles sont alors 54.8644 minutes.
Pour obtenir cette valeur à partir de 4854.8644 :=l-deg×100 =54.8644
Avec la correspondance : 60 minutes = 1 degrés, on convertit cette valeur en degrés de la manière suivante :
decim= 54.8644 /60=0.914407
La valeur convertie en degrés vaut alors : deg+decim=48.914407°
Travail attendu des élèves :
- à partir de l’algorithme de calcul de la latitude ou longitude en degrés, à partir d’une données en format hybride DDMM.MMMM, compléter la fonction suivante. Cette fonction prendra en paramètre la donnée issue de la trame NMEA pour la latitude ou longitude (format hybride), et devra retourner une valeur en notation décimale DD.DDDDDD
def conversion(latlon): l=latlon/100 ... ... ... ... return . . .
- puis appeler cette fonction pour convertir les valeurs des longitude et latitude, stockées dans la liste nmeaLIST. (on écrira les deux instructions avant de parcourir le script donné, NMEA.py)
- tester enfin le programme NMEA.py. Après execution du programme, explorer depuis le shell Python de la calculatrice les differentes variables et listes, accessibles avec la touche (var) de la calculatrice.
Partie 2 : Géolocalisation1) PrincipeLe dispositif émetteur émet la trame NMEA transmise par son module GPS. Cette trame, issue d’un unique dispositif dans la classe est ensuite envoyée par ondes radio aux dispositifs récepteurs (les élèves).
2) Le dispositif émetteurLa carte microbit émettrice sera insérée dans le shield Grove. Le capteur Grove GPS sera branché sur le port PIN0 du shield.
C’est le module GPS qui envoie les caractères de la trame NMEA à la carte microbit, selon une transmission série sur le port PIN0.Actuellement, la lecture série n’est pas implémentée dans la librairie microbit pour la calculatrice TI-83.
Cette carte sera donc reliée à un ordinateur. On utilisera un IDE en micropython pour programmer cette carte. Cet éditeur vous fournira un fichier d’extension .hex qu’il faudra charger sur la carte microbit.
Nous vous conseillons d’utiliser l’éditeur en ligne du site Vittascience.com, qui devrait vous faciliter les manipulations d’édition et de chargement sur la carte :
https://fr.vittascience.com/microbit/?console=bottom&toolbox=vittascience&mode=codeVoici pour information le script en micropython utilisé pour générer le fichier .hex, à charger sur cette carte : il s’agit du script maitreGPS2.py du dossier de l’activité.

Les données générées par le capteur GPS ne sont pas toutes bien formatées. Pour réduire les données à transmettre il a fallu démarrer la lecture à partir du caractère G, comme pour GPGGA par exemple.C’est ce qui est réalisé par la fonction clean, qui retourne la chaine de caractères correspondant à la trame. Cette chaine est stockée dans la variable nmea. Elle est alors transmise par message radio.
La transmission radio a donc lieu uniquement lorsqu’une trame est interceptée dans le bon format parmi les caractères issus du capteur GPS. L’affichage LED du microbit émetteur est alors “1“.
Lorsqu’il n’y a pas de trame interceptée, l’affichage LED du microbit émetteur est alors “0“.
3) Le dispositif récepteurLe récepteur est constitué d’une carte microbit reliée à la calculatrice.Le programme à charger sur la calculatrice diffère légèrement du programme vu dans la partie 1 car il faudra maintenant :
- Ecouter la transmission radio
- Relever les trames NMEA issues de l’émetteur
- Réaliser le traitement sur ces trames.
La modification va essentiellement porter sur la réception du signal. Voici le script minimal qui permettra ceci, sans en réaliser le traitement :

Ce script peut être saisi par les élèves dans un nouveau programme. On pourra néanmoins charger le script complet mis dans le dossier de cette activité : NMEA1.py
4) Intérêt et limitationsLorsque l’on réalise l’expérience, avec l’émetteur qui envoie les différentes trames reçues aux récepteurs, on constate que ces trames sont de formats bien différents.Elle diffèrent selon la nature des 5 caractères initiaux. (voir début avec l’explication sur le format de données). Seule la trame GPGGA est dans le bon format pour notre programme de traitement.
L’activité complète devrait permettre, une fois la trame reçue d’extraire les informations de position et de traiter les données, comme vu dans la partie 1.
Les élèves pourraient laisser défiler les différentes trames qui s’affichent sur la calculatrice, et sélectionner celle qui commence par GPGGA en appuyant sur la touche (ON).
Les traitements seraient alors effectués sur la chaine de caractère nmea.
Cela n’est malheureusement pas possible car la longueur maximale du message émis ne peut pas contenir suffisamment de caractères.
L’intérêt de cette partie réside toutefois dans la réalisation d’une véritable acquisition de la trame NMEA, et de sa présentation sur les calculatrices des élèves (incomplète).