Communication Arduino-Python

Bonjour!

Je débute en arduino et python, et j'aimerais faire un petit programme permettant à l'arduino d'envoyer en temps réel des données de capteurs.

J'ai tout d'abord essayé d'envoyer "12" en boucle avec l'arduino, ce qui fonctionne et renvoie "ok" lorsque mon programme python le lit. Voilà le bout de code python concerné:

	if int(arduino.readline()) == 12:
		print 'ok'
	else :
		print'no'

Le programme me retourne alors plusieurs fois ok puis une erreur, voilà un extrait de mon terminal:

ok
ok
ok
ok
Traceback (most recent call last):
  File "./test.py", line 29, in <module>
    if int(arduino.readline()) == 12:
ValueError: invalid literal for int() with base 10: '12\r\xfe12\r\n'

Comme si des caractères "\r" etc s'étaient introduits. Je n'ai pas réussi à comprendre d'où cela venait, si vous pouvez m'éclairer...

Merci,
Composite

Bonjour et bienvenue,

Je pense que c'est ta méthode de parsing ( if int(arduino.readline()) == 12 ) qui est un peu barbare.

Pourquoi ne pas utiliser la fonction parse() que propose python? Ou d'autres méthodes, le choix ne manque pas, il suffit de chercher un peu sur google.

Moi je peux te donner ça :
http://www.isn.cligniez.fr/ressources/arduino-python.pdf
Bon courage!

Bonjour, je viens de réaliser ce meme projet: sonde de temperature sur Arduino, communication avec RPI par I2C en Python et affichage sur page web en websocket.

Regarde mon post: Affichage temperature sur page web - Français - Arduino Forum

Je suis à ta disposition pour le code et si besoin d' informations.

J'ai modifié le code que j' ai posté depuis :wink:

Fabrice

Bonjour!

Merci pour vos réponses. Après avoir testé de nouvelles choses, je ne comprends pas vraiment de quoi vient l'erreur. Finalement, j'ai modifié le code python ainsi:

donnee = str(arduino.readline())
print donnee

et j'obtiens dans mon terminal quelques 12 puis:

12

12

12

12

Traceback (most recent call last):
File "./test.py", line 28, in
donnee = str(arduino.readline())
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 453, in read
buf = os.read(self.fd, size-len(read))
OSError: [Errno 11] Resource temporarily unavailable


Autre test:

Code python modifié:
if (arduino.inWaiting()>0):
donnee = str(arduino.readline())
print donnee
sleep(.1)

Terminal:
12

12

12

Traceback (most recent call last):
File "./test.py", line 29, in
donnee = str(arduino.readline())
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 460, in read
raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)

Ces erreurs me laissent perplexe.

J'en profite pour préciser que j'utilise python2.

Merci à tous,
Compos

Tu envoie comment? avec I2C? si oui tu as mis des resistances de pull up sur sda et scl?

Je ne me souviens plus en detail mais il ne faut pas solliciter l' arduino trop rapidement entre 2 request sinon il n' arrive pas a suivre, essaye d' augmenter le delay entre 2 lecture.