Le pcDuino : Programmer les broches E/S du - Mon Club-Elec

publicité
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en
utilisant les instructions Arduino !
Par X. HINAULT – Juin 2013– MAJ : Juin 2013 – www.mon-club-elec.fr
Intro
•
Après avoir vu précédemment comment utiliser les broches numériques en sortie, je vous propose de voir à présent comment utiliser les broches
numériques en entrée, notamment avec le bouton poussoir.
•
Je rappelle ici les caractéristiques des broches E/S numériques et analogiques du pcDuino :
◦ GPIO : 18 E/S en 3.3V – Topographie « Arduino-like »
◦ Entrées Analogiques : 2 x 6 bits en 0-2V et 4 x 12 bits en 0-3.3V
◦ Sorties analogiques : 6 x PWM (2 broches « fast » en 520Hz – 8 bits et 4 broches « slow » en 5Hz – 20 niveaux)
◦ Comm. Sérielles : I2C, SPI, UART
•
Comme déjà dit, on retrouve la plupart des possibilités de l'Arduino à quelques adaptation près.
Pré-requis
Installer l'éditeur Geany
•
Je suppose ici que vous avez installé l'éditeur de code Geany et que vous connaissez les rudiments de Python, ainsi que le langage Arduino, bien sûr !
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 1 / 18
•
Si ce n'est pas le cas, voir les tutos précédents. Voir également : http://www.mon-club-elec.fr/pmwiki_reference_pyduino/pmwiki.php?
n=Main.DebuterPresentationLogiciel
Installer la librairie Pyduino
•
La librairie, qui est en fait un simple fichier, est ici : https://github.com/sensor56/pyDuino/blob/master/pcduino/arduino.py
En tant que module Python : la meilleure solution
•
Première solution, la meilleure : installer la librairie en tant que module Python, ce qui se fait en 2 lignes de commandes simples :
$ cd /usr/lib/python2.7/dist-packages
$ sudo wget -N https://raw.github.com/sensor56/pyDuino/master/pcduino/pyduino.py
Ou copier la librairie Pyduino dans le répertoire de vos scripts Python
•
Seconde solution : Copier/coller simplement ce fichier dans le répertoire de vos scripts Python en l'enregistrant sous le nom arduino.py. En ligne de
commande, dans un terminal sur le pcduino, çà donne :
$ mkdir scripts_python
$ cd scripts_python
$ wget https://raw.github.com/sensor56/pyDuino/master/pcduino/arduino.py
•
Le fichier doit être présent de la sorte :
En savoir plus
•
Plus de détails sur la procédure d'installation ici : http://www.mon-club-elec.fr/pmwiki_reference_pyduino/pmwiki.php?n=Main.DebuterInstallation
Matériel nécessaire :
◦ une plaque d'essai (ou bread board)
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 2 / 18
◦ des straps (ou jumpers) mâles/femelles simples
◦ quelques composants de base, notamment :
▪ bouton poussoir,
Le brochage du pcDuino
•
Le brochage est vraiment semblable à celui de l'Arduino sauf pour :
◦ les E/S 14 à 17 qui sont sur bornier séparé
◦ SCL et SDA qui ne sont pas sur A4 et A5 mais séparées (peuvent être mises sur A4/A5 par soudure d'un pont, mais on doit perdre analogique dans ce
cas)
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 3 / 18
Faire des montages avec le pcDuino
•
Il suffit d'utiliser une plaque d'essai et des straps femelle (côté pcDuino) /mâle (côté plaque d'essai)
•
Utiliser le 3.3V et le 0V pour alimenter la plaque d'essai (et non le 5V..)
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 4 / 18
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 5 / 18
Programmer les broches E/S numériques en entrée
Où sont-elles ?
Caractéristiques électriques
•
Ces broches fonctionnent en 3,3V ce qui est sans importance dans le cas d'une utilisation en entrée avec un bouton poussoir.
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 6 / 18
Rappel sur le bouton poussoir
•
L'utilisation d'un bouton poussoir nécessite que la broche numérique :
◦ soit configurée en entrée
◦ soit rappelée au plus par une résistance, appelée « rappel au plus » ou « pull-up », ce qui se fera ici en interne par la définition du mode « pull-up » par
écriture dans un fichier de configuration.
•
D'autre part, la détection de l'appui du bouton poussoir va nécessiter de lire l'état de la broche à intervalle régulier.
Montage de test
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 7 / 18
Principe d'accès aux broches E/S
Tout est fichier...
•
Comme déjà dit précédemment, les broches E/S sont gérées par de simples fichiers. Le fichier de chaque broche est de la forme gpioX où X est le numéro
de la broche.
◦ les fichiers fixant le mode entrée ou sortie sont placés dans le répertoire :
/sys/devices/virtual/misc/gpio/mode/
◦ les fichiers contenant/définissant l'état des broches sont placés dans le répertoire :
/sys/devices/virtual/misc/gpio/pin/
•
Ceci est facile à vérifier : ouvrir un terminal sur le pcDuino et saisir :
$ cd /sys/devices/virtual/misc/gpio/mode/
$ ls
ce qui donne :
•
de la même façon, on peut vérifier l'existence des fichiers d'état des broches :
$ cd /sys/devices/virtual/misc/gpio/pin/
$ ls
ce qui donne :
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 8 / 18
Fixer le sens d'une broche en entrée avec « pull-up » activé:
La version « brute »
Ouvrir l'éditeur Geany et copier/coller ce code d'entête :
#!/usr/bin/python
# -*- coding: utf-8 -*-
On commence par définir le chemin utile dans une variable texte :
pathMode= "/sys/devices/virtual/misc/gpio/mode/"
Pour fixer le sens d'une broche, c'est simple : il suffit d'ouvrir le fichier et d'écrire dedans la valeur voulue :
•
‘0’ pour la broche en entrée = INPUT
•
‘1’ pour la broche en sortie = OUTPUT
•
‘8’ pour la broche en entrée avec rappel au plus activé = PULLUP (pour les boutons poussoirs). C'est nickel, le pullup est disponible sur les broches
d'emblée !
On pourra ainsi définir les variables correspondantes sous forme de chaînes :
INPUT="0"
OUTPUT="1"
PULLUP="8"
Ensuite, il suffit d'écrire dans le fichier gpio2 pour fixer le sens de la broche 2 selon :
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 9 / 18
# fixe l'état de la broche
file=open(pathMode+"gpio2",'w') # ouvre le fichier en écriture
file.write(PULLUP)
file.close()
Voici le code complet :
#!/usr/bin/python
# -*- coding: utf-8 -*-
# -- déclarations -pathMode="/sys/devices/virtual/misc/gpio/mode/"
pathState="/sys/devices/virtual/misc/gpio/pin/"
INPUT="0"
OUTPUT="1"
PULLUP="8"
# fixe l'état de la broche
file=open(pathMode+"gpio2",'w') # ouvre le fichier en écriture
file.write(PULLUP)
file.close()
Lancer l'exécution :
On obtient une fenêtre de console vide : il ne se passe rien, mais votre programme ne produit pas d'erreur.
La version « Arduino-like » :
Rappel du programme minimal
•
Je vous rappelle le code minimum « Arduino-like » avec ma librairie arduino.py :
#!/usr/bin/python
# -*- coding: utf-8 -*-
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 10 / 18
# exemple pyDuino - par X. HINAULT
# code minimal
from pyduino import * # importe les fonctions Arduino pour Python
# entete declarative
#--- setup --def setup():
return
# -- fin setup -# -- loop -def loop():
return
# -- fin loop -#--- obligatoire pour lancement du code -if __name__=="__main__": # pour rendre le code executable
setup() # appelle la fonction setup
while(1): loop() # appelle fonction loop sans fin
•
Remarquer la structure du code :
◦ une entête obligatoire dans un code Python
◦ la ligne d'importation du fichier arduino.py
◦ 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...
◦ 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 Arduino.
Gardez ce code sous le coude : vous pourrez démarrer tous vos nouveaux codes avec. Il est ici :
https://github.com/sensor56/pyDuino/blob/master/pcduino/exemples/1.Basics/BareMinimum.py
•
Du coup, notre programme devient :
#!/usr/bin/python
# -*- coding: utf-8 -*# exemple Pyduino - par X. HINAULT - www.mon-club-elec.fr
# Juin 2013 - Tous droits réservés - GPLv3
# voir : https://github.com/sensor56/pyDuino
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 11 / 18
# test pinMode pullup
from pyduino import * # importe les fonctions Arduino pour Python
# entete declarative
#--- setup --def setup():
pinMode(2,PULLUP) # met la broche en entrée avec "rappel au plus" actif
Serial.println("La broche 2 est en entrée avec rappel au plus actif!")
# -- fin setup -# -- loop -def loop():
return
# -- fin loop -#--- obligatoire pour lancement du code -if __name__=="__main__": # pour rendre le code executable
setup() # appelle la fonction main
while(1): loop() # appelle fonction loop sans fin
Lancer l'exécution :
On obtient :
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 12 / 18
•
OK, on continue... Reste plus qu'à lire l'état de la broche...
Lire l'état d'une broche en entrée
Version « brute »
Pour connaître l'état d'une broche, il faut tout simplement lire la valeur voulue dans le fichier gpioX du répertoire /../pin/ présenté ci-dessus :
•
Si la valeur « 0 » est présente, la broche est au niveau bas = LOW
•
Si la valeur « 1 » est présente, la broche est au niveau haut = HIGH
Pour lire l'état de la broche 2, il suffit de lire la valeur dans le fichier gpio2, la broche étant configurée en entrée :
# lit l'etat de la broche
file=open(pathState+"gpio2",'r') # ouvre le fichier en lecture
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 13 / 18
print (file.read())
file.close()
On obtient le code complet suivant :
#!/usr/bin/python
# -*- coding: utf-8 -*# -- déclarations -pathMode="/sys/devices/virtual/misc/gpio/mode/"
pathState="/sys/devices/virtual/misc/gpio/pin/"
INPUT="0"
OUTPUT="1"
PULLUP="8"
HIGH = "1"
LOW = "0"
# fixe l'état de la broche
file=open(pathMode+"gpio2",'w') # ouvre le fichier en écriture
file.write(PULLUP) # broche en trée avec pullup actif
file.close()
# lit l'etat de la broche
file=open(pathState+"gpio2",'r') # ouvre le fichier en lecture
file.seek(0) # se palce au debut du fichier
print (file.read())
file.close()
Lancer l'exécution :
On obtient logiquement la valeur 1 (si le bouton n'est pas appuyé, il est à 1) :
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 14 / 18
•
Si le bouton est appuyé, le programme renvoie logiquement 0 :
•
OK, la détection de l'appui se fait bien... !
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 15 / 18
Version « Arduino-like »
En version « Arduino-like », on va utiliser... digitalRead() et une variable d'appui valant 0 ce qui donne :
#!/usr/bin/python
# -*- coding: utf-8 -*# exemple Pyduino - par X. HINAULT - www.mon-club-elec.fr
# Juin 2013 - Tous droits réservés - GPLv3
# voir : https://github.com/sensor56/pyDuino
# test digitalRead
from pyduino import * # importe les fonctions Arduino pour Python
# entete declarative
BP=2 # declare la broche a utiliser
APPUI=LOW # valeur broche lors appui
#--- setup --def setup():
pinMode(BP,PULLUP) # met la broche en entree avec rappel au plus actif
Serial.println("La broche 2 est en entrée avec rappel au plus actif !")
# -- fin setup -# -- loop -def loop():
if(digitalRead(BP)==APPUI): # si appui
Serial.println("Appui BP!")
delay(250) # anti-rebond
delay(100) # pause entre 2 lecture du BP
# -- fin loop -#--- obligatoire pour lancement du code -if __name__=="__main__": # pour rendre le code executable
setup() # appelle la fonction main
while(1): loop() # appelle fonction loop sans fin
Le fichier est ici : https://github.com/sensor56/pyDuino/blob/master/pcduino/exemples/1.Basics/DigitalReadButton.py
En ligne de commande :
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 16 / 18
$ wget https://raw.github.com/sensor56/pyDuino/master/pcduino/exemples/1.Basics/DigitalReadButton.py
Lancer l'exécution :
On obtient :
•
A chaque appui, on a un message dans la console système qui joue ici le rôle du Terminal Série... Cool non ? Et remarquer un code Arduino ici strictement
identique à celui du langage Arduino natif... Elle est pas belle la vie ?
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 17 / 18
Conclusion
•
Et de 2 : utilisation des broches numériques du pcDuino en sortie et en entrée en toute simplicité, le tout dans un code Python en utilisant les instructions
Arduino native : yes !
•
Prenez le temps du coup de réfléchir à ce qui devient possible : on pourrait très bien capturer une image webcam ou ce genre de chose lors de l'appui sur le
bouton poussoir, avec un petit son en plus si on veut... comme nous le verrons...
•
Et si on remplace le BP par un capteur de présence ou autre... on transforme du coup le pcDuino en détecteur de présence avec capture de photo... photo qui
peut très bien être envoyée sur le réseau immédiatement... Vous voyez tout l'intérêt... de coder en Python non ? Patience... on y vient...
•
A présent, voyons comment utiliser les entrées analogiques... Allez, la suite... vite !
Liens utiles
•
https://learn.sparkfun.com/tutorials/programming-the-pcduino/your-first-program
Le pcDuino : Programmer les broches E/S du pcDuino en entrée avec Python tout en utilisant les instructions Arduino ! - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 18 / 18
Téléchargement