bouton-gpio.py

NanoPi R5S (FriendlyElec) · 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 NanoPi R5S (Rockchip RK3568B2, 4 Cortex-A55, 2-4 Go) sous FriendlyCore/Ubuntu, routeur 1× GbE WAN + 2× 2,5 GbE LAN avec M.2 NVMe. 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 FriendlyCore : apt install gpiod python3-gpiod ; le connecteur GPIO suit le brochage FriendlyElec du R5S — identifier la puce avec gpiodetect et le numéro de ligne 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