L’Internet des Objets
Chapitre 19 GNSS1A1
Page précédente Page suivante Page précédente Page suivante
La carte X-NUCLEO-GNSS1A1 est une carte de localisation par satellite. On parle actuellement de GNS (Global Navigation System) . Le vieux système GPS (Global Positionning System) est la version des États Unis d’Amérique. Il a été rejoint par les systèmes européens Gallileo, russe (GLONASS) et chinois (Beidou), voire d’autres. Les récepteurs modernes utilisent plusieurs systèmes pour le positionnement.
La documentation est à https://www.st.com/en/ecosystems/x-nucleo-gnss1a1.html.
Nous avons utilisé cette carte comme fille de la WB55 (voir 2.1.1). Nous l’avons manipulé avec l’IDE Arduino. Elle est utilisable directement avec les exemples dédiés : voir https://github.com/stm32duino/X-NUCLEO-GNSS1A1. Les informations peuvent utiliser une connexion IC ou une liaison série. Elle transmet des phrases (sentences) NMEA.
L’association étasunienne National Marine Electronics Association (NMEA) a défini des protocoles permettant l’interconnexion des équipements numériques d’un navire. Ce protocole est relativement simple et fonctionne sur des liaisons série au débit de 4 800b/s. La syntaxe est simple. Une phrase commence par un caractère $, termine par un CRLF classique (retour charriot, saut de ligne). Les champs sont séparés par des virgules. Voici deux phrases :
$GPRMC,100307.000,A,4313.94681,N,00526.50451,E,0.1,0.0,290621,,,D*62 $GPGGA,100307.000,4313.94681,N,00526.50451,E,2,11,0.7,155.46,M,49.2,M,,*62
Sur les systèmes GNU/Linux et similaires, il y a une application, gpsd qui s’interface avec de nombreux matériels de réception et qui fournit l’information à tous les programmes qui le souhaitent, y compris à travers le réseau. Le site fournit beaucoup d’informations, dont des explications sur le protocole NMEA1983 (voir https://gpsd.gitlab.io/gpsd/NMEA.html). Un résumé très simplifié, mais utile est disponible sur : http://sntlebois.e-monsite.com/pages/cartographie-et-localisation-1/ressources/protocole-nmea-0183.html.
Exemple de trame GPRMC
- GP
-
réception d’un signal GPS ;
- RMC
-
informations minimales recommandées (heure, longitude, latitude, date, N ou S, E ou O) ;
- Heure
-
100307.000 = 10h 3mn 7,000s ;
- État
-
A = Valide, V = invalide ;
- Position
-
la position est fournie avec quatre chiffre suivis d’un point, suivi de cinq chiffre et des deux lettre (N ou S) et (W ou E).
Il semble qu’il s’agisse de ddmm.ss,SSS
- dd
-
degrés
- mm
-
minutes
- ss
-
secondes
- SSS
-
partie fractionnaire des secondes
Vers Marseille une seconde équivaut à une vingtaine de mètres (merci pour l’ajout d’une précision).
19.0.1 GNSS et micropython
Nous avons posé ce code sur une WB55 avec la carte fille branchée. Il faut bien faire attention au positionnement des cavaliers pour obtenir une lecture sur l’UART 2.
import uasyncio as asyncio
from machine import UART, I2C # Pour piloter l'UART
import as_GPS
from time import sleep
# Initialisation du contrôleur de bus I2C numéro 1
i2c1 = I2C(1)
# Pause d'une seconde pour laisser à l'I2C le temps de s'initialiser
sleep(1)
uart = UART(2,9600)
fin=999
while (fin != 0):
r = uart.read()
print(r)
fin = fin - 1
sleep(1)
Il y a des lignes en trop dans ce code, mais pour le moment, nous n’en tiendrons pas compte. l’attente de 1 seconde dans la boucle permet de limiter les lectures sans données (elles affichent none).
La commande minicom -D /dev/ttyACM0 -C gnss.log permet de conserver une copie des messages reçus depuis le microcontrôleur. Le fichier produit contient des lignes avec des préfixes :
-
• GNGSA
-
– GN Combination of multiple satellite systems (NMEA 1083)
-
-
• GL :GLONASS
-
– GSV
-
-
• GP Global Positioning System receiver
-
– GLL Geographic Position - Latitude/Longitude
-
– RMC Recommended Minimum Navigation Information
-
– GSV Satellites in view
-
– VTG Track made good and Ground speed
-
-
• PSTMCPU ?? Relatif au CPU ?
-
• GSV - Satellites in view
Et des lignes de chiffres sans préfixes.
En sélectionnant les lignes GPRMC et en sélectionnant les colonnes donnant la longitude et lattitude nous obtenons un fichier de données que gnuplot peut transformer en courbe (figure 19.2).
La documentation technique du capteur Teseo-liv3f (https://www.st.com/resource/en/datasheet/teseo-liv3f.pdf indique qu’il convertit les signaux et est capable de faire du signal augmenté, par exemple en différentiel. Les constellations suivies sont par défaut uniquement GPS et Glonass.
Et je ne sais comment convertir les données lattitudes longitudes en mètres.

