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++ :).
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 ;)).
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! :D. 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) :
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 :
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 =(, 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
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
Si vous avez d’autres questions n’hésitez pas, merci de m’aider !!
P.S. : Désoler pour mon orthographe