truc2geek

2013/05/11

Python, Arduino et PySerial : communication série

Filed under: Arduino, Programmation, Python — Étiquettes : , , , , , , , , , — truc2geek @ 16:32

Aujourd’hui on va aborder un nouveau sujet : Arduino.
Et comme on aime toujours le Python, on va utiliser les deux ensemble.

Arduino, pySerial

présentation

Voici le lien vers le site officiel (en anglais) : http://www.arduino.cc/
En gros, c’est une carte de prototypage open source, destinée par exemple aux artistes, amateurs DIY…

La communication série est un standard.
Par ce protocole, un programme Arduino qui s’exécute sur la carte Arduino peut accéder à toutes les ressources du PC (clavier, souris…) ; et un programme qui s’exécute sur le PC peut avoir accès par exemple à un capteur connecté à l’Arduino.

Pour que notre appli Python puisse communiquer via le port série, il faut utiliser une bibliothèque tierce : pySerial.

installer pySerial

installeur pour windows, pour la version 2.5 de pySerial, disponible ici.

Vous trouverez un mode opératoire (en anglais) ici, sur le site Instructables.com :

extraire les fichiers du .tar.gz dans C:\Python27\Lib\site-packages\pyserial-2.6
lancer console DOS
en considérant que Python 27 est installé directement dans le disque C :
taper « cd \d C:\Python27\Lib\site-packages\pyserial-2.6 »
puis « c:\Python27\python.exe setup.py install »

le projet

Ici, le but étant uniquement d’établir une communication, on va se contenter d’un cas très simple : faire clignoter la led de
test présente sur l’Arduino, un certain nombre de fois, nombre qu’on enverra par le moniteur série de l’environnement Arduino.

environnement :
PC sous Windows 7
Arduino 1.0.4
Python 2.7.3
pySerial 2.6
carte Arduino Uno rev. 3

programme Arduino

02.gif

ligne 5, on définit une constante à laquelle on indique le numéro de patte 13 : correspond à la led de test de l’Arduino Uno.

lignes 8 à 12, on initialise l’application : on définit que le port série va communiquer à 9600 bauds, et que la patte 13 sera
utilisée comme une sortie.

lignes 15 à 29, on traite en permanence les données reçues par le port série ; chaque fois qu’on reçoit un chiffre supérieur à 0,
on appelle la fonction Clignoter.

lignes 32 à 41, on exécute x fois la séquence suivante : allumer la led, attendre 1 seconde, éteindre la led, attendre 1/2 seconde.

Ce code est disponible ici.

dans l’IDE Arduino, on vérifie le code : clic sur ‘Vérifier’.
si tout se passe bien, on a ce message :
03.gif

on connecte l’Arduino au PC, clic sur ‘Téléverser’ : la phase de compilation est effectuée de nouveau, puis le programme est chargé
dans l’Arduino.

on ouvre le moniteur série (‘Outils’, ‘Moniteur série’), on entre un chiffre dans la zone de saisie et ‘envoyer’.
la led clignote.
04.gif

on a parlé de chiffre de 1 à 9, que se passe-t-il si on envoie 22 par exemple?
la led clignote 4 fois, parce que les données qui sont reçues par le port série sont lues un caractère par un caractère.

programme Python

05-1.gif
05-2.gif
05-3.gif
05-4.gif
05-5.gif
05-6.gif
05-7.gif
05-8.gif
05-9.gif

le menu principal permet d’accéder aux paramètres de l’application et de tester la communication série.
06.gif

le menu des paramètres :
07.gif

on peut entre le numéro, de 1 à 3, pour modifier un paramètre, par exemple taper ‘2’ puis ‘entrée’ pour modifier le ‘BaudRate’ :
08.gif

un message s’affiche puis on retourne au menu des paramètres :
09.gif
10.gif

redéfinir le ‘BaudRate’ à 9600, puisqu’il est défini à cette valeur dans l’application Arduino.
on connecte l’Arduino au PC.
tester maintenant la communication série :
11.gif

on entre une valeur, on valide : la led de l’Arduino clignote (ici 5 fois), et on peut de nouveau entrer une valeur et valider,
ou entrer ‘F’ (ou ‘f’, en minuscule, même si ce n’est pas précisé) pour sortir de la fonction de test.
12.gif

point sur la fonction Aide :
déclenche l’ouverture du ‘mode d’emploi’, qui est un simple fichier texte (extension ‘.txt’), avec le programme associé par défaut
à ce type de fichier.

l’application Python est disponible ci-dessous, en deux versions :

V1.1, 22/05/2013 : deux liens : l’application et le mode d’emploi.
V1.0, 10/05/2013 : deux liens : l’application et le mode d’emploi.

Note sur ces deux versions :
la V1.0 est celle dont le code est affiché dans cet article, elle contient un bug : la fonction TestComSerie() ne tient pas compte des valeurs des paramètres, elle utilise des valeurs en dur (2, 9 600 et 1)
La V1.1 corrige cette erreur, et le mode opératoire donne plus d’informations sur les paramètres.

Voilà pour cette première étape avec Arduino, à suivre…

Publicités

Un commentaire »

  1. J’ai essayé sur une arduino(funduino) mega 2560 et windows 7
    Pour que ça marche j’ai dû supprimer le int dans la ligne 414 : ser.write(int(vSaisie)) pour faire ser.write(vSaisie). Et après tout a marché impeccable !
    J’apprécie fortement d’avoir cet exemple ! Ca me plaît de piloter une carte arduino avec python (et donc Pyserial). C’est le genre d’exemple que je cherchais…
    Merci !

    Commentaire par alias — 2013/11/15 @ 04:30


RSS feed for comments on this post. TrackBack URI

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Propulsé par WordPress.com.

%d blogueurs aiment cette page :