🛠 Lire un bouton poussoir avec libgpiod (pull-up interne)
Objectifs
Lire l'état d'un bouton poussoir sur le Le Potato avec libgpiod en C, en activant la résistance de pull-up interne (aucune résistance externe nécessaire) et en affichant l'état en boucle.
Matériel
- Le Potato AML-S905X-CC sous Armbian mainline
- Bouton poussoir entre la broche physique 11 (GPIOX_3 — chip/ligne à confirmer avec
lgpio info 11, exemple ci-dessous : gpiochip3 ligne 8) et une broche de masse sudo apt install libgpiod-dev gpiod
Code complet
/* bouton.c — gcc bouton.c -o bouton -lgpiod */
#include <gpiod.h>
#include <stdio.h>
#include <unistd.h>
int main(void) {
/* Chip/ligne à ajuster selon « lgpio info 11 » ou « gpioinfo » */
struct gpiod_chip *chip = gpiod_chip_open_by_name("gpiochip3");
if (!chip) { perror("gpiochip3"); return 1; }
struct gpiod_line *line = gpiod_chip_get_line(chip, 8);
int flags = GPIOD_LINE_REQUEST_FLAG_BIAS_PULL_UP;
if (!line || gpiod_line_request_input_flags(line, "bouton", flags)) {
perror("request"); return 1;
}
printf("Appuyez sur le bouton (Ctrl-C pour quitter)\n");
for (;;) {
int état = gpiod_line_get_value(line);
printf("bouton %s\n", état ? "relâché" : "APPUYÉ");
usleep(50000);
}
}
Vérification attendue
./bouton affiche « relâché » au repos (pull-up maintient l'état haut) et « APPUYÉ » quand on ferme le contact vers la masse. gpioinfo gpiochip3 confirme le tirage pull-up sur la ligne demandée.
Erreurs fréquentes
- Mauvais chip/ligne : les banques GPIOAO/GPIOH/GPIOE/GPIODV/GPIOX sont réparties sur plusieurs gpiochips ; toujours vérifier avec
lgpio info <broche>ougpioinfo. - Oubli du pull-up : sans
BIAS_PULL_UP, l'entrée flotte et affiche des états aléatoires. - Logique inversée attendue : avec pull-up, bouton appuyé = 0 (actif à l'état bas).
- 5 V sur la broche : interdit, le Le Potato n'a aucune broche tolérante 5 V.
Autres tutoriels pour cette carte
- Faire clignoter une LED en C avec libgpiod sur Le Potato
- GPIO en Python avec python3-libgpiod sur Le Potato
- Fondu LED progressif avec PWM sous sysfs (meson)
- Capteur BME280 (I2C) sur Le Potato : overlay et lecture
- Console série (ttyAML0) et SSH sur Le Potato
- Boot SD/eMMC et récupération (pyamlboot) sur Amlogic S905X
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash