bouton-gpio.py

BeagleBone AI-64 (TI TDA4VM / J721E) · File : bouton-gpio.py · Language : Python · Use case : Réagir à l'appui sur un bouton poussoir

A button on the GPIO header triggers an action on press and release. Generic version that polls the gpiod line directly, with a 30 ms software debounce filter.

Hardware required

A BeagleBone AI-64 (TI J721E, 2 GHz) on the official Debian image, powered by 5 V/4 A USB-C, with its two 3.3 V P8/P9 cape headers. 1 push button (one leg to the GPIO pin, the other to GND).

Wiring

Button between the chosen GPIO and GND; enable the internal pull via the gpiod flag if the circuit has no resistor.

How it works

The pin level is watched; a valid edge (stable for 30 ms) runs the action. gpiozero delegates everything to asynchronous callbacks. On Debian: sudo apt install gpiod python3-gpiod; gpiodetect lists the chips (main one is 600000.gpio). The P8/P9 pins are named in gpioinfo.

Going further

Press counter, double-click (interval measurement), or triggering a shell script 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()

← Back to the board