bouton-gpio.py
Un bouton sur le connecteur GPIO déclenche une action à l'appui et au relâchement. Version générique par scrutation de la ligne gpiod avec anti-rebond logiciel de 30 ms.
Matériel requis
Une BeagleBone Black (TI AM3358) sur image Debian officielle, alimentée en 5 V par mini-USB, avec ses connecteurs P8/P9 en 3,3 V (jamais de 5 V sur les broches !). 1 bouton poussoir (une patte sur la broche GPIO, l'autre sur GND).
Branchement
Bouton entre le GPIO choisi et GND ; activer le pull interne via le flag gpiod si le montage n'a pas de résistance.
Fonctionnement
Le niveau de la broche est surveillé ; un front valide (stabilisé 30 ms) appelle l'action. gpiozero délègue le tout à des callbacks asynchrones. Sous Debian : sudo apt install gpiod python3-gpiod ; les broches P8/P9 ont des noms d'après-arbre (gpioinfo). Les entrées analogiques AIN0-6 sont sur P9 (1,8 V max, via IIO).
Pour aller plus loin
Compteur d'appuis, double-clic (mesure d'intervalle), ou déclenchement d'un script shell via subprocess.
bouton-gpio.py
#!/usr/bin/env python3
# Bouton poussoir avec python3-gpiod : scrutation + anti-rebond.
import gpiod
from time import sleep
PUCE = "gpiochip1" # verifier avec gpiodetect
LIGNE = 16 # GPIO du bouton (schema de la carte)
chip = gpiod.Chip(PUCE)
line = chip.get_line(LIGNE)
line.request(consumer="bouton", type=gpiod.LINE_REQ_DIR_IN,
default_val=gpiod.LINE_REQ_FLAG_NONE)
print("Scrutation du bouton (Ctrl-C pour quitter)")
precedent = line.get_value()
try:
while True:
etat = line.get_value()
if etat != precedent:
sleep(0.03) # anti-rebond 30 ms
etat = line.get_value()
if etat != precedent:
print("Bouton:", "APPUIE" if etat else "relache")
precedent = etat
sleep(0.01)
finally:
line.release()