Offline
Newbie
Karma: 0
Posts: 17
|
 |
« on: November 19, 2012, 09:22:53 am » |
Bonjour à tous, Afin de développer mes compétences en arduino et surtout en robotique, j'ai envie d'interfacé un script python d'une manette de PS2 à l'arduino. Le problème c'est que je ne vois pas comment interfacé les deux parties j'ai suivi ce tutoriel, http://www.stealthcopter.com/blog/2010/02/python-interfacing-with-an-arduino/ qui permet d'allumer une led par liaison série, puis de l'allumer avec un script python. Voilà le code pour la liaison série de l'arduino: int ledPin = 13; // choose the pin for the LED int val = 0; // variable for reading the pin status char 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 } }
Ainsi que le code du script python: import serial import time locations=['/dev/ttyUSB0','/dev/ttyUSB1','/dev/ttyUSB2','/dev/ttyUSB3', '/dev/ttyS0','/dev/ttyS1','/dev/ttyS2','/dev/ttyS3'] for device in locations: try: print "Trying...",device arduino = serial.Serial(device, 9600) break except: print "Failed to connect on",device try: arduino.write('Y') time.sleep(1) print arduino.readline() except: print "Failed to send!" Donc la led s'allume bien avec la liaison série d'arduino, mais ensuite, je ne vois vraiment pas comment utiliser le script python. J'ai installé pygame, "pyserial", mais ça ne m'avance pas plus. Il ne faut pas installer un logiciel pour créer la liaison série pour le script? Je suis sous windows et j'utilise notepad pour le script python. Question en plus, est-ce qu'il y en a qui ont réussi à installer Eclipse sur windows, car moi je galère un peu après l'avoir paramétré plusieurs fois j'ai toujours une erreur à la fin. Merci d'avance.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 1
Posts: 18
|
 |
« Reply #1 on: November 19, 2012, 09:32:01 am » |
L'allumage de LED te permet de voir quelles sont les étapes de part et d'autre de ta liaison pour que les deux parties (ton arduino et ton pc) se parlent et se comprennent, à savoir Python vérifie que l'arduino est là, lui envoie un caractère, et Arduino lit ce caractère et agit en conséquence. La suite, avec ta manette de PS2, ben ça dépend de ce que tu veux faire, mais globalement ça fonctionnera sur le même principe. J'imagine que tu veux controler des choses branchées sur l'arduino avec ta manette branchée à ton pc ? Dis-nous en un peu plus sur ton projet.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 17
|
 |
« Reply #2 on: November 19, 2012, 09:51:15 am » |
Le problème c'est que je n'arrive pas à allumer la led avec mon script python. Je commence par la base pour ensuite faire plus compliquer. Pour le moment j'essaye d'allumer la led et ensuite une fois que j'aurais compris comment faire ça, je passerais à la manette.
J'aimerais en effet, contrôler des choses qui seront branchées sur une arduino. D'abord, j'utiliserais la manette pour commander des leds et des moteurs en ayant l'arduino branché au PC. Ensuite, je passerais par du xbee, pour envoyer les informations (commande moteur...) de la manette qui sera toujours branché au PC à l'arduino qui sera 10 mètres plus loin.
Mais pour le moment, je n'arrive pas à allumer la led avec le script python, je ne vois pas du tout comment faire. Je ne vois pas comment faire pour envoyer un caractère grâce à python, car lorsque je lance mon script il ne fonctionne pas...
|
|
|
|
|
Logged
|
|
|
|
|
Moselle (FR)
Offline
Full Member
Karma: 0
Posts: 144
|
 |
« Reply #3 on: November 19, 2012, 04:18:05 pm » |
|
|
|
|
|
Logged
|
2B OR NOT(2B) = FF Arduino 1.0.1 + Notepad++
|
|
|
|
Biganos
Offline
Full Member
Karma: 0
Posts: 228
|
 |
« Reply #4 on: November 20, 2012, 02:17:11 am » |
Salut Comme IDE pour Python moi j'utilise ça : http://sourceforge.net/projects/drpython/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
Newbie
Karma: 0
Posts: 17
|
 |
« Reply #5 on: November 20, 2012, 02:37:23 am » |
ça a l'air intéressant comme IDE, je vais voir comment il fonctionne et si c'est plus simple de l'utiliser Concernant le tutoriel, je vais modifier mon code afin de pouvoir allumer ma led en espérant que cela fonctionne. Edit: import socket import time import serial
print ("~ Client WebLed ~") locations=['/dev/ttyUSB0','/dev/ttyUSB1','/dev/ttyUSB2','/dev/ttyUSB3','/dev/ttyUSB4' '/dev/ttyS0','/dev/ttyS1','/dev/ttyS2','/dev/ttyS3','/dev/ttyS4']
for device in locations: try: print ("Trying...",device) arduino = serial.Serial(device, 9600) break except: print ("Failed to connect on",device) try: arduino.write('Y') time.sleep(1) print (arduino.readline()) except: print ("Failed to send!")
print ("a+ !") Voilà le code que j'ai pour python, et il n'arrive à ce connecté à aucun port usb: ~ Client WebLed ~ Trying... /dev/ttyUSB0 Failed to connect on /dev/ttyUSB0 Trying... /dev/ttyUSB1 Failed to connect on /dev/ttyUSB1 Trying... /dev/ttyUSB2 Failed to connect on /dev/ttyUSB2 Trying... /dev/ttyUSB3 Failed to connect on /dev/ttyUSB3 Trying... /dev/ttyUSB4/dev/ttyS0 Failed to connect on /dev/ttyUSB4/dev/ttyS0 Trying... /dev/ttyS1 Failed to connect on /dev/ttyS1 Trying... /dev/ttyS2 Failed to connect on /dev/ttyS2 Trying... /dev/ttyS3 Failed to connect on /dev/ttyS3 Trying... /dev/ttyS4 Failed to connect on /dev/ttyS4 Failed to send! a+ ! Merci pour vos réponses en tout cas
|
|
|
|
« Last Edit: November 20, 2012, 06:06:24 am by neroz »
|
Logged
|
|
|
|
|
France
Offline
Edison Member
Karma: 13
Posts: 1841
There is an Arduino for that
|
 |
« Reply #6 on: November 20, 2012, 07:23:47 am » |
locations=['/dev/ttyUSB0','/dev/ttyUSB1','/dev/ttyUSB2','/dev/ttyUSB3','/dev/ttyUSB4' '/dev/ttyS0','/dev/ttyS1','/dev/ttyS2','/dev/ttyS3','/dev/ttyS4'] Ce sont des noms de périphériques Linux. Sous Windows il faudrait tester COM1, COM2, .....
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
God Member
Karma: 37
Posts: 974
Get Bitlash: http://bitlash.net
|
 |
« Reply #7 on: November 20, 2012, 07:30:00 am » |
Il est nécessaire de time.sleep (2) après l'ouverture du port série pour permettre au bootloader de démarrage pour le temps et commencez votre programme. Si vous envoyez des données trop rapidement après l'ouverture du port série peut être perdue, ce qui semble être ce qui se passe dans votre cas. S'il vous plaît pardonnez ma machine traduits en français. Cordialement, -br http://bitlash.net
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 17
|
 |
« Reply #8 on: November 20, 2012, 11:13:45 am » |
J'avance doucement mais sûrement, je sent que la gestion de la manette va être dur vue que je n'arrive même pas à allumer une led. Donc voici mon code python qui se connecte à mon port (j'ai vérifier et ces bien le COM3) mais le problème c'est que la led ne s'allume toujours pas. import socket import time import serial
print ("~ Client WebLed ~") print ("ouverture du port") ser = serial.Serial("COM3") ser.baudrate = 9600 time.sleep(2)
print ("port ouvert")
for device in ser: try: print ("Trying...",device) arduino = serial.Serial(device, 9600) break except: print ("Failed to connect on",device) try: arduino.write('Y') time.sleep(1) print (arduino.readline()) except: print ("Failed to send!")
print ("a+ !") Voici mon code arduino int ledPin = 13; // choose the pin for the LED int val = 0; // variable for reading the pin status char 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 } } Quand je passe par la liaison série de l'arduino, la led s’éteint et s'allume bien, mais ne fonctionne pas quand je passe par le script python. En vous remerciant de votre aide précieuse.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
God Member
Karma: 37
Posts: 974
Get Bitlash: http://bitlash.net
|
 |
« Reply #9 on: November 20, 2012, 11:25:18 am » |
… print ("~ Client WebLed ~") print ("ouverture du port") ser = serial.Serial("COM3") ser.baudrate = 9600 #time.sleep(2) # <-- not here please
print ("port ouvert") for device in ser: try: print ("Trying...",device) arduino = serial.Serial(device, 9600) time.sleep(2) # <--- here instead please break …
Best, -br
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 17
|
 |
« Reply #10 on: November 20, 2012, 11:27:37 am » |
Cela ne fonctionne toujours pas
|
|
|
|
|
Logged
|
|
|
|
|
Biganos
Offline
Full Member
Karma: 0
Posts: 228
|
 |
« Reply #11 on: November 20, 2012, 11:49:56 am » |
Quel python ? 2.xx ou3.xx ? certaines librairies du 2 ne marche pas sur le 3 
|
|
|
|
|
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
Newbie
Karma: 0
Posts: 17
|
 |
« Reply #12 on: November 20, 2012, 12:11:47 pm » |
je suis en python 3.2
Mais normalement pyserial fonctionne avec python 3.2
|
|
|
|
|
Logged
|
|
|
|
|
Biganos
Offline
Full Member
Karma: 0
Posts: 228
|
 |
« Reply #13 on: November 21, 2012, 11:22:22 am » |
salut import socket # pas besoin ! import time import serial
print ("~ Client WebLed ~") print ("ouverture du port") ser = serial.Serial("COM3") ser.baudrate = 9600 time.sleep(2)
print ("port ouvert")
for device in ser: try: print ("Trying...",device) arduino = serial.Serial(device, 9600) break except: print ("Failed to connect on",device) try: arduino.write('Y') time.sleep(1) print (arduino.readline()) except: print ("Failed to send!")
print ("a+ !") Pourquoi : ser = serial.Serial("COM3") donc il s'appelle ser et ensuite : arduino = serial.Serial(device, 9600) il s'appelle arduino ? Quand tu fais ser =serial.Serial("COM3") tu ouvres ton port ! Je crois que ,vu ci-dessus tu veux ouvrir ton port deux fois. ça ne te donne pas une erreur ? Avant de relancer ton programme fait un ser.close(), pour fermer le port. A+ tu peut faire ser=serial.Serial("COM3",9600). pour ouvrir le port en une seul ligne.
|
|
|
|
« Last Edit: November 21, 2012, 11:24:05 am by 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
Newbie
Karma: 1
Posts: 18
|
 |
« Reply #14 on: November 21, 2012, 11:28:56 am » |
D'accord avec Chabot, y'a un micmac dans ta déclaration de port. Perso j'arrive très bien à communiquer en utilisant la syntaxe suivante: import serial import sys
SERIALPORT = "/dev/tty.usbmodem1d11" #changer selon ton port try: ser = serial.Serial(SERIALPORT, 9600) except serial.SerialException: print "no device connected - exiting" sys.exit()
(...instructions...)
ser.write(cequetuveuxenvoyer) ser.close()
|
|
|
|
|
Logged
|
|
|
|
|
|