Le pcDuino : Programmer les broches E/S du ... - Mon Club-Elec
Le pcDuino : Programmer les broches E/S du ... - Mon Club-Elec
Le pcDuino : Programmer les broches E/S du ... - Mon Club-Elec
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en<br />
utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino !<br />
Par X. HINAULT – Juin 2013– MAJ : Juin 2013 – www.mon-club-elec.fr<br />
Intro<br />
• Vous devez avoir très envie de tester (enfin!) la programmation des <strong>broches</strong> numériques E/S de votre <strong>pcDuino</strong>. C'est ce que nous allons faire ici.<br />
• Je rappelle ici <strong>les</strong> caractéristiques des <strong>broches</strong> E/S numériques et analogiques <strong>du</strong> <strong>pcDuino</strong> :<br />
◦ GPIO : 18 E/S en 3.3V – Topographie « Ar<strong>du</strong>ino-like »<br />
◦ Entrées Analogiques : 2 x 6 bits en 0-2V et 4 x 12 bits en 0-3.3V<br />
◦ Sorties analogiques : 6 x PWM (2 <strong>broches</strong> « fast » en 520Hz – 8 bits et 4 <strong>broches</strong> « slow » en 5Hz – 20 niveaux)<br />
◦ Comm. Sériel<strong>les</strong> : I2C, SPI, UART<br />
• Comme déjà dit, on retrouve la plupart des possibilités de l'Ar<strong>du</strong>ino à quelques adaptation près. Nous allons commencer par utiliser <strong>les</strong> <strong>broches</strong> E/S<br />
numériques, le plus simple.<br />
Pré-requis<br />
• Je suppose ici que vous avez installé l'éditeur de code Geany et de vous connaissez <strong>les</strong> rudiments de Python, ainsi que le langage Ar<strong>du</strong>ino, bien sûr !<br />
• Si ce n'est pas le cas, voir le tuto précédent.<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 1 / 27
Matériel nécessaire :<br />
◦ une plaque d'essai (ou bread board)<br />
◦ des straps (ou jumpers) mâ<strong>les</strong>/femel<strong>les</strong> simp<strong>les</strong><br />
◦ quelques composants de base, notamment :<br />
▪ LEDs et résistances de 270 Ohms, (qui fera l'affaire bien que l'on soit en 3.3V, car on veut le minimum d'intensité ici...)<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 2 / 27
<strong>Le</strong> brochage <strong>du</strong> <strong>pcDuino</strong><br />
• <strong>Le</strong> brochage est vraiment semblable à celui de l'Ar<strong>du</strong>ino sauf pour :<br />
◦ <strong>les</strong> E/S 14 à 17 qui sont sur bornier séparé<br />
◦ SCL et SDA qui ne sont pas sur A4 et A5 mais séparées (peuvent être mises sur A4/A5 par sou<strong>du</strong>re d'un pont, mais on doit perdre analogique dans ce<br />
cas)<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 3 / 27
Faire des montages avec le <strong>pcDuino</strong><br />
• Il suffit d'utiliser une plaque d'essai et des straps femelle (côté <strong>pcDuino</strong>) /mâle (côté plaque d'essai)<br />
• Utiliser le 3.3V et le 0V pour alimenter la plaque d'essai (et non le 5V..)<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 4 / 27
<strong>Le</strong> bornier d'alimentation<br />
• Pour info, le bornier d'alimentation est le suivant, comme sur l'Ar<strong>du</strong>ino, à la différence près que Vin est connecté au 5V de l'alimentation (n'allez pas y<br />
connecter <strong>du</strong> 12V!!) :<br />
Vue de dessus<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 5 / 27
<strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S numériques en sortie<br />
Où sont-el<strong>les</strong> ?<br />
Caractéristiques électriques<br />
• Ces <strong>broches</strong> fonctionnent en 3,3V ( et pas en 5V) en ne peuvent fournir que quelques mA... donc attention, prudence... !<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 6 / 27
<strong>Mon</strong>tage de test<br />
Principe d'accès aux <strong>broches</strong> E/S<br />
Tout est fichier...<br />
• Comme déjà dit précédemment, <strong>les</strong> <strong>broches</strong> E/S sont gérées par de simp<strong>les</strong> fichiers (c'est un principe général sous Gnu/Linux...). <strong>Le</strong> fichier de chaque<br />
broche est de la forme gpioX où X est le numéro de la broche.<br />
◦ <strong>les</strong> fichiers fixant le mode entrée ou sortie sont placés dans le répertoire :<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 7 / 27
sys/devices/virtual/misc/gpio/mode/<br />
◦ <strong>les</strong> fichiers contenant/définissant l'état des <strong>broches</strong> sont placés dans le répertoire :<br />
/sys/devices/virtual/misc/gpio/pin/<br />
• Ceci est facile à vérifier : ouvrir un terminal sur le <strong>pcDuino</strong> et saisir :<br />
$ cd /sys/devices/virtual/misc/gpio/mode/<br />
$ ls<br />
ce qui donne :<br />
• de la même façon, on peut vérifier l'existence des fichiers d'état des <strong>broches</strong> :<br />
$ cd /sys/devices/virtual/misc/gpio/pin/<br />
$ ls<br />
ce qui donne :<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 8 / 27
Fixer le sens d'une broche :<br />
La version « brute »<br />
Ouvrir l'éditeur Geany et copier/coller ce code d'entête :<br />
#!/usr/bin/python<br />
# -*- coding: utf-8 -*-<br />
On commence par définir le chemin utile dans une variable texte :<br />
pathMode= "/sys/devices/virtual/misc/gpio/mode/"<br />
Pour fixer le sens d'une broche, c'est simple : il suffit d'ouvrir le fichier et d'écrire dedans la valeur voulue :<br />
• ‘0’ pour la broche en entrée = INPUT<br />
• ‘1’ pour la broche en sortie = OUTPUT<br />
• ‘8’ pour la broche en entrée avec rappel au plus activé (pour <strong>les</strong> boutons poussoirs)<br />
On pourra ainsi définir <strong>les</strong> variab<strong>les</strong> correspondantes sous forme de chaînes :<br />
INPUT="0"<br />
OUTPUT="1"<br />
PULLUP="8"<br />
Ensuite, il suffit d'écrire dans le fichier gpio2 pour fixer le sens de la broche 2 selon :<br />
# fixe l'état de la broche<br />
file=open(pathMode+"gpio2",'w') # ouvre le fichier en écriture<br />
file.write(OUTPUT)<br />
file.close()<br />
Voici le code complet à copier/coller dans Geany côté <strong>pcDuino</strong> :<br />
#!/usr/bin/python<br />
# -*- coding: utf-8 -*-<br />
# -- déclarations --<br />
pathMode="/sys/devices/virtual/misc/gpio/mode/"<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 9 / 27
pathState="/sys/devices/virtual/misc/gpio/pin/"<br />
INPUT="0"<br />
OUTPUT="1"<br />
PULLUP="8"<br />
# fixe l'état de la broche<br />
file=open(pathMode+"gpio2",'w') # ouvre le fichier en écriture<br />
file.write(OUTPUT)<br />
file.close()<br />
Lancer l'exécution :<br />
On obtient une fenêtre de console vide : il ne se passe rien, mais votre programme ne pro<strong>du</strong>it pas d'erreur.<br />
La version « Ar<strong>du</strong>ino-like »<br />
• OK, là je vous vois faire de grands yeux... A ce jeu là, çà va vite devenir compliqué... envie de simplement coder pinMode(broche, sens) ? J'ai la solution...<br />
J'ai écrit la librairie Python qui va bien et qui fait le job...<br />
Installer la librairie Py<strong>du</strong>ino<br />
• La librairie, qui est en fait un simple fichier, est ici : https://github.com/sensor56/pyDuino/blob/master/pc<strong>du</strong>ino/ar<strong>du</strong>ino.py<br />
En tant que mo<strong>du</strong>le Python : la meilleure solution<br />
• Première solution, la meilleure : installer la librairie en tant que mo<strong>du</strong>le Python, ce qui se fait en 2 lignes de commandes simp<strong>les</strong> :<br />
$ cd /usr/lib/python2.7/dist-packages<br />
$ sudo wget -N https://raw.github.com/sensor56/pyDuino/master/pc<strong>du</strong>ino/py<strong>du</strong>ino.py<br />
Ou copier la librairie Py<strong>du</strong>ino dans le répertoire de vos scripts Python<br />
• Seconde solution : Copier/coller simplement ce fichier dans le répertoire de vos scripts Python en l'enregistrant sous le nom ar<strong>du</strong>ino.py. En ligne de<br />
commande, dans un terminal sur le pc<strong>du</strong>ino, çà donne :<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 10 /<br />
27
$ mkdir scripts_python<br />
$ cd scripts_python<br />
$ wget https://raw.github.com/sensor56/pyDuino/master/pc<strong>du</strong>ino/ar<strong>du</strong>ino.py<br />
• <strong>Le</strong> fichier doit être présent de la sorte :<br />
En savoir plus<br />
• Plus de détails sur la procé<strong>du</strong>re d'installation ici : http://www.mon-club-elec.fr/pmwiki_reference_py<strong>du</strong>ino/pmwiki.php?n=Main.DebuterInstallation<br />
<strong>Le</strong> code minimum<br />
• Voilà, une fois fait, vous allez retomber sur vos pieds : commencer par saisir le code minimum suivant :<br />
#!/usr/bin/python<br />
# -*- coding: utf-8 -*-<br />
# exemple pyDuino - par X. HINAULT<br />
# code minimal<br />
from ar<strong>du</strong>ino import * # importe <strong>les</strong> fonctions Ar<strong>du</strong>ino pour Python<br />
# entete declarative<br />
#--- setup ---<br />
def setup():<br />
return<br />
# -- fin setup --<br />
# -- loop --<br />
def loop():<br />
return<br />
# -- fin loop --<br />
#--- obligatoire pour lancement <strong>du</strong> code --<br />
if __name__=="__main__": # pour rendre le code executable<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 11 /<br />
27
setup() # appelle la fonction setup<br />
while(1): loop() # appelle fonction loop sans fin<br />
• Remarquer la structure <strong>du</strong> code :<br />
Code final<br />
◦ une entête obligatoire dans un code Python<br />
◦ la ligne d'importation <strong>du</strong> fichier ar<strong>du</strong>ino.py<br />
◦ la fonction setup et la fonction loop : noter ici la présence de l'instruction return qui sert uniquement à ne pas laisser la fonction vide...<br />
◦ une section finale obligatoire dans tout code Python exécutable et ici complétée pour l'exécution des fonctions setup() et loop() à la façon Ar<strong>du</strong>ino.<br />
Gardez ce code sous le coude : vous pourrez démarrer tous vos nouveaux codes avec. Il est ici :<br />
https://github.com/sensor56/pyDuino/blob/master/pc<strong>du</strong>ino/exemp<strong>les</strong>/1.Basics/BareMinimum.py<br />
• Du coup, notre programme devient assez semblable à ce que vous feriez dans l'IDE Ar<strong>du</strong>ino (avec la syntaxe Python cependant... plus simple en fait... ) :<br />
#!/usr/bin/python<br />
# -*- coding: utf-8 -*-<br />
# exemple pyDuino - par X. HINAULT - www.mon-club-elec.fr<br />
# voir : https://github.com/sensor56/pyDuino<br />
# test pinMode<br />
from py<strong>du</strong>ino import * # importe <strong>les</strong> fonctions Ar<strong>du</strong>ino pour Python<br />
# entete declarative<br />
#--- setup ---<br />
def setup():<br />
pinMode(2,OUTPUT) # met la broche en sortie<br />
Serial.println("La broche 2 est en sortie !")<br />
# -- fin setup --<br />
# -- loop --<br />
def loop():<br />
return<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 12 /<br />
27
# -- fin loop --<br />
#--- obligatoire pour lancement <strong>du</strong> code --<br />
if __name__=="__main__": # pour rendre le code executable<br />
setup() # appelle la fonction setup<br />
while(1): loop() # appelle fonction loop sans fin<br />
Lancer l'exécution :<br />
On obtient :<br />
• Cool non ? Bon ben le plus <strong>du</strong>r est fait... <strong>Le</strong>s bases sont posées ! Allez, on continue.<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 13 /<br />
27
Allumer une LED<br />
Version « brute »<br />
Pour allumer une LED il faut écrire la valeur voulue dans le fichier gpioX <strong>du</strong> répertoire /../pin/ présenté ci-dessus :<br />
• « 0 » pour mettre au niveau bas = LOW<br />
• « 1 » pour mettre au niveau haut = HIGH<br />
Pour allumer la LED sur la broche 2 , il suffit alors, une fois la broche en sortie, d'écrire la valeur 1 dans le fichier gpio2 :<br />
# allume la LED<br />
file=open(pathState+"gpio2",'w') # ouvre le fichier en lecture<br />
file.write(HIGH)<br />
file.close()<br />
On obtient le code complet suivant :<br />
#!/usr/bin/python<br />
# -*- coding: utf-8 -*-<br />
import time<br />
# -- déclarations --<br />
pathMode="/sys/devices/virtual/misc/gpio/mode/"<br />
pathState="/sys/devices/virtual/misc/gpio/pin/"<br />
INPUT="0"<br />
OUTPUT="1"<br />
PULLUP="8"<br />
HIGH = "1"<br />
LOW = "0"<br />
# fixe l'état de la broche<br />
file=open(pathMode+"gpio2",'w') # ouvre le fichier en écriture<br />
file.write(OUTPUT)<br />
file.close()<br />
# allume la LED<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 14 /<br />
27
file=open(pathState+"gpio2",'w') # ouvre le fichier en écriture<br />
file.write(HIGH)<br />
file.close()<br />
Lancer l'exécution :<br />
On obtient la LED allumée. Cool.<br />
Version « Ar<strong>du</strong>ino-like »<br />
Vous risquez de préférer une nouvelle fois l'utilisation de la version « Ar<strong>du</strong>ino-like » : je suppose ici que vous avez enregistré une copie de ma librairie des<br />
instructions pour Python, ar<strong>du</strong>ino.py, que j'ai présenté précédemment, dans le répertoire de vos scripts Python. La librairie, qui est en fait un simple fichier, est ici :<br />
https://github.com/sensor56/pyDuino/blob/master/pc<strong>du</strong>ino/ar<strong>du</strong>ino.py<br />
La procé<strong>du</strong>re d'installation complète de la librairie Py<strong>du</strong>ino est décrite ci-dessus et ici : http://www.mon-club-elec.fr/pmwiki_reference_py<strong>du</strong>ino/pmwiki.php?<br />
n=Main.DebuterInstallation<br />
Pour allumer la LED, on va faire tout ce qu'il y a de plus classique en langage Ar<strong>du</strong>ino :<br />
#!/usr/bin/python<br />
# -*- coding: utf-8 -*-<br />
# exemple Py<strong>du</strong>ino - par X. HINAULT - www.mon-club-elec.fr<br />
# voir : https://github.com/sensor56/pyDuino<br />
# test digitalWrite<br />
from py<strong>du</strong>ino import * # importe <strong>les</strong> fonctions Ar<strong>du</strong>ino pour Python<br />
# entete declarative<br />
LED=2 # declare la broche a utiliser<br />
#--- setup ---<br />
def setup():<br />
pinMode(LED,OUTPUT) # met la broche en sortie<br />
Serial.println("La broche 2 est en sortie !")<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 15 /<br />
27
digitalWrite(LED,HIGH) # allume la LED<br />
Serial.println("La LED est allumée !")<br />
# -- fin setup --<br />
# -- loop --<br />
def loop():<br />
return<br />
# -- fin loop --<br />
#--- obligatoire pour lancement <strong>du</strong> code --<br />
if __name__=="__main__": # pour rendre le code executable<br />
setup() # appelle la fonction setup<br />
while(1): loop() # appelle fonction loop sans fin<br />
Lancer l'exécution :<br />
On obtient :<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 16 /<br />
27
Capture VNC <strong>du</strong> bureau <strong>du</strong> <strong>pcDuino</strong> qui « voit » la LED grâce à une webcam... Cool non ?<br />
• On a le message dans le Terminal comme on l'aurait avec le terminal Série d'Ar<strong>du</strong>ino (ici c'est une émulation de Terminal série en fait, car tout se passe <strong>du</strong><br />
côté <strong>du</strong> <strong>pcDuino</strong>...) et surtout notre LED s'allume...<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 17 /<br />
27
Faire clignoter une LED<br />
Version « brute »<br />
A présent, nous allons successivement mettre la LED au niveau HAUT, patienter 1 seconde, la mettre au niveau BAS, patienter un seconde et ainsi de suite.<br />
Pour réaliser une boucle sans fin, il suffit d'utiliser l'instruction while(1). Pour réaliser une pause, il suffit d'utiliser la fonction sleep() <strong>du</strong> mo<strong>du</strong>le time.<br />
On obtient donc le code Python suivant :<br />
#!/usr/bin/python<br />
# -*- coding: utf-8 -*-<br />
import time<br />
# -- déclarations --<br />
pathMode="/sys/devices/virtual/misc/gpio/mode/"<br />
pathState="/sys/devices/virtual/misc/gpio/pin/"<br />
INPUT="0"<br />
OUTPUT="1"<br />
PULLUP="8"<br />
HIGH = "1"<br />
LOW = "0"<br />
#--- setup ---<br />
# fixe l'état de la broche<br />
file=open(pathMode+"gpio2",'w') # ouvre le fichier en écriture<br />
file.write(OUTPUT)<br />
file.close()<br />
# -- loop --<br />
while(1): # boucle sans fin<br />
# allume la LED<br />
file=open(pathState+"gpio2",'w') # ouvre le fichier en écriture<br />
file.write(HIGH)<br />
file.close()<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 18 /<br />
27
time.sleep(1) # pause en secondes<br />
# allume la LED<br />
file=open(pathState+"gpio2",'w') # ouvre le fichier en lecture<br />
file.write(LOW)<br />
file.close()<br />
time.sleep(1) # pause en secondes<br />
# fin while<br />
Version « Ar<strong>du</strong>ino-like »<br />
Bien, bien... comme çà vous voyez comment on fait en Python « brut »... Mais encore une fois, voici la version « Ar<strong>du</strong>ino-like » avec instruction delay() et tout et<br />
tout... Je suppose toujours ici que vous avez le fichier de ma lib' Python dans le même répertoire que votre script... Je le redis, au cas où...<br />
La procé<strong>du</strong>re d'installation complète de la librairie Py<strong>du</strong>ino est décrite ci-dessus et ici : http://www.mon-club-elec.fr/pmwiki_reference_py<strong>du</strong>ino/pmwiki.php?<br />
n=Main.DebuterInstallation<br />
Côté code, encore une fois, tout ce qu'il y a de plus classique : digitalWrite.. delay... digitalWrite... delay... ce qui nous donne :<br />
#!/usr/bin/python<br />
# -*- coding: utf-8 -*-<br />
# exemple pyDuino - par X. HINAULT - www.mon-club-elec.fr<br />
# voir : https://github.com/sensor56/pyDuino<br />
# LED clignote<br />
from py<strong>du</strong>ino import * # importe <strong>les</strong> fonctions Ar<strong>du</strong>ino pour Python<br />
# entete declarative<br />
LED=2 # declare la broche a utiliser<br />
#--- setup ---<br />
def setup():<br />
pinMode(LED,OUTPUT) # met la broche en sortie<br />
Serial.println("La broche " +str(LED)+ " est en sortie !")<br />
# -- fin setup --<br />
# -- loop --<br />
def loop():<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 19 /<br />
27
digitalWrite(LED,HIGH) # allume la LED<br />
Serial.println("La LED est allumée !")<br />
delay(1000) # pause en millisecondes<br />
digitalWrite(LED,LOW) # eteint la LED<br />
Serial.println("La LED est éteinte !")<br />
delay(1000) # pause en millisecondes<br />
# -- fin loop --<br />
#--- obligatoire pour lancement <strong>du</strong> code --<br />
if __name__=="__main__": # pour rendre le code executable<br />
setup() # appelle la fonction setup<br />
while(1): loop() # appelle fonction loop sans fin<br />
Ce code est ici : https://github.com/sensor56/pyDuino/blob/master/pc<strong>du</strong>ino/exemp<strong>les</strong>/1.Basics/Blink.py<br />
En ligne de commande faire sur le pc<strong>du</strong>ino :<br />
$ cd scripts_python<br />
$ wget https://raw.github.com/sensor56/pyDuino/master/pc<strong>du</strong>ino/exemp<strong>les</strong>/1.Basics/Blink.py<br />
Lancer l'exécution :<br />
On obtient :<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 20 /<br />
27
• Je sais pas pour vous, mais moi çà m'éclate ce truc : je code sur un PC en Python et j'ai l'impression de faire <strong>du</strong> « vrai » Ar<strong>du</strong>ino... Là, je suis content de<br />
mon coup ! Pas mal ma petite lib'... bon, faut encore que je l'enrichisse , mais <strong>les</strong> bases sont posées...<br />
• Tiens, un petit test pour la forme : à quelle vitesse maximum il peut le faire le <strong>pcDuino</strong> (clignoter la LED...) ?? Allez, j'enlève <strong>les</strong> delay et je branche<br />
l'oscillo :<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 21 /<br />
27
• Je trouve 90µs pour chaque « écriture » en mémoire NAND soit donc 180µs de période minimale (écriture x2 ) soit 5555 Hz et des poussières...<br />
Donc on va dire que c'est correct pour un système Gnu/Linux qui fait de l'accès « hardware »... en tout cas largement satisfaisant pour la plupart des besoins<br />
usuels...<br />
Comment exécuter un programme de façon autonome ?<br />
• Problème : quand je stoppe ferme la fenêtre Terminal de Geany, mon programme arrêt de fonctionner ! Comment faire pour l'exécuter de façon autonome ?<br />
<strong>Le</strong>s choses sont assez simple comme vous allez le voir.<br />
• Une fois que vous avez enregistrer votre fichier, il faut le rendre exécutable :<br />
◦ ouvrez le répertoire où il se trouve et faîtes un clic droit dessus et sélectionner l'option propriétés ou Properties :<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 22 /<br />
27
◦ dans la fenêtre qui s'ouvre, aller dans l'onglet « permissions » et cocher la case « Rendre le fichier exécutable » ou « make the file executable » :<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 23 /<br />
27
• Ensuite validez. A présent pour exécuter votre code, vous pouvez simplement double cliquer dessus : vous obtenez alors cette fenêtre :<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 24 /<br />
27
• Cliquer sur Executer : votre code est lancé et ne ne s'arrêtera plus jusqu'à nouvel ordre ou extinction <strong>du</strong> mini-PC.<br />
• Pour stopper le programme, saisir la commande dans un Terminal :<br />
$ killall nomCode.py<br />
soit dans mon cas :<br />
$ killall Blink.py<br />
• Il est également possible de lancer un programme en ligne de commande :<br />
$ cd chemin/repertoire<br />
$ ./nomprog<br />
ce qui dans mon cas donne :<br />
$ cd scripts_python<br />
$ ./Blink.py<br />
Cette façon de faire est intéressante car vous obtenez <strong>les</strong> messages dans le Terminal :<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 25 /<br />
27
Remarque : il est possible de cette façon d'exécuter plusieurs codes Python en même temps contrôlant <strong>les</strong> <strong>broches</strong> E/S, indépendants <strong>les</strong> uns des<br />
autres !! Il faut simplement qu'il n'utilisent pas <strong>les</strong> mêmes ressources pour éviter <strong>les</strong> problèmes.<br />
• Il est également possible de créer un lanceur sur le bureau pour lancer directement l'application...<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 26 /<br />
27
Comment lancer un programme Py<strong>du</strong>ino ou Python automatiquement au démarrage ?<br />
• Il est enfin possible de lancer le programme voulu automatiquement au lancement <strong>du</strong> mini-PC : imaginons que l'on veuille lancer au démarrage notre script<br />
Blink.py... On commencer par éditer le fichier d'autostart de Lubuntu, à savoir :<br />
$ sudo geany /etc/xdg/lxsession/Lubuntu/autostart<br />
Pour info :<br />
$ sudo geany /etc/xdg/lxsession/LXDE/autostart (sur le RaspbderryPi sous Raspbian)<br />
• Ensuite, on ajoute la ligne à ce fichier :<br />
@python /home/user/scripts_python/Blink.py<br />
• Redémarrer : la LED doit clignoter au démarrage suivant !<br />
Conclusion<br />
• Voilà, vous savez utiliser <strong>les</strong> <strong>broches</strong> <strong>du</strong> <strong>pcDuino</strong> à la façon Ar<strong>du</strong>ino... tout en codant en Python ! Cool non ? Allez, on continue : <strong>les</strong> <strong>broches</strong> numériques en<br />
entrée et l'utilisation <strong>du</strong> bouton poussoir avec le <strong>pcDuino</strong>, c'est dans le prochain tuto...<br />
Liens uti<strong>les</strong><br />
• https://learn.sparkfun.com/tutorials/programming-the-pc<strong>du</strong>ino/your-first-program<br />
<strong>Le</strong> <strong>pcDuino</strong> : <strong>Programmer</strong> <strong>les</strong> <strong>broches</strong> E/S <strong>du</strong> <strong>pcDuino</strong> en sortie avec Python tout en utilisant <strong>les</strong> instructions Ar<strong>du</strong>ino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 27 /<br />
27