le gps avec linux

aujourd'hui trouvons enfin une utilité a un récepteur GPS bluetooth. .. évidement on est bien sous linux et éventuellement dans mon cas sous ubuntu, j'avais déjà fait a peu près la même chose il y a quelques années avec une debian sarge, c'est dire que ça doit passer un peu partout. cela étant toute la partie installation de "bluez" et autre bidules n'est pas couvert ici car en effet avec ubunut tout est déjà installé par défaut.

comment trouver le récepteur gps

pour cela, il va falloir utiliser un truc comme hcitool par exemple de la sorte :

hcitool scan

cet outil avec l'option 'scan' va permettre (en dehors de trouver les casques audio et téléphones de vos voisins) de connaitre l'addresse MAC (non, rien a voir avec les pommes blanches) du récepteur GPS.

exemple :

[manu@hal][~-20:46] hcitool scan Scanning ... 00:44:44:44:44:44 Ordinateur 00:DD:DD:DD:DD:DD HOLUX GPSlim236 00:33:33:33:33:33 telephone

donc la nous avons bien trouvé le MAC du "HOLUX GPSlim236", nous sommes contents.

connexion du pc au GPS

on peut utiliser rfcomm pour attacher le GPS a /dev/rfcomm0, pour cela il suffit de faire :

rfcomm connect 0 00:DD:DD:DD:DD:DD

en fait ça donne ça (si l'on dézoome) :

[manu@hal][~-20:52] rfcomm connect 0 00:DD:DD:DD:DD:DD Connected /dev/rfcomm0 to 00:DD:DD:DD:DD:DD on channel 1 Press CTRL-C for hangup

le "0" indique donc que ce sera /dev/rfcomm0, on peut utiliser d'autres numéros si l'on veut. "hangup" en anglais veut dire "raccrocher", donc pour terminer la conversation entre le pc et le GPS suffit de faire "ctrl + c" dans le terminal concerné.

on pourra y voir des infos bruts en faisant "cat /dev/rfcomm0", si vous arrivez a déchifrer le tout a la vitesse du défilement des infos alors il vous sera peut etre inutile d'aller plus loin.. :]

[manu@hal][~-20:53] cat /dev/rfcomm0 $GPGGA,182655.235,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*4A $GPRMC,182655.235,V,0000.0000,N,00000.0000,E,,,311006,,,N*7A $GPVTG,,T,,M,,N,,K,N*2C $GPGGA,182656.235,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*49 $GPRMC,182656.235,V,0000.0000,N,00000.0000,E,,,311006,,,N*79 $GPVTG,,T,,M,,N,,K,N*2C $GPGGA,182657.235,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*48 $GPGSA,A,1,,,,,,,,,,,,,,,*1E

gpsd - le serveur de GPS

Gpsd va servir de relais entre le GPS et les logiciels GPS, c'est a dire qu'il va aller lire /dev/rfcomm0 et géré la chose, puis les logiciels de gps vont se connecter a gpsd pour avoir les infos.

dans un premier temps, pour tester en gros, on peut le lancer avec du debug "-D 2" aussi on veut pas qu'il tourne en fond, donc "-N". un truc pour éviter de casser son gps (sur le mien il est arrivé que le GPS se met a parler "binaire" et donc les infos n'étaient plus lisibles, si cela vous arrive alors voir plus bas gpsctl pour un remède éventuel) est d'utiliser l'option "-b", cette option fait que gpsd ne va pas tenter d'envoyer des instructions au récepteur il ne fera QUE lire

gpsd -b -N -D 2 /dev/rfcomm0

par défaut il tournera sur le port 2947 ce qui nous conviendra puisque les logiciels gps vont par défaut aller chercher les infos de position sur le port 2947.

et maintenant le(s) client(s)

il existe pleins de clients gps pour le système linux ("what else ?"), en voici quelques uns sympa :

  • xgps - client graphique pour voir les infos satellites, position et vitesse.
  • cgps - idem mais en mode texte
  • gpsdrive - un truc pour conduire un gps. ... (ou se faire conduire), pas encore le top du must, mais sympa
  • viking - je n'ai fait que peu de choses mais il est joli ce soft. .. :]
  • gpsctl - un truc pour changer le mode du récepteur GPS entre NMEA et le mode binaire propriétaire

xgps et cgps

ces deux programmes sont a la base la pour tester le fonctionnement du GPS, en gros ils vont donc se connecter a gpsd et avec ça afficher les infos des satellites, la position, la vitesse etc etc. c'est pas mal utile pour savoir ce qui se passe.

gpsdrive

ceci est censé être un logiciel de navigation, je ne crois pas qu'il soit encore totalement au point, mais c'est un des plus aboutis je crois bien.. . il faudra télécharger les cartes via l'internet avant de prendre la route (a moins d'avoir des morceaux de Internet sur soi). je trouve que l'utilisation est spéciale (déplacement sur la carte etc), je vous laisse souffrir un peu. . (sinon très sympa) : ]

viking

ce truc est censé faire plein de choses, évidement ici je ne détail pas l'utilisation des logiciels clients, il y a pour ça les sites officiels deja (et sans doute d'autres encore) cependant une petite note "marrante" pour ce qui sont sous (k)ubuntu, quand on ajoute une "Layer" GPS il ne propose pas de se connecter sur /dev/rfcomm0 (ah oui, j'oubliais, il ne passe pas que par gpsd on dirait mais directement sur /dev/le_device) donc en gros la solution sale est de faire un lien de /dev/rfcomm0 vers ttyUSB0 par exemple comme ainsi :

sudo ln -s /dev/rfcomm0 /dev/ttyUSB0

avec ce que je viens de dire j'ai quand même envie de parler du mode "Realtime", je trouve que ça déchire sa maman. en effet j'ai enregistré le trajet que j'ai fait (Ctrl + s) puis en rentrant j'ai pu ajouter une "layer" (calque) avec des cartes google ou openstreetmaps etc etc... y'a même possibilité de voir dans les détails pas mal de choses dont la vitesse moyenne etc etc. c'est très très sympa.. . .

gpsctl

ce truc la sert a changer le mode du récepteur GPS, en effet certains peuvent parler NMEA ou binaire, avec ce petit soft on peut changer le mode

s'il n'y a qu'un seul récepteur et que gpsd tourne il suffira alors, pour mettre en mode NMEA de faire :

gpsctl -n

a vous de jouer avec les différents logiciels clients et de voir ce qui vous convient le plus, si le but est juste de savoir ou vous êtes ou la vitesse, cgps est très très bien. . . : ]