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 :

Ecrire un int entre 0 et 256, ou un hexa, l'envoyer en byte avec PySerial sur le port serie/UART, et .


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 219
    Par défaut Ecrire un int entre 0 et 256, ou un hexa, l'envoyer en byte avec PySerial sur le port serie/UART, et .
    Je souhaite écrire au clavier un ou plusieurs int entre 0 et 256, ou hexa, (ce qui constitue ma commande), les envoyer en byte(s) (à priori de 8 bits, 8N1) avec PySerial sur le port serie/UART via un adaptateur USB, puis récupérer une réponse sous forme de byte(s) à transcrire à l'écran en hexa.

    Au final, la commande sera envoyée par un script automatique et la réponse transcrite en valeur décimale ou booléenne lisible pour un humain, mais pour l'instant, je n'arrive pas à effectuer la première partie exposée ci-dessus.

    L'objet de la question est de pouvoir communiquer avec un thermomètre infrarouge dont la doc se trouve ici
    Il est normalement possible de paramétrer, et récupérer les données via cette communication.

    Je ne sais pas comment débugger ce que je fais dans la mesure ou je dois faire une requête puis lire la réponse alors que je n'obtiens jusqu'à maintenant rien, j'ai énormément de difficulté à y arriver. Je ne suis même pas certain de la validité et bonne réception de ma commande.

    J'ai bien trouvé ça :https://python.developpez.com/cours/...age_12#L12-A-9
    mais ça discute surtout de la façon de sauvegarder dans des fichiers et je vois qu'il y a de notables différences entre python2 et 3.

    Je ne suis pas programmeur et avoue me perdre un peu dans les encoding, les ASCII avec leur représentation en hexa.
    Il s'est avéré que quand j'envoyais 129, j'envoyais finalement 49, 50 et 57, càd 00000001, 00000010 et 00001001 au lieu de 10000001.
    J'utilisais alors la fonction int(129) de Python, mais je ne pouvais pas envoyer ser.write(int(129)) sur mon port série !

    Je ne sais absolument plus comment m'y prendre. J'ai aussi tenté d'utiliser un arduino comme "target" et aide au débugage mais sans succès !

    Y aurait-il une façon propre de faire ou des outil plus adapté que d'autres ?

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

    Citation Envoyé par hary66 Voir le message
    Y aurait-il une façon propre de faire ou des outil plus adapté que d'autres ?
    Côté Python3, transformer une liste d'entiers dans 0..256 en bytes qu'on pourra transmettre via pyserial est simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> L = [1, 2, 3]
    >>> bytes(L)
    b'\x01\x02\x03'
    Il est sûr que votre projet est beaucoup plus ambitieux mais si vous n'avez pas la patience d'apprendre à coder, on ne va pas le faire à votre place...

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

  3. #3
    Membre confirmé
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 219
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Il est sûr que votre projet est beaucoup plus ambitieux mais si vous n'avez pas la patience d'apprendre à coder, on ne va pas le faire à votre place...

    - W
    Beaucoup plus ambitieux que quoi ? Est ce si ambitieux de vouloir communiquer avec ce matériel ? Je ne suis pas sur de comprendre.
    En ce qui concerne apprendre à coder, je veux bien, sauf que là, comme je 'lai dit plus haut, je ne sais pas comment m'y prendre pour débuger et débloquer mes blocages.

    Par contre, vos indications donnent quelques chose d’intéressant quand la valeur en entrée ne représente pas un caractère ASCII imprimable ! Dès que le caractère est imprimable, il est représenté par A et 1 dans l'exemple pour 65 et 49 ! ce qui est assez déroutant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> l= [1, 129, 65, 49]
    >>> s=bytes(l)
    >>> s
    b'\x01\x81A1'
    >>>
    La valeur envoyée sur le port serie/UART semble bien le byte adéquat !

    Je vais essayer d'avancer avec ça. Il faut que je vois comment faire la lecture du retour (réponse) maintenant.

    Merci.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 679
    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 679
    Par défaut
    Citation Envoyé par hary66 Voir le message
    En ce qui concerne apprendre à coder, je veux bien, sauf que là, comme je 'lai dit plus haut, je ne sais pas comment m'y prendre pour débuger et débloquer mes blocages.
    Pour savoir comment vous y prendre, il faut avoir appris. Et pour avoir appris, il faut commencer par lister les différentes compétences à acquérir, les tutos (ou autres) qui vont vous permettre de... et y avoir passé du temps.
    Dans votre cas, un minimum sur les bases de la programmation avec Python et la programmation réseau sont indispensables.

    Citation Envoyé par hary66 Voir le message
    Par contre, vos indications ne me donnent quelques chose d’intéressant que quand la valeur en entrée ne représente pas un caractère ASCII imprimable ! Dès que le caractère est imprimable, il est représenté par A et 1 dans l'exemple pour 65 et 49 ! ce qui est assez déroutant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> l= [1, 129, 65, 49]
    >>> s=bytes(l)
    >>> s
    b'\x01\x81A1'
    >>>
    C'est comme çà que Python affiche, par défaut, les chaînes de caractères.
    Si vous le découvrez, je comprends que cela soit déroutant.
    Le problème est que sans avoir pris le temps d'avoir une petite idée de ce qu'il se passe lorsque vous demander à Python d'exécuter des instructions de base, en cas de problème, vous ne saurez pas si la solution a été mal construite ou mal réalisée et dans ce cas, vous ne saurez pas distinguer les opérations à problème des autres (puisque pour vous tout est brouillardeux).

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

  5. #5
    Membre confirmé
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 219
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Pour savoir comment vous y prendre, il faut avoir appris. Et pour avoir appris, il faut commencer par lister les différentes compétences à acquérir, les tutos (ou autres) qui vont vous permettre de... et y avoir passé du temps.
    Dans votre cas, un minimum sur les bases de la programmation avec Python et la programmation réseau sont indispensables.



    C'est comme çà que Python affiche, par défaut, les chaînes de caractères.
    Si vous le découvrez, je comprends que cela soit déroutant.
    Le problème est que sans avoir pris le temps d'avoir une petite idée de ce qu'il se passe lorsque vous demander à Python d'exécuter des instructions de base, en cas de problème, vous ne saurez pas si la solution a été mal construite ou mal réalisée et dans ce cas, vous ne saurez pas distinguer les opérations à problème des autres (puisque pour vous tout est brouillardeux).

    - W
    Vous avez sans doute raison, mais lire les documentations n'est que peu engageant en plus d'être souvent très difficilement compréhensibles. J'ai pris pour parti de passer rapidement à une mise en pratique au travers de petits exemples, quite à lire la documentation construite avec des termes très spécifiques après seulement.
    Mais il faut avouer que travailler autour d'un vrai projet est tout de même plus stimulant, même si souvent plus difficile d'accès.
    Et puis lire la documentation ! Laquelle quand on ne sais même pas les outils dont on a besoin ? Je vous assure, les débuts sont difficiles.

    Je percutte à l'instant qu'il y avait ceci dans la documentation que j'ai lu plus tot et indiqué dans mon post initial :
    Les octets de valeur numérique comprise entre 32 et 127 sont représentés par le caractère correspondant du code ASCII.
    Certains octets de valeur numérique inférieure à 32 sont représentés de manière conventionnelle, comme par exemple le caractère de fin de ligne.
    Les autres octets sont représentés par leur valeur hexadécimale, précédée de « \x ».

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Bonsoir,

    pas de chance pour vous le protocole de cet instrument n'est pas des plus simples pour débuter. Les messages ne sont pas représentés en ASCII, checksum et acknowledge et une doc minimaliste, la totale !

    Je viens de voir que le constructeur propose un logiciel d'acquisition et de réglage : http://www.optris.com/downloads-software

    et le summum de tout ils proposent même des drivers déjà tout fait : http://wiki.ros.org/optris_drivers
    mais il faut déjà bien maîtriser la programmation pour ça.

    Mais si c'est dans un objectif d'apprentissage alors le mieux pour qu'on puisse vous aider c'est commencer par nous montrer ce que vous avez déjà écrit ou des bouts de code qui bloquent dans la décommutation ou l'envoi des commandes.

Discussions similaires

  1. Ecrire sur un port serie d'un PC
    Par poulp86 dans le forum Services Web
    Réponses: 0
    Dernier message: 22/04/2009, 17h35
  2. Réponses: 3
    Dernier message: 08/04/2009, 14h48
  3. Ecrire sur le port serie
    Par firejocker dans le forum C++
    Réponses: 1
    Dernier message: 24/05/2006, 13h58
  4. [TP] Code pascal pour lire sur un port série (int 14h)
    Par ebedinade dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 13/12/2005, 00h39
  5. [VB.NET] Comment ecrire du code entre <title>
    Par ykane dans le forum ASP.NET
    Réponses: 5
    Dernier message: 10/05/2004, 16h58

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