9.0 KiB
Lire les données GPS - Raspberry Pi
Dans cette partie de la leçon, vous allez ajouter un capteur GPS à votre Raspberry Pi et lire les valeurs qu'il fournit.
Matériel
Le Raspberry Pi nécessite un capteur GPS.
Le capteur que vous utiliserez est un capteur Grove GPS Air530. Ce capteur peut se connecter à plusieurs systèmes GPS pour obtenir une localisation rapide et précise. Le capteur est composé de deux parties : l'électronique principale du capteur et une antenne externe reliée par un fil fin pour capter les ondes radio des satellites.
C'est un capteur UART, il envoie donc les données GPS via UART.
Connecter le capteur GPS
Le capteur GPS Grove peut être connecté au Raspberry Pi.
Tâche - connecter le capteur GPS
Connectez le capteur GPS.
-
Insérez une extrémité d'un câble Grove dans la prise du capteur GPS. Il ne peut être inséré que dans un seul sens.
-
Avec le Raspberry Pi éteint, connectez l'autre extrémité du câble Grove à la prise UART marquée UART sur le Grove Base Hat attaché au Pi. Cette prise se trouve sur la rangée du milieu, du côté le plus proche du slot pour carte SD, à l'opposé des ports USB et de la prise Ethernet.
-
Positionnez le capteur GPS de manière à ce que l'antenne attachée ait une visibilité sur le ciel - idéalement près d'une fenêtre ouverte ou à l'extérieur. Il est plus facile d'obtenir un signal clair sans obstacle devant l'antenne.
Programmer le capteur GPS
Le Raspberry Pi peut maintenant être programmé pour utiliser le capteur GPS connecté.
Tâche - programmer le capteur GPS
Programmez l'appareil.
-
Allumez le Pi et attendez qu'il démarre.
-
Le capteur GPS dispose de 2 LED : une LED bleue qui clignote lorsque des données sont transmises, et une LED verte qui clignote toutes les secondes lorsqu'il reçoit des données des satellites. Assurez-vous que la LED bleue clignote lorsque vous allumez le Pi. Après quelques minutes, la LED verte devrait clignoter - si ce n'est pas le cas, vous devrez peut-être repositionner l'antenne.
-
Lancez VS Code, soit directement sur le Pi, soit en vous connectant via l'extension Remote SSH.
⚠️ Vous pouvez vous référer aux instructions pour configurer et lancer VS Code dans la leçon 1 si nécessaire.
-
Avec les versions plus récentes du Raspberry Pi qui prennent en charge le Bluetooth, il existe un conflit entre le port série utilisé pour le Bluetooth et celui utilisé par le port UART Grove. Pour résoudre ce problème, procédez comme suit :
-
Depuis le terminal de VS Code, éditez le fichier
/boot/config.txt
en utilisantnano
, un éditeur de texte intégré au terminal, avec la commande suivante :sudo nano /boot/config.txt
Ce fichier ne peut pas être modifié par VS Code car vous devez l'éditer avec des permissions
sudo
, des permissions élevées. VS Code ne fonctionne pas avec ces permissions. -
Utilisez les touches de direction pour naviguer jusqu'à la fin du fichier, puis copiez le code ci-dessous et collez-le à la fin du fichier :
dtoverlay=pi3-miniuart-bt dtoverlay=pi3-disable-bt enable_uart=1
Vous pouvez coller en utilisant les raccourcis clavier normaux de votre appareil (
Ctrl+v
sur Windows, Linux ou Raspberry Pi OS,Cmd+v
sur macOS). -
Enregistrez ce fichier et quittez nano en appuyant sur
Ctrl+x
. Appuyez sury
lorsqu'on vous demande si vous voulez enregistrer le tampon modifié, puis appuyez surEntrée
pour confirmer que vous voulez écraser/boot/config.txt
.Si vous faites une erreur, vous pouvez quitter sans enregistrer, puis répéter ces étapes.
-
Éditez le fichier
/boot/cmdline.txt
dans nano avec la commande suivante :sudo nano /boot/cmdline.txt
-
Ce fichier contient plusieurs paires clé/valeur séparées par des espaces. Supprimez toutes les paires clé/valeur pour la clé
console
. Elles ressembleront probablement à ceci :console=serial0,115200 console=tty1
Vous pouvez naviguer jusqu'à ces entrées à l'aide des touches de direction, puis les supprimer en utilisant les touches
del
oubackspace
.Par exemple, si votre fichier original ressemble à ceci :
console=serial0,115200 console=tty1 root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
La nouvelle version sera :
root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
-
Suivez les étapes ci-dessus pour enregistrer ce fichier et quitter nano.
-
Redémarrez votre Pi, puis reconnectez-vous dans VS Code une fois le Pi redémarré.
-
-
Depuis le terminal, créez un nouveau dossier dans le répertoire personnel de l'utilisateur
pi
appelégps-sensor
. Créez un fichier dans ce dossier appeléapp.py
. -
Ouvrez ce dossier dans VS Code.
-
Le module GPS envoie des données UART via un port série. Installez le package Pip
pyserial
pour communiquer avec le port série depuis votre code Python :pip3 install pyserial
-
Ajoutez le code suivant à votre fichier
app.py
:import time import serial serial = serial.Serial('/dev/ttyAMA0', 9600, timeout=1) serial.reset_input_buffer() serial.flush() def print_gps_data(line): print(line.rstrip()) while True: line = serial.readline().decode('utf-8') while len(line) > 0: print_gps_data(line) line = serial.readline().decode('utf-8') time.sleep(1)
Ce code importe le module
serial
du package Pippyserial
. Il se connecte ensuite au port série/dev/ttyAMA0
- c'est l'adresse du port série utilisé par le Grove Pi Base Hat pour son port UART. Il efface ensuite toutes les données existantes de cette connexion série.Ensuite, une fonction appelée
print_gps_data
est définie pour afficher dans la console la ligne qui lui est transmise.Ensuite, le code boucle indéfiniment, lisant autant de lignes de texte que possible depuis le port série à chaque itération. Il appelle la fonction
print_gps_data
pour chaque ligne.Une fois toutes les données lues, la boucle attend 1 seconde, puis recommence.
-
Exécutez ce code. Vous verrez la sortie brute du capteur GPS, quelque chose comme ceci :
$GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 $GPGSA,A,1,,,,,,,,,,,,,,,*1E $BDGSA,A,1,,,,,,,,,,,,,,,*0F $GPGSV,1,1,00*79 $BDGSV,1,1,00*68
Si vous obtenez l'une des erreurs suivantes en arrêtant et redémarrant votre code, ajoutez un bloc
try - except
à votre boucle while.UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 0: invalid start byte UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in position 0: invalid continuation byte
while True: try: line = serial.readline().decode('utf-8') while len(line) > 0: print_gps_data() line = serial.readline().decode('utf-8') # There's a random chance the first byte being read is part way through a character. # Read another full line and continue. except UnicodeDecodeError: line = serial.readline().decode('utf-8') time.sleep(1)
💁 Vous pouvez trouver ce code dans le dossier code-gps/pi.
😀 Votre programme pour le capteur GPS a été un succès !
Avertissement :
Ce document a été traduit à l'aide du service de traduction automatique Co-op Translator. Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.