Pages: [1]   Go Down
Author Topic: Contrôler arduino via python ( débutant )  (Read 1001 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,


je suis nouveau sur le forum, pour un projet en terminale S-SI j'ai fait commander une carte arduino UNO (Rev3) et je l'ai reçu il y a 2 jours. J'ai fait mes premières expériences avec le langage arduino (de petit test, allumer LED, afficher son état, etc ...) que je trouve d'ailleurs simple à utiliser, car je programme un peu du C et C++ smiley.
Pour notre projet, on est 2 (dont moi) qui nous occupons de la partie programmation et j'ai besoin de pouvoir contrôler la carte arduino avec du python (si vous voulez connaître notre projet très ambitieux merci de le dire dans les réponses et je prendrai la peine d'expliquer notre grand projet smiley-wink).
Maintenant, après beaucoup de recherches sur internet, forums et blogs anglais pour découvrir comment contrôler notre arduino j'ai un problème. J'ai réussi à installer la dernière version de Pyserial (qui est déjà assez compliqué), et j'ai quelques bases en python. Pour l'instant j'arrive à me connecter à mon port serial via python (après beaucoup de recherche également), et maintenant je voudrais pour commencer "seulement" pouvoir allumer et éteindre une LED via python. J'ai copié en partie du code d'un site mais qui datait et qui ne marchait plus à cause de la version de Python (la j'ai la dernière version de Python 3.2.xxx). Après 36 essaient je n'y arrive pas, alors je me suis dit avant de devenir fou je vais vous demander! smiley-grin. Voici le code sur l'arduino (qui marche lorsqu'on ouvre le moniteur série et qu'on envoi Y ou N pour allumer ou éteindre) :

Code:
  int ledPin = 13;  // choose the pin for the LED 
  int val = 0;      // variable for reading the pin status 
  int msg;   // variable to hold data from serial 
 
  void setup() { 
    pinMode(ledPin, OUTPUT);      // declare LED as output 
    Serial.begin(9600); 
    Serial.print("Program Initiated\n"); 
  } 
   
  void loop(){ 
          // While data is sent over serial assign it to the msg 
      while (Serial.available()>0){ 
          msg=Serial.read(); 
      } 
   
    // Turn LED on/off if we recieve 'Y'/'N' over serial 
    if (msg=='Y') { 
      digitalWrite(ledPin, HIGH);  // turn LED ON 
      Serial.print("LED Activated\n"); 
      msg=' '; 
    } else if (msg=='N') { 
      digitalWrite(ledPin, LOW); // turn LED OFF 
    } 
  } 



Et voici le code en python qui pause problème :

Code:
import serial 
import time 

yes="Y"
locations=['/dev/ttyS0','/dev/ttyS1','/dev/ttyS2','/dev/ttyS3','COM4']   
 
for device in locations: 
    try: 
        print ("Trying...",device)
        arduino = serial.Serial(device, 9600) 
        break 
    except: 
        print ("Failed to connect on",device)     
 
print(arduino.readline())
time.sleep(2)
while 1:
    arduino.write(yes)

Alors j'ai essayer tout (ou presque) sans succès  smiley-cry, avec un délai d'attente (car vue sur un forum que c'était peut être sa), sans, avec la boucle while, sans et je pense que ce qui pose problème est le arduino.write(), car python me met une erreur :
Traceback (most recent call last):
  File "C:\Users\Daniel\Desktop\testarduino.py", line 18, in <module>
    arduino.write(yes)
  File "C:\Python32\lib\site-packages\serial\serialwin32.py", line 258, in write
    data = bytes(data)
TypeError: string argument without an encoding
la variable n'est pas le bon type j'imagine, mais j'ai vraiment tout essayer et même mis msg dans le code arduino en int, avant il était de type char dans le code python (code hex, binaire, string, bytes, ...) sans que sa marche jamais smiley-sad



Si vous avez d'autres questions n'hésitez pas, merci de m'aider !! smiley





P.S. : Désoler pour mon orthographe
Logged

Oise (FR)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 86
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,

Voici ce que j'utilise en python via un module Bluetooth pour communiquer les informations à ma carte Arduino.
Cela peut t'aider, il faut peut-être modifie le code.

* test.py (1.32 KB - downloaded 23 times.)
Logged

Arduino 0023 et Python 3.2.3

Biganos
Offline Offline
Sr. Member
****
Karma: 0
Posts: 356
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut

Linux ou windows ?
sous linux ce serai plutôt : /dev/ttyACM0
sous windows voir sous quel COM le système te l'a mis !

A+
chabot380
Logged

ORDINAUSORE 2Ghz AMD64 QUI S'ALLUME EN 48 SECONDES AVEC UBUNTU 12.04
ARDUINO UNO / Shield Ethernet / RTC DS1307
Programmation Python et j'apprends le C
Technicien Télé Vidéo à la retraite.

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut !! smiley


@ nolimit60 merci beaucoup pour ton code python sa marche ! smiley c'est juste à cause du .encode() qui manquait alors ? Sinon je suis en train de décortiquer ton code pour essayer de bien le comprendre, je vais faire des recherches sur les fonctions que tu as employées ! En tout cas merci de m'avoir aider c'est un bon pas en avant pour moi smiley-wink.

@chabot380 je suis sous windows 7 64 Bit, comme dit j'arrive à me connecter au port serial (c'est le COM4 chez moi) c'est parce que j'ai laisser les /dev/ttyACM0 que tu pensais que j'étais sous linux j'imagine, en faite c'est juste pour que mon code python fonctionne également sous une autre machine linux smiley


Merci tous deux pour vos réponses rapide, je posterai le projet si vous voulez, car j'aurai surement d'autres questions smiley-wink
Logged

Pages: [1]   Go Up
Jump to: