jeudi 19 septembre 2013

Récupérer les trames NMEA d'un GPS

Dans cet article, nous allons récupérer les trames NMEA d'un GPS. Par la suite nous les stockerons sur la Raspberry PI afin de les afficher par la suite sur une carte Google Maps.



Matériel utilisé :
- RaspberryPI
- dongle Wifi
- un GPS permettant de récupérer les trames NMEA (Inforad dans un premier temps et GPS Seedstudio par la suite)

Vérifier la réception des trames NMEA

Pour tout savoir sur la norme NMEA.

L'objectif est d'analyser ses trames et de récupérer les informations de base pour placer un Marker sur une carte (latitude et longitude).

Dans un premier temps, j'ai récupéré un "assistant à la conduite" anciennement appelé "détecteur de radar" de marque Inforad. Ces petits appareils permettent de prévenir de la présence d'un radar d'une zone de danger lorsque l'on circule sur une route.
Ces appareils contiennent une base de données de radar, que l'on peut mettre à jour depuis son ordinateur, et se sert de la position GPS pour prévenir des zones à risque. Cela a évité un grand nombre d'amendes et de retraits de points d'accidents sur les routes.

Bref, ces appareils sont très intéressant puisqu'ils transmettent via le port série (port USB) les trames NMEA. Ils ont été remplacés par des modèles connectés ou par des GPS indiquant eux aussi les zones à risque. Si vous avez ce type d'appareil, ressortez le du placard ou demandez à un ami, sinon on peut en trouver pour moins de 10 euros sur les sites de revente.

On peut également trouver certains GPS qui envoient les trames NMEA via le port série. Chercher sur Internet ou sur la documentation du GPS la vitesse de transmission ou Bauds.
Le mien par exemple, et il semble que ce soit généralement le cas transmet à 4800 Bauds.

On va à présent vérifier que le GPS renvoie bien les trames NMEA. Pour cela on va brancher le GPS sur le port USB et vérifier le port COM.
On va utiliser Putty, mais on peut utiliser le logiciel de notre choix qui nous permet de se connecter aux ports COM (screen pour Linux par exemple).

1) Brancher le GPS sur l'ordinateur à l'aide du câble USB
2) Vérifier le numéro du port COM dans la liste des périphériques
3) Ouvrir Putty


4) Sélectionner Serial dans les boutons radios puis saisir le nom du port COM ainsi que la vitesse (ici port COM28 et 4800

5) Cliquer sur Open, un terminal s'ouvre et les lignes NMEA doivent s'afficher



A venir prochainement, la récupération des traces NMEA à partir d'une RaspberryPI et l'affichage sur une carte.

13 commentaires:

  1. Bonjour,

    Ou en es tu? Je suis intéressé par ton sujet

    RépondreSupprimer
    Réponses
    1. Bonjour,

      J'ai choisi d'utiliser une carte électronique RaspberryPI qui me permet de parser et de stocker les coordonnées.
      Ensuite j'ai créé une page web avec une Google Maps qui me permet de visualiser mes trajets par jour.

      Je n'ai pas eu le temps de documenter cette partie...
      Tu serais intéressé pour reproduire ce tuto?

      Supprimer
  2. Bonjour,

    Je suis intéressé par ton projet ou en es tu?

    RépondreSupprimer
  3. bonjour,

    comment fait tu pour connecter le gps sur le raspberry ? Je suis très intéresser pour raccorder a opencpn, cela fonctionne nickel sur pc !

    RépondreSupprimer
    Réponses
    1. Bonjour,

      Avec le câble USB tout simplement.

      Supprimer
  4. merci, mais comment faire pour que le Pi reconnaisse le GPS ?

    RépondreSupprimer
    Réponses
    1. Attention tous les GPS ne transmettent pas les trames NMEA!
      En revanche si tu appliques ce que j'ai fait dans ce tuto, tu pourras en être sûr.
      Lorsque tu branches ton GPS à la RaspberryPI, une nouvelle entrée va apparaître dans /dev/tty. Tu vas pouvoir lire les lignes NMEA en utilisant 'screen' par exemple à 4800 bauds.

      Supprimer
  5. Mince je n'avais pas vu ta réponse.Je souhaite récupérer des trames NMEA d'un GPS et d'un echosondeur,les fusionner grace à la raspberry pi et les envoyés sur un PC.

    RépondreSupprimer
    Réponses
    1. Ha oui c'est une bonne idée! Une installation sur un bateau je suppose? attention à l’oxydation! Tu peux me dire ce que tu utilises comme echosondeur? Et si tu veux faire un petit tuto dans le genre du mien je me ferai un plaisir de le publier.

      Supprimer
  6. Bateau amorceur téléguidé pas de problème d'oxydation car il possède un caisson étanche.Le sondeur n'est pas défini j'en possède deux le but et d'utiliser la norme NMEA et que le projet soit réutilisable et surtout portable.Pour le tuto pas de problème mais avant il faut j'y arrive.J'ai un problème avec la communication sans fil portée de 300m maxi et la fusion de trame NMEA peux tu m'aiguiller?

    RépondreSupprimer
    Réponses
    1. Re,
      Tu utilises quoi pour la communication sans fil? Je te conseille d'aller faire un tour sur http://www.pobot.org !
      Pour la fusion des trames, tu peux développer un petit programme qui vérifie les timestamp de chaque trame et fusionnent les données.

      Supprimer
  7. Salut Guillaume

    Je suis bloqué sur la reception des trames sur la Pi y arrives tu toi?
    Comment as tu fais ?

    Je suis preneur de code réalisant cette fonction

    merci d'avance

    RépondreSupprimer
  8. Salut,

    J'ai utilisé cette librairie http://pyserial.sourceforge.net/pyserial.html
    Est ce que tu arrives à lire les trames sur la RPI? http://playground.arduino.cc/Interfacing/LinuxTTY#.UxnymnX5PeU

    En gros il faut se connecter à l'usb
    arduino = serial.Serial(device, 9600, timeout=5)
    et printer le résultat
    print(arduino.readline())

    Et boucler à l'infini ;)

    RépondreSupprimer