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...
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.
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.
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
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?)
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.