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 :

probleme lecture caractere port serie


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut probleme lecture caractere port serie
    Bonjour

    J'utilise une carte arduino avec un DHT22, cela fonctionne tres bien
    le code uniquement de la partie serie pour info

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                Serial.print("THI ");
                Serial.print(t);
                Serial.print(";");
                Serial.print(h);
                Serial.print(";");
                Serial.print(hic);
                Serial.println(" ");

    J'ai fait un mini script de test sous python windows, les donnees du port serie sont correctement recu

    le codes est:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    import serial
    import sys
    import time
    import json
     
    ser = serial.Serial('COM17', 115200, timeout=0.2)
    ser.close()
    ser.open()
     
    RELAIS = sys.argv[1]
    IDX1 = sys.argv[2]
     
    if RELAIS=="TEMP":
    	IDX2 = sys.argv[3]
    	IDX3 = sys.argv[4]
     
    print(RELAIS)
    message=RELAIS.encode('utf-8')+'\r\n'.encode('utf-8')
    ser.write(message)
    time.sleep(1)
    message = ser.readline()[:-2]
    print('Receiving ...'+message.decode('utf-8'))
    #time.sleep(2)
     
    if (RELAIS=="TEMP"):
    	temp = message.decode('utf-8')[4:9]
    	hum = message.decode('utf-8')[10:15]
    	hic = message.decode('utf-8')[16:21]
    	print (temp)
    	print (hum)
    	print (hic)

    les donnees recu avec python sous windows:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    python.exe relais.py TEMP 1001 1002 1003
    TEMP
    b'THI 13.40;88.00;13.09 '
    Receiving ...THI 13.40;88.00;13.09
    Receiving ...THI 13.40;88.00;13.09
    13.40
    88.00
    13.09

    le format me convient pour les tests

    par contre le meme script sous debian 8, aucune donnee

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    root@open:~# python /scripts/perso/relais_boitier.py TEMP 1001 1002 1003
    TEMP
     
    Receiving ...
    Receiving ...
    Quelqu'un peut il m'aider?
    j'ai essaye les differents mode de decodage, rien
    idem pour la conversion en string ..

    Merci d'avance

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

    Citation Envoyé par crashcoq Voir le message
    Quelqu'un peut il m'aider?
    Relisez votre code... si les lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    message = ser.readline()[:-2]
    print('Receiving ...'+message.decode('utf-8'))
    affichent: Receiving ..., c'est que la chaîne de caractères retournée par ser.readline est vide i.e. parce que çà part en timeout...
    Et la cause la plus probable est que vous avez oublié de brancher le câble (ou que vous ne l'avez pas branché sur le bon port).

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

  3. #3
    Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut
    Le port est bien branché sinon python renvoie immédiatement une erreur

    Le problème vient tout juste d'être régler avec ton Info capitale ...
    Il faut un timeout sous debian alors que sous Windows pas de problème ...
    Sûrement que debian est plus rapide que Windows

    Merci pour ta réactivité

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par crashcoq Voir le message
    Le problème vient tout juste d'être régler avec ton Info capitale ...
    Il faut un timeout sous debian alors que sous Windows pas de problème ...
    Sûrement que debian est plus rapide que Windows
    Dans le code, vous avez déjà un timeout (ser = serial.Serial('COM17', 115200, timeout=0.2)) et que ce soient Windows ou Debian la vitesse est donnée par le 115200 (bits/seconde).

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

  5. #5
    Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut
    Plus concrètement j'ai rejouté ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ser.write(message)
    time.sleep(1)
    message = ser.readline()[:-2]
    time.sleep(.2)
    print('Receiving ...'+message.decode('utf-8'))
    #time.sleep(2)
    Et depuis ça fonctionne

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par crashcoq Voir le message
    Plus concrètement j'ai rejouté ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ser.write(message)
    time.sleep(1)
    message = ser.readline()[:-2]
    time.sleep(.2)
    print('Receiving ...'+message.decode('utf-8'))
    #time.sleep(2)
    Et depuis ça fonctionne
    Une fois que ser.readline() se termine avec ou sans caractère, le time.sleep qui le suit ne changera pas ce qui a été lu... Après je ne nie pas que c'est tombé en marche après cette modification, mais logiquement, si vous la supprimiez vous devriez avoir le même résultat. Par contre, çà serait mieux d'allonger la durée du timeout (dans serial.Serial('COM17', 115200, timeout=0.2). 2 secondes, c'est bien.

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

Discussions similaires

  1. Probleme sur la lecture du port serie
    Par fred 81 dans le forum VB.NET
    Réponses: 4
    Dernier message: 13/06/2016, 21h40
  2. Lecture du port serie USB/RS232
    Par FlyByck dans le forum Général Python
    Réponses: 2
    Dernier message: 26/08/2012, 18h03
  3. probleme imprimante RS232 port serie
    Par mauguen dans le forum Windows XP
    Réponses: 1
    Dernier message: 25/08/2011, 15h38
  4. [WD12] Lecture sur port serie
    Par danca911 dans le forum WinDev
    Réponses: 6
    Dernier message: 28/01/2009, 20h07
  5. Réponses: 0
    Dernier message: 13/09/2008, 17h42

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