04.09.2013 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!