OPiTracker [Ep. 09] – Configuration du GPS

OPiTracker [Ep. 09] – Configuration du GPS

Au programme de cette épisode la configuration du GPS au niveau du système d’exploitation.

Nous fabriquons un tracker APRS à base de Direwolf, ce qui implique que ce dernier devra communiquer avec un récepteur GPS. Plutôt que d’interfacer Direwolf directement avec le GPS nous utiliserons le logiciel GPSd.

Préparation de l’Orange Pi

Placez la carte d’extension USB sur l’Orange Pi comme sur les images ci-dessous et branchez y la souris GPS. Le port que vous allez utiliser n’a que peu d’importance.

Les souris GPS contiennent le plus souvent un convertisseur série RS232/USB et apparaissent donc au niveau du système d’exploitation comme une port série. Pour vérifier, que le GPS a bien été détecté par le système on peut utiliser deux commandes.

Le première est lsusb qui est tout simplement l’abréviation de « list usb » et qui va donc lister tout les périphériques USB connectés.

lsusb

Une fois la commande saisie, on regarde si on voit la ligne « U-Box AG [u-blox 7] ». Ceci correspond au GPS livré dans le kit.

Le fait que le bus USB ai bien détecté la souris GPS n’implique pas forcément que le port série virtuel a été correctement créé, dans 99.9% des cas il l’est, mais nous allons nous en assurer avec une commande. Mais d’abord une petite explication sur la gestion du matériel sous Linux.

Dans un système Linux tout ou presque est visible comme un fichier. Contrairement à Windows ou tout est alambiqué, énormément de périphériques sont visibles comme de simple fichiers.

Les ports série n’échappent pas à ce principe. On trouvera donc tous les ports série physiques dans le dossier /dev ils auront des noms sous la forme ttySx où x est un chiffre commençant à 0. Le premier port sera ttyS0, le second ttyS1 etc. ces ports sous Windows seraient COM1, COM2 … etc. Les ports virtuels comme celui de notre souris USB se nommeront soit ttyUSBx ou ttyACMx où x est également un chiffre démarrant à 0. Il peut arriver que si on branche deux convertisseurs USB/Série que les numéros s’interchangent entre les deux ports à chaque démarrage. Il y a moyen de fixer cela, mais comme nous ne branchons qu’un seul convertisseur USB/Serie nous verrons ça lors d’un article ultérieur.

Comme les ports série apparaissent dans le dossier /dev on peut les lister très simplement avec la commande ls (abréviation de list) qui sert à lister les fichier d’un répertoire.

Listons les ports série natifs. L’asterisque est un joker et indique à la commande ls de lister tout les fichier dont le nom commence par ttyS.

ls /dev/ttyS*

Sur la même principe, nous pouvons lister les ports série virtuels. On remplacera ttyACM* par ttyUSB* suivant quel variante on attend.

ls /dev/ttyACM*

Bien entendu, pour notre projet, c’est surtout la second commande qui nous intéresse. Si elle ne retourne rien, c’est que le port série virtuel n’a pas été crée.

Les commandes en images

Présentation rapide de GPSd

GPSd pour « GPS daemon » est un logiciel qui tourne en tâche de fond. Dans le jargon Linux, un programme tournant en tâche de fond est appelé un service ou un démon.

GPSd permet de partager un récepteur GPS entre plusieurs programmes, en effet un récepteur GPS ne peu être utiliser que par un seul programme à la fois. Un autre atout, il est capable d’utiliser quasiment tous les protocoles GPS présents sur le marché et de présenter une interface unifiée aux logiciels souhaitant bénéficier de fonctionnalités GPS. En d’autres termes, vous avez un GPS qui cause en protocole NMEA, Garmin, SIRFstar ou autre? Pas de soucis GPSd sait gérer et convertira chaque protocole dans un protocole unifié.

Installation et configuration de GPSd

Pour installer GPSd cela se passe via le gestionnaire de paquets apt qui devrait vous être familier à présent. Nous allons installer GPSd ainsi que quelques utilitaires afin de vérifier son bon fonctionnement, via la commande suivante:

sudo apt install gpsd gpsd-clients

Le tout en images:

Nous allons ensuite configurer gpsd, pour cela nous allons éditer son fichier de configuration. Nous allons lui dire quel port série utiliser et aussi lui dire d’initialiser le récpteur GPS dès le démarrage de l’Orange Pi et non au moment où une application fait la demande de fonctionnalités GPS.

Comme d’habitude nous allons utiliser l’éditeur nano en combinaisons avec sudo.

sudo nano /etc/default/gpsdLangage du code : JavaScript (javascript)

Éditons la ligne DEVICES GPSD_OPTIONS tel que montré dans les captures d’écrans ci-dessous.

Une fois le fichier de configuration édité, nous devons redémarrer le service GPSd, ceci se fait via la commande suivante:

sudo systemctl restart gpsd.serviceLangage du code : CSS (css)

La commande systemctl, qui fait partie de systemd (l’architecture en charge de gérer les services et démons) sera vue plus en détail dans un prochain épisode. En cas de succès, cette commande n’affiche absolument rien. Néanmoins afin d’être certain que GPSd a bien redémarré, nous allons interroger le status du service.

sudo systemctl status gpsd.serviceLangage du code : CSS (css)

Si des lignes rouges s’affichent c’est que vous avez une erreur dans votre fichier de configuration!

Testons maintenant la communication de GPSd avec le monde éxterieur. Ca tombe bien, au début de cette épisode nous avons installés quelques clients GPSd qui vont nous permettre de visualiser les informations de notre GPS.

Lançons l’utilitaire cgps avec la commande suivante:

cgps

cgps va se connecter à GPSd et récupérer les informations de position pour nous les afficher. Si vous voyez votre position tout est bon.

Pour quitter cgps, appuyer sur CTRL et C.

Mise à l’heure via le GPS

Le Orange Pi ne possède pas d’horloge temps réel. L’horloge est synchronisée par Armbian via des serveurs ntp. Dans 99% des cas, notre tracker n’aura pas d’accès réseau et son horloge ne sera jamais mise à l’heure. Ça tombe bien, nous avons à notre disposition un GPS qui nous donne une heure très précise, utilisons donc GPSd pour synchroniser l’horloge de notre Orange Pi!

Armbian est livré avec systemd-timesync qui est un service de synchronisation de temps (ntp) assez léger et basique. Il ne sait que communiquer avec des serveurs ntp et non avec GPSd. Nous allons donc le désactiver et installer le paquet ntp qui sait faire les deux.

Stoppons et désactivons systemd-timesync avec ces deux commandes.

sudo systemctl stop systemd-timesync
sudo systemctl disable systemd-timesync

Comme mentionné plus haut, la commande systemctl sera vu plus en détail dans un prochain épisode.

Une fois systemd-timesync désactivé, installons ntp. Comme vous vous en doutez, ça se passe via le gestionnaire de paquets apt.

sudo apt install ntp

Une fois fait il ne nous reste plus qu’à configurer ntp pour qu’il utilise GPSd comme source de temps. Pour cela éditons son fichier de configuration avec nano.

sudo nano /etc/ntpsec/ntp.conf

Descendez tout à la fin du fichier avec la flèche bas du clavier et ajoutez les lignes suivantes:

# GPS
server 127.127.28.0 prefer
fudge 127.127.28.0 flag1 1 refid GPSLangage du code : CSS (css)

Je dois avouer que je n’ai jamais cherché à comprendre ces lignes, elles sont issues tout droit de la documentation de GPSd. Ca marche, c’est tout :D.

Le tout en images:

Une fois la configuration de ntp terminée, il nous faut redémarrer le service via la commande. Pas de capture d’écran, la commande coule de source. Elle n’affiche rien si tout se passe bien.

sudo systemctl restart ntp.serviceLangage du code : CSS (css)

Il ne nous reste plus qu’à vérifier que ntp utilise bien le GPS comme source. Nous allons utiliser la commande ntpq (ntp query) avec un paramètre supplémentaire.

ntpq -p

Un beau tableau devrait s’afficher avec toutes les sources de temps connues par le service ntp. Cherchez la ligne *SHM(0) .GPS. elle correspond à l’interfçage de GPSd et ntp.

Voilà! Lorsque notre OPiTracker sera dans la voiture sans accès réseau, son horloge interne sera mise à jour via le GPS! Simple et efficace! Nous ne disposons pas d’info PPS et notre date risque de ne pas être précise à la µseconde près, mais c’est amplement suffisant pour nous!

Conclusion

Nous avons donc branché notre GPS sur notre Orange Pi et installé puis configuré GPSd afin de pouvoir utiliser les informations GPS dans plusieurs applications. Nous avons aussi configuré le service de temps ntp afin qu’il utilise le GPS comem base de temps.

Au prochain article, retour à Direwolf pour l’interfacer avec GPSd et envoyer nos premières balises de position!

2 Comments

  1. FLPU Jean Marc

    Super séries d’articles, j’attends avec impatience la suite, j’ai installé un tracker GPS avec direwolf et un raspberry, mais j’ai un soucis de configuration automatique des Tbeacons! Encore Bravo!
    F4LPU.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *