bouton-gpio.py

Hardkernel ODROID-XU4 (Samsung Exynos5422) · Fichier : bouton-gpio.py · Langage : Python · Usage : Réagir à l'appui sur un bouton poussoir

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

Un ODROID-XU4 (Samsung Exynos5422, 4 Cortex-A15 + 4 Cortex-A7, 2 Go) sous Ubuntu Hardkernel ou Armbian, Ethernet gigabit et port eMMC. 1 bouton poussoir (une patte sur la broche GPIO, l'autre sur GND).

Câblage

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.

Exécution

Sous Ubuntu Hardkernel ou Armbian : apt install gpiod python3-gpiod ; le connecteur 40 broches est vu par gpiodetect (puces gpiochip0/1 sur Exynos), vérifier les broches avec gpioinfo.

Variantes

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()

← Retour à la fiche