🛠 Lire un bouton poussoir avec libgpiod (pull-up interne)
Objetivos
Leer el estado de un botón pulsador en el Le Potato con libgpiod en C, activando la resistencia de pull-up interna (no se necesita ninguna resistencia externa) y mostrando el estado en bucle.
Material
- Le Potato AML-S905X-CC con Armbian mainline
- Botón pulsador entre el pin físico 11 (GPIOX_3 — chip/línea a confirmar con
lgpio info 11, ejemplo a continuación: gpiochip3 línea 8) y un pin de masa sudo apt install libgpiod-dev gpiod
Código completo
/* 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 etat = gpiod_line_get_value(line);
printf("bouton %s\n", etat ? "relâché" : "APPUYÉ");
usleep(50000);
}
}
Verificación esperada
./bouton muestra «relajado» en reposo (el pull-up mantiene el estado alto) y «PULSADO» cuando se cierra el contacto hacia masa. gpioinfo gpiochip3 confirma el tirador pull-up en la línea solicitada.
Errores frecuentes
- Chip/línea incorrectos: los bancos GPIOAO/GPIOH/GPIOE/GPIODV/GPIOX están repartidos en varios gpiochips; siempre verificar con
lgpio info <pin>ogpioinfo. - Olvido del pull-up: sin
BIAS_PULL_UP, la entrada queda flotante y muestra estados aleatorios. - Lógica invertida esperada: con pull-up, botón pulsado = 0 (activo en estado bajo).
- 5 V en el pin: prohibido, el Le Potato no tiene ningún pin tolerante a 5 V.
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash