IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Encodage du port série.


Sujet :

Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Encodage du port série.
    Bonjour à tous,

    En train de réinventer la roue, puisque je sais qu'il existe par exemple python-gpsd, j'essaye de récupérer les données NMEA depuis un GPS USB. Pour la base, je suis sous Ubuntu 10.04 LTS et j'utilise Python v2.6.

    Considérant mon GPS comme un périphérique série j'ai écrit ces quelques lignes afin de m'y connecter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    import serial
     
    port_serie=serial.Serial('/dev/ttyUSB0', 9600)
    if port_serie.isOpen() :
         print('Le port série du GPS est ouvert !')
         phrase_nmea=port_serie.read(10) #Pour ne lire qu'un tampon de 10 caractères pour commencer.
         print 'Phrase NMEA : ', phrase_nmea #Cas 1
         print('Phrase NMEA : ', phrase_nmea) #Cas 2
         port_serie.close()
     
    print('C\'est fini... pour l\'instant')
    Le résultat n'est pas concluant, puisque je devrais trouver des choses comme cela (des extraits en tous cas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $--GGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx*hh
    avec bien entendu des valeurs numériques à la place des 'x' et des 'y', mais je tire cette exemple de la documentation du protocole NMEA0183. A la place, j'obtiens dans le cas 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Phrase NMEA :  `x`�~�`
    et dans le cas 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ('Phrase NMEA : ', '`x`\x00\xe6~\x9e`\x06\x1e')
    C'est ce second cas qui m'a mis sur la piste d'un problème d'encodage. Je crois me souvenir que Python utilise l'encodage de la console pour afficher les résultats hors les données du GPS sont envoyées en ASCII (d'après la documentation constructeur), est-ce une piste ? D'autre part, la commande 'print' évalue les résultats, et je pense que c'est pour cette raison que j'ai ces valeurs dans le cas 1 alors que dans le cas 2, les résultats ne seraient pas évalués ? Pourriez-vous m'aider à y voir plus clair et à récupérer mes trames NMEA ?
    Une dernière information, les données NMEA sont envoyés à chaque fois avec [CR][CF] en fin de ligne, j'avais donc essayer au début de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    phrase_nmea=port_serie.readline()
    mais cela ne fonctionne pas, il semble que je lise les données de façon cryptées ou compressées.

    Par ailleurs j'ai testé ce GPS qui fonctionne correctement, et me donne bien la position avec d'autres logiciels. (au cas où...)

    Nouveau sur le forum, j'ai cherché pendant un moment déjà sur google, bien entendu et sur le forum également, mais je ne trouve pas de réponse, donc je poste mon message ici, espérant qu'il y trouvera réponse. Merci d'avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,
    Personnellement, je commencerais par m'assurer que le setting de la parité, des bits de stops, .... sont cohérents.
    Et permettent un minimum d'échanges avec des programmes qui "marchent" genre PuTTY.
    Puis, on reporte le paramétrage dans le setup de "serial" et... sauf erreur, çà devrait fonctionner pareil.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut parité,
    Bonjour,

    merci de t'intéresser à mon problème. Concernant la configuration du GPS, les caractéristiques sont :
    - vitesse : 9600 bauds
    - format : 8 bits
    - parité : sans parité.
    - bit(s) de stop : 1

    Dans une console python, lorsque j'exécute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> import serial
    >>> port_serie=serial.Serial('/dev/ttyUSB0', 9600)
    >>> port_serie
    j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Serial<id=0xb741290c, open=True>(port='/dev/ttyUSB0', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0, dsrdtr=0)
    Comme le port est bien ouvert, et que j'obtiens une réponse (étrange réponse certes) j'en ai conclu que le port était bien ouvert, et que je pouvais communiquer. Je me trompe ? Par ailleurs, étant donné que ce n'est qu'une puce GPS, la communication ne s'effectue que dans un seul sens : GPS -> PC, je ne peux pas lui envoyer de waypoint, ou autre information.

    Par contre, en effet, je me demande s'il est normal que j'ai xonxoff=0, rtscts=0 et dsrdtr=0...

    Cordialement,

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Comme le port est bien ouvert, et que j'obtiens une réponse (étrange réponse certes) j'en ai conclu que le port était bien ouvert, et que je pouvais communiquer. Je me trompe ?
    Oui.
    Vous communiquez avec "votre" port RS232 mais comment êtes vous sûr que les deux ports RS232 sont configurés "proprement" pour travailler ensemble?
    Faites fonctionner cela avec PuTTY et regardez Python après.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Putty,
    Avec Putty, j'obtiens une fenêtre qui m'affiche en boucle (je pense que c'est parce qu'il ne lit pas les fins de ligne) des caractères bizarre, comme ce que je sors après la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    screen /dev/ttyUSB0 9600
    ou encore comme j'obtiens par extrait (puisque je limite la taille du buffer) dans mon script.

    Il y aurait un problème d'encodage ? Pourtant avec un logiciel de navigation, j'ai bien ma position GPS et j'arrive à voir les trames NMEA envoyé par le GPS !

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par navugo Voir le message
    Il y aurait un problème d'encodage ? Pourtant avec un logiciel de navigation, j'ai bien ma position GPS et j'arrive à voir les trames NMEA envoyé par le GPS !
    Si le logiciel de navigation utilise le même port, vous avez un bon test côté "çà fonctionne" de bout en bout.
    Mais tant que PuTTY remonte du garbage, çà reste un problème de décodage des signaux électriques... et fort probablement de configuration des ports.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Je n'arrive pas à obtenir autre chose avec Putty que des codes incompréhensibles, en enregistrant un log, gedit ne veux pas me l'ouvrir me disant qu'il ne trouve pas l'encodage des caractères... J'ai joué avec différentes options, mais je ne connais pas putty...

    Je vais faire l'essai avec un second GPS ce soir, je posterai le résultat aussitôt.


    Bien, alors, le second GPS, modèle bluetooth, je l'ai connecté, je regarde avec putty la console série, 9600 bauds, toujours un charabiat incompréhensible, puis lecture du manuel du gps bluetooth. Sa vitesse est de 4800 bauds. Je corrige, et ça marche sous putty, comme avec mon script python. Dans le doute j'essaie le GPS USB; et pareillement, la vitesse n'est 9600 bauds, mais 4800... Merci beaucoup pour votre aide, je suis désolé de n'avoir pas fait ce test plus tôt, pourvu que ça aide quelqu'un d'autre... Cela dit, putty c'est génial, je ne connaissais pas. Mais il y a quand même 'screen' en console qui m'avait dépanné.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Série] Accès au port série sous linux
    Par ghost dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 10/10/2007, 10h43
  2. Réception sur le port série sous DOS avec Borland V3.0
    Par jackyjacky dans le forum Autres éditeurs
    Réponses: 24
    Dernier message: 19/03/2004, 23h18
  3. probleme de communication port série
    Par ben23 dans le forum MFC
    Réponses: 8
    Dernier message: 06/02/2004, 15h12
  4. Recherche de l'adresse du port série
    Par StephCal dans le forum Langage
    Réponses: 8
    Dernier message: 07/01/2004, 11h23
  5. Problème avec le port série sous Windows XP
    Par didou2dek dans le forum Composants VCL
    Réponses: 6
    Dernier message: 02/09/2003, 19h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo