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

Réseau/Web Python Discussion :

Souci d'envoi caractère vers arduino pyserial


Sujet :

Réseau/Web Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Agriculteur
    Inscrit en
    Juillet 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Agriculteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 39
    Points : 22
    Points
    22
    Par défaut Souci d'envoi caractère vers arduino pyserial
    Salut à tous,

    J'ai programmé ma carte arduino mega pour qu'elle effectue des actions en fonction du caractère ACSII qu'elle reçoit par le port USB. En gros, quand elle reçoit le caractère 'a' elle éteint une led et avec le 'A' elle l'allume. Idem pour c, c, d etc...
    Tout ceci fonctionne à merveille lorsque j'envoie le caractère par le biais de la console série arduino, mais lorsque je passe à python j'y comprends plus rien !

    La commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ser.write("A".encode('ascii'))
    me parait adaptée, j'ai pas d'exception mais toujours pas de led on !

    J'ai cherché un paquet de méthodes mais quand ça veut pas, ça veut pas !!!

    Qui aurait une ombre de réponse à m'apporter SVP ?
    >Versions : Activepython 3.2 avec pyserial 2.6

  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,

    Votre programme Python expédie des "bytes" sur le port série.
    Ils seront reçus cote Arduino, vitesse, parité,... sont cohérents.
    Mais arrives la bas, s'il n'y a pas un code qui lit et interprète les caractères reçus, il ne se passera rien non plus.
    Ça c'est la théorie.
    Mais dans la pratique, si ça ne fonctionne pas il faut regardez ailleurs que l'instruction "ser.write("A".encode('ascii'))" que vous mentionnez.
    Si vous débutez, raconter ce que vous avez fait sera complique.

    Essayez de partir de ce tuto et des cours Arduino .
    Il montre comment mettre en œuvre tous les bouts.

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Agriculteur
    Inscrit en
    Juillet 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Agriculteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 39
    Points : 22
    Points
    22
    Par défaut Suite : code arduino et python
    Bonjour wiztricks,

    Ok sur le principe. Pour une vision globale, voici mon code en c sur l'arduino :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    /*  COmmentaires
     
    Le principe est d'envoyer par l'ordi un caractère selon
    la commande (majuscule pour allumer)
     
    Si le caractère est indicateur, la carte envoie la commande 
    au boitier pour retour du poids.
     
    Serial est l'ordi, serial1 l'accessoire
     
     
     
    */
    int indicateur = '?';
     
    const int s1 =39;
    const int s2 =41;
    const int s3 =43;
    const int s4 =45;
    const int s5 =47;
    const int s6 =49;
    const int s7 =51;
    const int s8 =53;
    const int alim=37;
     
    void setup() {
      pinMode (20,OUTPUT);
      pinMode (21,OUTPUT);
      digitalWrite(21,HIGH);
      digitalWrite(20, LOW);
      Serial.begin(9600);
      Serial1.begin(9600);
     
     
     
      pinMode(s1, OUTPUT);
      pinMode(s2, OUTPUT);
      pinMode(s3, OUTPUT);
      pinMode(s4, OUTPUT);
      pinMode(s5, OUTPUT);
      pinMode(s6, OUTPUT);
      pinMode(s7, OUTPUT);
      pinMode(s8, OUTPUT);
      pinMode(alim, OUTPUT);
      digitalWrite(alim, HIGH);
     
      digitalWrite(s1, HIGH);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, HIGH);
      digitalWrite(s4, HIGH);
      digitalWrite(s5, HIGH);
      digitalWrite(s6, HIGH);
      digitalWrite(s7, HIGH);
      digitalWrite(s8, HIGH);
     
     
    }
     
    void loop() {
      // lit 1 char de lordi :si egale indicateur, aller à pesee
      if (Serial.available()) {
        int inByte = Serial.read();
        if (inByte == indicateur) {pesee();}
        else {action(inByte);} 
     
      }
      // lit du port 1, envoie du port 0 
      if (Serial1.available()) {
        Serial.write(Serial1.read());   }
     
    }//Fin void loop
     
     
    void pesee(){
      Serial1.print("READ\r");
     
     
    }
     
    void action (int code){
    Serial.write (code);//débogage
    switch (code) {
     
    case 'A' :digitalWrite(s1, LOW); break;
    case 'a' :digitalWrite(s1, HIGH); break;
     
    case 'B' :digitalWrite(s2, LOW); break;
    case 'b' :digitalWrite(s2, HIGH); break;
     
    case 'C' :digitalWrite(s3, LOW); break;
    case 'c' :digitalWrite(s3, HIGH); break;
     
    case 'D' :digitalWrite(s4, LOW); break;
    case 'd' :digitalWrite(s4, HIGH); break;
     
    case 'E' :digitalWrite(s5, LOW); break;
    case 'e' :digitalWrite(s5, HIGH); break;
     
    case 'F' :digitalWrite(s6, LOW); break;
    case 'f' :digitalWrite(s6, HIGH); break;
     
    case 'G' :digitalWrite(s7, LOW); break;
    case 'g' :digitalWrite(s7, HIGH); break;
     
    case 'H' :digitalWrite(s8, LOW); break;
    case 'h' :digitalWrite(s8, HIGH); break;
     
    case 't' :digitalWrite(13, LOW); break;
    case 'T' :digitalWrite(13, HIGH); break;
     
     
    case 'Z' : Serial1.print("ZERO\r");
    default : Serial.print("ERREUR");break;
    }//fin switch
    }//fin void action
    Je branche donc mon arduino à l'USB et vais ensuite dans la console série incluse dans le logiciel.
    Lorsque par exemple je tape A (9600 baud, sans fin de ligne) j'ai bien le relais 1 qui s'active.
    La commande ? fonctionne également (elle me renvoie une chaine de caractère depuis un boitier extérieur branché en serial1).
    J'en déduis donc que mon code arduino fonctionne...

    Sauf que voulant commander ceci depuis une interface graphique, je passe à python. Le code de test (arduino sur com3):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    import serial
    portarduino=2 
    ser=serial.Serial(portarduino, timeout=1)
    ser.write("A".encode('ascii'))
    El là, pas de relais activé !

    J'ai vérifié, les parités et débits sont cohérentes par défaut.

    Que faut-il modifier ? Code arduino ? Commande serial ??

  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
    Salut,

    Il semble y avoir le minimum syndical.
    Je me concentrerais a vérifier que la bestiole reçoit bien ce qu'on lui envoie - sinon la commande ne sera pas passée.
    C'est peut être ce que vous faites mais pas si clair a vous lire.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Homme Profil pro
    Agriculteur
    Inscrit en
    Juillet 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Agriculteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 39
    Points : 22
    Points
    22
    Par défaut Merci
    Merci wiztricks,

    pour la vérif', aurais-tu un lien vers une console python que je fouille un peu la chose ? Je pourrais voir :
    - si ça marche avec cette console ;
    - éventuellement le code qui marche !!

    Peut-il y avoir un "bug" chez pyserial 2.6 ?

    Je vois pas grand chose d'autre...

  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 Farmer64 Voir le message
    Peut-il y avoir un "bug" chez pyserial 2.6 ?
    Il y a certainement pleins de bugs dans pyserial!
    Mais ce que vous faites est quand même "basique" si ça ne fonctionne pas a cause d'un "bug", c'est du même ordre de probabilité que de gagner au loto.
    Les "datacom" et la programmation réseau sont des sujets assez difficiles.

    3 choses:
    1. Confirmez que vous ne changez rien d'autre qu’arrêt/lancer un programme cote PC lorsque vous en passez de la "console qui marche" a Python/PySerial,
    2. installez putty, il devrait pouvoir gérer un port série USB et vous permettre de communiquer hors Python.
    3. écrivez un programme cote Arduino qui se contente de retourner les caractères reçus (loopback).


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

  7. #7
    Membre à l'essai
    Homme Profil pro
    Agriculteur
    Inscrit en
    Juillet 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Agriculteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 39
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    c'est du même ordre de probabilité que de gagner au loto.

    - W
    Chouette ! Va falloir que je joue alors !!!

    Citation Envoyé par wiztricks Voir le message
    Confirmez que vous ne changez rien d'autre qu’arrêt/lancer un programme cote PC lorsque vous en passez de la "console qui marche" a Python/PySerial,

    Confirmé je passe toujours direct de l'un à l'autre...

    Je tente tout le reste et je réponds,

    A+ et merci,

Discussions similaires

  1. Aide :convertir caractére vers code ascii
    Par MAXIMIX dans le forum C++
    Réponses: 2
    Dernier message: 19/08/2006, 10h46
  2. [FLASH MX2004] petit soucis XML et caractères spéciaux
    Par Isses dans le forum Intégration
    Réponses: 20
    Dernier message: 25/04/2006, 13h24
  3. Envoi/Reception vers/depuis une base SQL
    Par TocTocKiéLà? dans le forum MFC
    Réponses: 2
    Dernier message: 31/10/2005, 19h14
  4. Réponses: 4
    Dernier message: 29/09/2005, 18h29
  5. marquage pour interdire l'envoi ultérieur vers excel
    Par olemoine dans le forum Access
    Réponses: 16
    Dernier message: 05/01/2005, 21h23

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