Pages: 1 [2]   Go Down
Author Topic: Problème communication port serial.  (Read 1297 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
God Member
*****
Karma: 2
Posts: 802
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Yep!

Fait aussi un print de newmails pour voir ce qu'il affiche...

@+

Zoroastre.
Logged

Veuillez indiquer [RESOLU] dans l'entête du titre en éditant votre premier message smiley-wink

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 77
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

up (edit du dessus)
Logged

0
Offline Offline
God Member
*****
Karma: 2
Posts: 802
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Yep!

Tu peux faire un print dans ton script python de la variable : newmails

Je voudrais voir ce qu'elle donne, j'ai pas vu au dessus...

@+

Zoroastre.
Logged

Veuillez indiquer [RESOLU] dans l'entête du titre en éditant votre premier message smiley-wink

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 77
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si ça te dérange pas, je peux te mp mon adresse msn pour discuter plus efficacement ? Je posterai la solution bien sûr si on trouve ^^
Logged

0
Offline Offline
God Member
*****
Karma: 2
Posts: 802
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Yep!

Heuuuu!!! msn...Faut que je regarde si j'ai encore un compte quelque part  smiley-eek-blue

Je t'envoie mon mail par mp

@+

Zoroastre.
Logged

Veuillez indiquer [RESOLU] dans l'entête du titre en éditant votre premier message smiley-wink

0
Offline Offline
God Member
*****
Karma: 2
Posts: 802
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Yep!

Code:
import serial, sys, feedparser
#Settings - Change these to match your account details
USERNAME="MAIL"
PASSWORD="PASSWORD"
PROTO="https://"
SERVER="mail.google.com"
PATH="/gmail/feed/atom"
SERIALPORT = "/dev/ttyUSB0" # Change this to your serial port!
# Set up serial port
try:
ser = serial.Serial(SERIALPORT, 9600)
except serial.SerialException:
print "no device connected - exiting"
sys.exit()

newmails = int(feedparser.parse(PROTO + USERNAME + ":" + PASSWORD + "@" + SERVER + PATH)["feed"]["fullcount"])
print newmails

# Output data to serial port
if newmails > 0:
ser.write("m")
print "some mail"
else:
ser.write("n")
print "no mail"
#print data to terminal

reponse = ser.readline()
if reponse:
        print reponse
else:
        pass

# Close serial port
ser.close()

Code:
// led wired + to pin 12, resistor to positive +5v

#define outPin 12

int val;

void setup()
{
 pinMode(outPin, OUTPUT); // sets the digital pin as output
 Serial.begin(9600);
 Serial.flush();
}

void loop()
{
 // Read from serial port
 if (Serial.available()) {
   val = Serial.read();
   delay(2);
   Serial.println(val);

   if (val == 'm')
   {
     digitalWrite(outPin, HIGH);
   }

   else if (val == 'n')
   {
     digitalWrite(outPin, LOW);
   }
 }

  
}

@+

Zoroastre.
« Last Edit: January 27, 2012, 06:01:24 pm by zoroastre » Logged

Veuillez indiquer [RESOLU] dans l'entête du titre en éditant votre premier message smiley-wink

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 77
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 77
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bon, arpès plus de 2h de recherche intensive, le problème n'est toujours pas réglé. Il se trouve que l'on peut allumer et éteindre la led en envoyant 'm' et 'n' avec le moniteur de l'ide arduino, que l'on peut envoyer 'n' et 'm' via idle, ce dernier retournant un mystérieux "1L"...:
Code:
>>> import serial
>>> ser = serial.Serial()
>>> ser.bauderate = 9600
>>> ser.port = "COM3"
>>> ser.open()
>>> ser.write('m')
[color=red]1L[/color]
>>> ser.write('n')
[color=red]1L[/color]
>>>

Le script n'allume et n'éteint pas la led, par contre, lorsqu'on retourne ce que reçoit l'arduino avec printLn(var), le script affiche bien 109 pour 'm', donc en théorie il envoie bien 109 lorsque j'ai un mail...

Bref, tout ça pour dire que ça marche toujours pas, en espérant que vous puissiez m'aider.

PS: Chez Zoroastre, tout fonctionne ! ( forcement, ça doit tomber sur moi  smiley-evil )

Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 77
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Me revoilà ! A force de chercher, on finit par trouver !

Il se trouve en fait que la lib pyserial installée pour que python communique avec arduino, reset la carte quand on ouvre le port où elle est connectée, ainsi que lorsqu'on ferme le port. Bilan: le statut allumé ou éteint de la led est altéré (enfin, lisez ceci vous comprendrez peut être mieux ce que je veux dire: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1274205532 )

Deux solutions s'offrent à nous:

- mettre un time.sleep(2) après l'ouverture du port ET ne pas fermé le port à la fin du script;
- se rendre dans /Lib/site-packages/serial et modifier la ligne du fichier serialWin32.py
Code:
self._dtrState = win32.DTR_CONTROL_ENABLE

par

Code:
self._dtrState = win32.DTR_CONTROL_DISABLE

et vous n'aurez pas besoin du time.sleep ni de retirer le ser.close() (tout bénef en somme !).

Allé, ptit récap final des codes utilisés:

script.py :
Code:
import serial, sys, feedparser, time
#Settings - Change these to match your account details
USERNAME="xxxxx"
PASSWORD="yyyyy"
PROTO="https://"
SERVER="mail.google.com"
PATH="/gmail/feed/atom"
SERIALPORT = "COM3" # Change this to your serial port!
# Set up serial port
try:
ser = serial.Serial(SERIALPORT, 9600)
except serial.SerialException:
print "no device connected - exiting"
sys.exit()

newmails = int(feedparser.parse(PROTO + USERNAME + ":" + PASSWORD + "@" + SERVER + PATH)["feed"]["fullcount"])
print newmails

# Output data to serial port
if newmails > 0:
ser.write('m')
print "some mail"
else:
ser.write('n')
print "no mail"
#print data to terminal

time.sleep(1)

reponse = ser.readline()
if reponse:
        print reponse
else:
        pass

# Close serial port
ser.close()

sketch:
Code:
// led wired + to pin 12, resistor to positive +5v

#define outPin 11

int val;

void setup()
{
 pinMode(outPin, OUTPUT); // sets the digital pin as output
 Serial.begin(9600);
 Serial.flush();
}

void loop()
{
 // Read from serial port
 if (Serial.available()) {
   val = Serial.read();
   delay(2);
   Serial.println(val);

   if (val == 'm')
   {
     digitalWrite(outPin, HIGH);
   }

   else if (val == 'n')
   {
     digitalWrite(outPin, LOW);
   }
 }

  
}

Merci à tous, je vous tiens au courant de la suite !


Edit de Jean-François : mot de passe et username enlevé dans le script Py

[EDIT] Oh... merci ^^ La dernière fois je l'avais vu, mais là j'ai pas fait gaffe...
« Last Edit: January 29, 2012, 12:26:35 pm by Monstercrunch » Logged

Pages: 1 [2]   Go Up
Jump to: