GPIO
Christian Dupaty
BTS Systèmes Numériques
Lycée Fourcade - Gardanne
Académie d’Aix-Marseille
RASPBERRY PI et PYTHON : GPIO
1) TP : GPIO
17 GPIO (General Purpose Input/Output) sont disponibles sur le connecteur de la Raspberry Pi. La
plupart des broches supportant les GPIO peuvent être réassignées à des périphériques de communication.
En mode GPIO ces broches peuvent être configurées soit en entrée binaire soit en sortie binaire.
[Link]
Le matériel : [Link]
La bibliothèque : [Link]
Installation :
Installation de [Link], la bibliothèque de gestion Entrées/Sorties
Legende des
1) récupérer la bibliothèque : wget couleurs
[Link]
[Link] +5 V
2) Décompresser : tar xvzf [Link] (remplacer le numéro de version
si nécessaire) +3.3 V
3) Aller dans le répertoire de la bibliothèque : cd [Link]-0.3.1a
Ground, 0V
4) Installation : sudo python [Link] install
5) détruire l’archive et le dossier d’installation UART
cd ..
sudo rm –tf [Link]-0.3.1a/ GPIO
rm [Link]
6) OU avec PIP SPI
apt-get remove [Link]
pip install --upgrade [Link] I²C
Utilisation dans un code Python
import [Link] as GPIO # charge la bibliotheque
[Link]([Link]) # numérotation du connecteur Rasperry, ex 7 pour GPIO4
[Link]([Link]) # numérotation du circuit BCM2835, ex 4 pour GPIO4
[Link](11, [Link]) # place la broche (ou le GPIO) en sortie
[Link](7, [Link], initial=[Link]) # GPIO en sortie , initialisé à 1
[Link](17, [Link]) # place la broche (ou le GPIO) en entree
[Link](channel, [Link], pull_up_down=GPIO.PUD_UP) # active une resistance
[Link](channel, [Link], pull_up_down=GPIO.PUD_DOWN)
[Link](11, True) # met le GPIO à l’état 1 (True ou 1)
[Link](11, false) # met le GPIO à l’état 0 (False ou 0)
[Link](7) # retourne l’état du GPIO
# ex a= [Link](7) ou if ([Link](7)) :
[Link]() # replace tous les GPIO en entrées
GPIO.RPI_REVISION # version de la carte
[Link] # version de la bibliothèque
BTS systèmes numériques [Link] 2/4
RASPBERRY PI et PYTHON : GPIO
TESTS :
Placer une LED rouge en série avec une résistance de 150 ohms entre la broche 7 du connecteur (GPIO4) et le
0v et un bouton poussoir avec une résistance de pull-up (10K) sur la broche 11 (GPIO17)
Le programme suivant fait clignoter la LED avec une période de 1S.
import [Link] as GPIO
import time
[Link]([Link])
[Link](4, [Link])
while True:
print("Allume")
[Link](4,1) # Allume la LED
[Link](0.5)
print("Eteind")
[Link](4,0) # eteind la LED
[Link](0.5)
Pour tester un front montant sur un GPIO:
while [Link](channel) == [Link]:
[Link](0.01) # laisser 10mS au processeur pour faire autre chose
La function wait for edge fait la même chose mais sans [Link]
GPIO.wait_for_edge(channel, [Link]) # RISING, FALLING, BOTH
BTS systèmes numériques [Link] 3/4
RASPBERRY PI et PYTHON : GPIO
Détection d’évènements (Interruptions) :
Une interruption est un processus répondant à une sollicitation matériel asynchrone et déclenchant
l’exécution d’un sous-programme, ex :
L’appui sur un bouton
Le débordement d’un TIMER
L’arrivé d’un caractère dans une UART
Lorsque l’évènement est détecté par le matériel et suivant les niveaux de priorité accordés à l’évènement, le
programme en cours est interrompu et un sous-programme d’interruption est exécuté.
L’utilisation des interruptions évite la scrutation et donc libère du temps pour d’autres tâches. Un évènement
ne peut être manqué, l’évènement est mémorisé, si la tâche associée n’est pas prioritaire il peut être traité
plus tard.
Commandes python d’activation des interruptions sur GPIO :
GPIO.add_event_detect(channel, [Link]) # active detection
faire_un_truc()
if GPIO.event_detected(channel):
print('bouton appuye')
Annulation de la détection:
GPIO.remove_event_detect(channel)
Création d’une fonction qui sera appelée automatiquement lors de la détection de l’évenement.
def fonctionIT(channel):
print('le bouton a été enfoncé!')
print('sur le GPIO %s'%channel)
GPIO.add_event_detect(channel, [Link], callback=fonctionIT)
Pour éviter les rebonds:
La fonction add_event_detect recheche un front actif (FALLING ou RISING) et temporise (bouncetime) pour
attendre la fin des rebonds
GPIO.add_event_detect(channel, [Link], callback=fonctionIT, bouncetime=200
)
BTS systèmes numériques [Link] 4/4