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 :

lecture de données sur port série


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Espagne

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2019
    Messages : 16
    Par défaut lecture de données sur port série
    Bonjour,

    Je suis débutant en python. J'essaye désespérément de lire des données sur le port série, données qui sont envoyées par arduino.
    le problème réside dans le programme python, lorsque je le lance, les données affichées n'ont aucun sens et ne correspondent pas à ce qu'il devrait y avoir sur le port série.

    Le programme fonctionne de la manière suivante : Lorsque la lettre 'm' est envoyée sur le port série, le programme arduino fait une mesure est envoi le résultat sur le port série. Le programme arduino fonctionne très bien, les valeurs sont correctes lorsque je l'utilise avec le moniteur série. C'est le programme python qui déconne. Je ne sais pas s'il y a un problème au niveau de l’enchaînement des instructions de lecture/écriture, ou bien si c'est l'utilisation du module serial qui ne va pas...

    Le port série a bien été configuré sur le pc.

    Ci-joint le 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
    18
    19
     
     
    import serial
    import time
     
     
    #ouverture du port série
    ser = serial.Serial('COM3', 9600, timeout=0.5)
     
    #ser.isOpen()
     
    for i in range(1,5) :
        lettre = str(input("entrer valeur : "))
        ser.write(ord(lettre))
        time.sleep(0.5) # attente 500 ms
        lecture = ser.read(ser.inWaiting())
        print(lecture)
     
    ser.close() #on ferme le port série
    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    En admettant qu'on est sur python 3, la fonction str est inutile avant le input

    Après je ne suis pas sûr, mais on demande avec serial lorsqu'on écrit (toujours en version 3) un type bytes.

    Pour être sûr, je préférerai écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ser.write(lettre.encode('ascii'))
    En espérant que ça t'as aidé !

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Espagne

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2019
    Messages : 16
    Par défaut
    Merci pour ta réponse.

    J'ai fait les modifs que tu m'as proposé et le résultat est bien meilleur ! J'obtiens bien la valeur espérée, mais cette dernière est encadrée par des caractères qui, à mon avis correspondent à une certaine mise en forme non interprétée par python :

    J'obtiens : b'1.92\r\n' pour une valeur de 1.92. La valeur est donc bien là, mais j'aimerais enlever le b'\r\n' ou bien faire en sorte que ces caractères soient correctement interprétés.

    Aurais-tu une idée ?

    Merci

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Cette valeur est retournée en bytes, il faudra pour supprimer cela utiliser la méthode decode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(lecture.decode())

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Espagne

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2019
    Messages : 16
    Par défaut
    C'est bon j'ai compris, il suffit de transformer la sortie en 'float' car elle était en 'byte'.

    Merci pour ton aide Fred.

    Je joins le code final pour terminer la discussion :
    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
     
    import serial
    import time
     
    #ouverture du port série
    ser = serial.Serial('COM3', 9600, timeout=0.5)
     
    for i in range(1,5) :
        lettre = input("entrer valeur : ")
        ser.write(lettre.encode('ascii'))
        time.sleep(0.5) # attente 500 ms
        lecture = float(ser.read(ser.inWaiting()))
        print(lecture)
     
    ser.close() #on ferme le port série

  6. #6
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Espagne

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2019
    Messages : 16
    Par défaut
    Je n'avais pas vu ta réponse.

    En effet ça marche aussi avec lecture.decode()

    Merci encore

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

Discussions similaires

  1. envoi et lecture des données via port série rs232
    Par guefrachi dans le forum MATLAB
    Réponses: 3
    Dernier message: 03/06/2012, 23h02
  2. [WD15] Lecture et écrire sur port série Pocket PC
    Par bricopin dans le forum WinDev
    Réponses: 8
    Dernier message: 24/01/2012, 11h34
  3. reception de donnée sur port série
    Par zzr69 dans le forum VB.NET
    Réponses: 20
    Dernier message: 02/03/2011, 20h14
  4. [C] Lecture de caractère sur port série
    Par walidbou dans le forum Linux
    Réponses: 1
    Dernier message: 28/10/2007, 11h05
  5. [VB6]Réception de données sur port série
    Par lindecker dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 08/03/2006, 06h48

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