Partage
  • Partager sur Facebook
  • Partager sur Twitter

Communication Arduino/Python

Temps réel

Sujet résolu
    20 mai 2019 à 17:43:42

    Bonjour, bien que j'ai trouvé de nombreuses entrées sur ce forum qui concernaient ce sujet, aucune ne m'a fait avancer, la plupart étant composées uniquement du message originel, sans réponses. Ainsi je repose la question, au moins pour savoir si cela est possible.

    J'ai besoin de communiquer des données très rapidement entre python et arduino pour asservir un moteur en position. La partie acquisition est imposée par une partie de notre cahier des charges sous python, et la partie commande est imposée sous arduino. Y a-t-il un moyen ? Je pose la question car des quelques éléments de solution que j'ai pu trouver, aucun n'avait l'air de réellement marcher (problèmes de communication, problèmes de lenteur, ...)

    Si vous connaissez une solution et que vous voulez bien me la communiquer, je vous en serais grandement reconnaissant !

    • Partager sur Facebook
    • Partager sur Twitter
      21 mai 2019 à 19:07:39

      Je me permets de up ce topic, il se trouve que j'en ai vraiment besoin et que je voudrais au moins savoir si cela est possible, ou si une réponse se trouve quelque part où je n'aurais pas pensé à regarder.
      • Partager sur Facebook
      • Partager sur Twitter
        22 mai 2019 à 0:17:18

        + Serial à 115200 ne te suffit pass ?

        Tu as besoin de quoi exactement ?


        • Partager sur Facebook
        • Partager sur Twitter
          22 mai 2019 à 13:41:07

          Houla, je n'ai pas compris ta réponse !

          Ce dont j'ai besoin est de transférer des données en temps réel à un Arduino. Ultimement, cela servira à réaliser un asservissement en position (en rotation plus exactement). Et je ne sais pas vraiment comment procéder. Je suis en train de faire des tests, mais pourriez-vous me dire si des librairies existent pour cela, j'en ai trouvé quelques-unes, mais je ne sais pas si elles sont vraiment adaptées. Si elles figurent parmi la liste que vous me donneriez, je les regarderai plus en profondeur.

          J'ai fait le code ci-dessous pour vérifier que les données arrivent, et qu'elles arrivent entières et en bon état. Or j'ai un souci, si j'arrive effectivement à communiquer des caractères avec l'arduino, je ne parviens pas à lui communiquer des chaines de caractères entières.

          Partie python : 

          import serial
          
          ser = serial.Serial('COM3', baudrate = 9600, timeout = 1)
          
          def getValues(x):
              b_x = bytes(x.encode('utf-8'))
              ser.write(b_x)
              arduinoData = ser.readline().decode('ascii')
              return arduinoData
          
          while(1):
              userInput = input('Transmission : ')
              if userInput != None:
                  print(getValues(userInput))
                  userInput = None

          Partie Arduino :

          int analogPin = 3;     
          int data = 0;           
          char userInput;
          String chaine;
          
          void setup(){
            Serial.begin(9600);
          }
          
          void loop(){
            if(Serial.available()> 0){
              while(Serial.available()>0){
                userInput = Serial.read();
                chaine = String(chaine+userInput);
              }
              Serial.println(chaine);
            }
          }

          Voici la sortie de mes programmes. On y voit que je demande à transmettre le mot "Test" et que Arduino me renvoie uniquement la première lettre. Dans le programme Arduino, j'ai fait en sorte de "stacker" les caractères, on voit donc que le programme peut transmettre des chaines de caractères complètes. Toutefois, le "stackage" pose également un second problème, si l'on veut communiquer également un second message (ou un troisième, etc...).

          Problème de communicationDeuxième problème

          -
          Edité par PèlegrinGrégoire 22 mai 2019 à 19:48:45

          • Partager sur Facebook
          • Partager sur Twitter
            24 mai 2019 à 19:44:23

            J'ai finalement réussi ! 

            Alors j'ai modifié le code de nombreuses fois (en tous cas le code Arduino, le code python était bon comme il était)

            Je mets les codes ici, pour les personnes qui seraient tombés sur ce topic pour la même raison.

            Python :

            import serial
            
            ser = serial.Serial('COM3', baudrate = 9600, timeout = 1)
            
            def getValues(x):
                b_x = bytes(x.encode('utf-8'))
                ser.write(b_x)
                arduinoData = ser.readline().decode('ascii')
                return arduinoData
            
            while(1):
                userInput = input('Transmission : ')
                if userInput != None:
                    print(getValues(userInput))
                    userInput = None

            Arduino :

            String chaine;
            
            void setup(){
              Serial.begin(9600);
            }
            
            void loop(){
              while(Serial.available()>0){
                chaine += char(Serial.read());
                delay(2);
              }
              if(chaine != ""){
                Serial.println(chaine);
                chaine = "";
              }
            }

            Voilà, j'avais eu beaucoup de mal à trouver quoi que ce soit sur le sujet, donc je pose ça là (aussi pour le jour où j'aurai oublié :p)

            • Partager sur Facebook
            • Partager sur Twitter

            Communication Arduino/Python

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown