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 :

difficultés avec les encode et decode [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 16
    Par défaut difficultés avec les encode et decode
    Bonjour à tous,

    Je fais des essais de connexion série avec une arduino.
    J'ai un problème d'écriture des données reçues en provenance de l'arduino.
    Voici mon code python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import serial
    import time
     
    try:
        monPort=serial.Serial('COM3',115200, timeout=.1) # initialise port serie forme réduite
        time.sleep(1) #give the connection a second to settle
        print ("Ouverture du port série réussie")
    except:
        print ("Echec ouverture du port série ")
     
    msg="Hello from Python!"
    monPort.write(msg.encode())
     
    data = monPort.readline()
    print (data)
     
    monPort.close() # close port
    Je reçois le message suivant:

    Ouverture du port série réussie
    b'\xf0Hello from Python!'

    Je n'arrive pas à comprendre d'où viennent ces caractères b'\xf0 et surtout comment les éliminer.
    Si quelqu'un peut m'expliquer...

    Eventuellement, voici mon code arduino:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void setup() {
      Serial.begin(115200);
    }
    void loop() {
      if(Serial.available() > 0) {
        char data = Serial.read();
        //char str[2];
        //str[0] = data;
        //str[1] = '\0';
        Serial.print(data);
      }
    }
    Merci d'avance.
    Cordialement
    Passy261

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Le b'...' vous signale juste qu'il s'agit de bytes. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> msg="Hello from Python!"
    >>> msg
    'Hello from Python!'
    >>> msg.encode()
    b'Hello from Python!'
    Dans b'\xf0Hello from Python!', ce qui doit vous surprendre c'est que çà ne se termine pas par '\n' i.e. .readline() sort en timeout plutôt qu'après la réception d'EOL.
    Mais ce sont les caractères/bytes reçus: c'est plutôt côté émetteur qu'il faut se poser des questions.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 16
    Par défaut
    Merci pour votre réponse.

    Finalement, le caractère initial est un "point d'interrogation inversé" envoyé par arduino dans le premier envoi mais pas dans les envois précédents, et ce uniquement si on est réglé sur 115200 bauds. Je ne sais pas l'origine de cette observation.
    Donc, je suis passé sur 9600 bauds et je retraduis les caractères reçus avec decode(). Cela élimine b'\xf0 et je retrouve alors mon texte.

    Passy261

    Sujet résolu

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

Discussions similaires

  1. Difficulté avec les UDF's de FreeADhocUDFmin
    Par freud dans le forum Firebird
    Réponses: 26
    Dernier message: 05/07/2008, 00h04
  2. difficulté avec les modules .pyd
    Par ulysse07 dans le forum Bibliothèques tierces
    Réponses: 4
    Dernier message: 12/09/2007, 11h17
  3. Difficulté avec les Radio button
    Par toitonline dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 17/04/2007, 17h58
  4. [C#] Difficulté avec les catch
    Par Roach- dans le forum ASP.NET
    Réponses: 9
    Dernier message: 31/01/2006, 17h57

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