Hé! Vous semblez être en United States, souhaitez-vous utiliser notre site English ?
Switch to English site
Skip to main content

Ajouter un GPS à un projet Raspberry Pi

HATPi_fb6ac3dc4797e368705b9b03f9cac6db6590f0f6.jpg

L'ajout d'un récepteur GPS à un Raspberry Pi lui offre des capacités à la fois de localisation et d'indication hautement précise de l'heure. Ceci est idéal lorsque vous avez besoin de déterminer l'emplacement d'un équipement en mouvement et dans le cas de systèmes nécessitant une synchronisation précise de l'heure.

Le GPS Adafruit Ultimate HAT facilite significativement l'ajout de fonctions GPS à un Raspberry Pi, avec en prime l'intégration d'une horloge en temps réel munie d'une batterie de secours et d'une zone de prototypage.

Dans cet exemple, nous avons monté un Raspberry Pi 3 modèle B (896-8660) et un GPS Adafruit Ultimate HAT (124-5481) dans un boîtier à monter sur rail DIN de Phoenix Contact (122-4298) , même s'ils auraient pu aisément être installés dans n'importe quel boîtier d'un espace suffisant pour accueillir l'association Pi + HAT.

Assemblage

HATPiAssembled_5c140f2f6021a517036d19d071a6d7f008c9d311.jpg

Le seul montage possible pour le GPS Hat en lui-même est de souder les embases à montage traversant. À la suite de quoi le HAT est connecté à l'embase P1 du Pi.

EnclosureComponents_d49b12a2221a86a5ab5b7142b1e99e6a03665794.jpg

Les différentes pièces du boîtier sont visibles ci-dessus.

EnclosureSMA_bd198d5fb507ecd52fdac4f648cadf9c81d4dc21.jpg

La partie inférieure du boîtier a été percée dans le coin supérieur gauche afin de permettre la fixation d’un cordon muni d'une embase femelle SMA et d’une fiche U.FL mâle (794-2897) . Le module GPS comporte bien une antenne intégrée, mais dans le cas où celui-ci n'est pas placé à ciel ouvert, ou si le récepteur siège à l'intérieur d'un boîtier en métal, une antenne externe est indispensable.

PiCoax_3dec1c38638165a521067510a315c48a7a56f410.jpg

L'U.FL a été connecté au HAT et le boîtier assemblé.

AssembledGPSPi_1d0a4eeda1c9b6138e4c1597bb1eb3b7c486a524.jpg

Pour les tests, une antenne GPS de RF Solutions (704-3464) a été placée sur la vitre.

GPSAntenna_ee2fa9e37469586228b543e7fe3d805d3f930315.jpg

Configuration du système d'exploitation

ntpi_devser_78742f41425466516099532d0dd50a33726983b9.jpg

Une distribution complète du bureau Linux n'est pas nécessaire ; la variante dite "lite" de Raspbian Jessie suffira amplement. Celle-ci a été écrite sur une carte microSD (121-3897) avec :

$ sudo dd if=2017-01-11-raspbian-jessie-lite.img of=/dev/mmcblk0 bs=4M

Notez que les paramètres du nom du fichier d'entrée (if) varieront au fur et à mesure de la sortie des nouvelles versions de l'image Raspbian Lite. De la même manière, il est possible que les paramètres du fichier de sortie (of) soient différents selon la distribution Linux ou le matériel de carte SD utilisé. Il va de soi que les utilisateurs Windows peuvent utiliser leurs outils habituels pour inscrire l'image du système d'exploitation sur la carte microSD.

Dans le cas où un écran n'est pas indispensable, je préfère de loin travailler sur les projets Raspberry Pi via SSH. Puisque SSH est désormais désactivé par défaut, il est possible de le réactiver en créant un fichier vide nommé "ssh" sur la partition d'utilisation de la carte. Cette opération peut être réalisée avec la carte insérée dans une autre machine (par exemple, celle utilisée pour l'écriture) ou bien avec la carte insérée dans le Pi utilisé. Démarrez-le normalement, avec clavier et écran connectés, puis saisissez ce qui suit dans l'invite de commande :

sudo touch /boot/ssh

Après réinitialisation, il devrait désormais être possible de se connecter via SSH, puisqu'au démarrage le Pi cherchera le fichier ssh. S'il trouve effectivement le fichier, ssh sera activé.

Avec Raspberry Pi 3, la configuration par défaut prévoit l'utilisation de l'UART matériel (port série) par Bluetooth ainsi que la possibilité d'avoir recours à un port série logiciel moins performant, ou "mini-UART", pour l'utilisation générale. Puisque le Bluetooth n'est pas nécessaire, nous échangerons ces deux paramètres. Mais dans un premier temps, il nous faut exécuter raspi-config et désactiver les ports série.

$ sudo raspi-config

Options d’interface P5 → P6 série (désactiver).

Ceci permet d'empêcher que les messages de démarrage ne soient envoyés au port série et d'activer à leur place le service de connexion.

Ensuite, nous activons l'UART et forçons l'utilisation du mini-UART par Bluetooth en ajoutant les lignes suivantes à /boot/config.txt :

enable_uart=1

dtoverlay=pi3-miniuart-bt

Après réinitialisation, nous pouvons vérifier que /dev/serial0 pointe vers l'UART matériel (AMA0) et serial1 vers l'UART logiciel (S0) grâce à :

pi@ntpi:~ $ ls -l /dev/ser*

Test initial

ntpi_cat_ttyAMA0_c0d5b26b7d4a7ef7166ebeb72165debc9718774f.jpg

Lors du test, nous avons suivi le guide Adafruit, mais nous avons remarqué qu'il était possible d'obtenir la sortie du débogage à partir du port série sans exécuter stty au préalable pour le configurer, alors que si nous l'exécutions pour paramétrer les options spécifiées, ce n'était pas le cas. Autrement dit, pour vérifier que nous recevons bien des données provenant du module GPS, il convient d'utiliser simplement :

$ cat /dev/ttyAMA0

Et si tout se passe comme prévu, une sortie similaire à celle visible sur la capture d'écran ci-dessus devrait s'afficher. En revanche, la présence de nombreuses virgules avec des champs vides pourrait indiquer l'absence de coordonnées GPS.

Notez également qu'à l'heure actuelle, le guide Adafruit indique que le GPS Ultimate HAT est incompatible avec le Raspberry Pi 3, mais ceci peut être contourné au moyen de la config UART susmentionnée.

À ce stade, une application pourrait faire un usage direct des données produites par le récepteur GPS, qui ne correspondent à rien d'autre que du texte formaté en "phrases NMEA" standard. Des bibliothèques sont même disponibles pour faciliter amplement leur interprétation, c'est notamment le cas de pynmea pour Python.

gpsd

ntpi_gpsmon_80e2f4e31b7ee9f7821844813a79c843dcb19d13.jpg

gpsd est décrit comme "un service daemon qui surveille un ou plusieurs GPS ou récepteurs SIA connectés à un ordinateur hôte au moyen de ports série ou USB, permettant ainsi à toutes les données relatives à l'emplacement/la trajectoire/la vitesse des capteurs disponibles d'être demandées sur le port TCP 2947 de l'ordinateur hôte.

Avec gpsd, plusieurs applications client dotées de la localisation peuvent partager l'accès aux capteurs pris en charge sans aucun conflit ou perte de données. En outre, gpsd répond aux demandes dans un format bien plus simple à analyser que le format NMEA 0183 émis par la plupart des GPS."

gpsd peut être utilisé pour rendre les données GPS accessibles aux applications sur l'ensemble du réseau et offre une abstraction simple du matériel sous-jacent. Il est pris en charge par un certain nombre d'applications, parmi lesquelles la navigation GPS et les logiciels de détection et de cartographie des réseaux sans fil.

Gpsd peut être installé via :

$ sudo apt-get update

$ sudo apt-get install gpsd gpsd-clients python-gps

Pour la configuration, il convient d'éditer /etc/default/gpsd et de modifier les lignes USBAUTO, DEVICES et GPSD_OPTIONS comme suit :

USBAUTO="false"

DEVICES="/dev/ttyAMA0"

GPSD_OPTIONS="-n"

Pour permettre son lancement au démarrage, un changement minime de Raspbian Jessie est requis :

$ sudo ln -s /lib/systemd/system/gpsd.service /etc/systemd/system/multi-user.target.wants/

Nous pouvons maintenant le lancer avec :

$ sudo service gpsd start

Puis le tester avec :

$ gpsmon

Ceci devrait entraîner le lancement d'une application sur borne et l'affichage d'une sortie similaire à celle visible sur l'image ci-dessus.

À ce stade, nous pourrions utiliser le récepteur GPS avec une application existante capable de prendre en charge gpsd, ou bien en développer une nouvelle qui utiliserait son interface simple.

pps

ntpi_ppstest_115555b3d9fc08db4b8e97b50b766ab304b8ea9f.jpg

L'un des plus grands avantages de ce HAT est qu'il produit non seulement des données NMEA, mais également un signal PPS (impulsion par seconde) depuis le GPS. Quel intérêt à cela lorsqu'on peut extraire l'heure à partir des phrases NMEA en sortie ? Eh bien, le texte ASCII est loin d'être la manière la plus efficace de transmettre des informations ; dans notre cas, il est également envoyé vers un port série relativement lent et le système d'exploitation va lui aussi souffrir de quelques lenteurs.

Heureusement, le signal PPS émis par le module GPS peut être échantillonné via le port GPIO du Raspberry Pi. En outre, le noyau Linux offre même une prise en charge de l'accès via le circuit /dev/pps0. Les applications peuvent ainsi utiliser les données NMEA en conjonction avec le signal PPS pour obtenir une heure d'une précision remarquablement élevée au regard du prix de l'équipement utilisé.

Pour accéder au PPS, il nous faut installer le logiciel pps-tools avec :

$ sudo apt-get install pps-tools

Ajoutez une autre ligne au fichier /boot/config.txt pour configurer correctement le noyau Linux :

dtoverlay=pps-gpio,gpiopin=4

Après réinitialisation, nous pouvons alors tester :

$ sudo ppstest /dev/pps0

Ceci devrait produire une sortie similaire à celle visible sur l'image ci-dessus.

Serveur NTP

NTF_Logo_f3e1a0d939630d3af388d4d791b6b64ed4fa1786.jpg

NTP est développé par Network Time Foundation

Enfin, la fonction GPS sur Raspberry Pi se révèle particulièrement utile pour créer un serveur distribuant l'heure aux clients du réseau local qui utilisent le Network Time Protocol (NTP). Le logiciel ntpd utilisé à cet effet est d'une incroyable flexibilité et peut collecter l'heure sur Internet à partir de serveurs NTP "pairs" à condition qu'une connexion soit disponible. Par ailleurs, il peut également obtenir l'heure depuis le GPS via NMEA et/ou PPS, parmi d'autres sources, au moyen d'algorithmes intelligents et modulables qui sélectionnent la meilleure source temporelle parmi celles disponibles au moment voulu.

NTP représente à lui seul un tout autre sujet, et sa configuration dépend de son utilisation spécifique. En revanche, beaucoup d'informations utiles sont disponibles sur le site web de David Taylor.

Quelques éléments à garder à l'esprit si vous optez pour NTP :

  • Le logiciel NTP fourni par Raspbian devra être remplacé par une compilation des sources (ce qui n'est pas d'une grande difficulté)
  • Le ntpd peut obtenir des informations temporelles directement depuis le module GPS (via /dev/ttyAMA0) ou être configuré afin de recevoir des données via gpsd
  • Configurer NTP suffisamment finement pour obtenir des performances optimales peut demander un certain temps

Conclusion

Le GPS Ultimate Hat est un moyen rapide et simple d'ajouter aux projets Raspberry Pi les fonctions de localisation et d'indication de l'heure haute précision, sans compter que les manières de procéder à son installation sur des applications et d'autres circuits connectés en réseau ne manquent pas.

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.
DesignSpark Electrical Logolinkedin