🛠 Faire clignoter une LED en C avec libgpiod sur Le Potato
Objetivos
Hacer parpadear un LED en el conector de 40 pines del Le Potato (AML-S905X-CC) en C con libgpiod, la interfaz oficialmente recomendada por Libre Computer — no hay wiringPi en esta tarjeta y el fabricante se niega a portarlo.
Material
- Le Potato AML-S905X-CC con Armbian (kernel mainline, meson-gxl)
- LED + resistencia de 330 Ω
- Pin físico 3 = GPIOAO_5 = línea 5 de gpiochip0; lógica de 3,3 V, ningún pin tolera 5 V
- Tierra en un pin GND (6, 9, 14, 20, 25, 30, 34 o 39)
Código completo
/* blink.c — gcc blink.c -o blink -lgpiod (paquet libgpiod-dev) */
#include <gpiod.h>
#include <stdio.h>
#include <unistd.h>
int main(void) {
struct gpiod_chip *chip = gpiod_chip_open_by_number(0);
if (!chip) { perror("gpiochip0"); return 1; }
struct gpiod_line *line = gpiod_chip_get_line(chip, 5); /* broche 3 */
if (!line || gpiod_line_request_output(line, "blink", 0)) {
perror("request"); return 1;
}
for (int i = 0; i < 10; i++) {
gpiod_line_set_value(line, i & 1);
usleep(200000);
}
gpiod_line_release(line);
gpiod_chip_close(chip);
return 0;
}
Verificación esperada
./blink hace parpadear el LED 10 veces a 5 Hz. Durante la ejecución, gpioinfo gpiochip0 muestra la línea 5 (denominada « 7J1 Header Pin3 » en el device tree) como solicitada por el consumidor « blink ».
Errores frecuentes
- Confundir pin físico y línea GPIO: pin 3 = línea 5 (GPIOAO_5). Verifique con
lgpio info 3(libretech-wiring-tool) ogpioinfo. - La API de libgpiod 2.x es diferente a la de 1.x (
gpiod_line_request): adáptela según la distribución. - Enviar 5 V a un pin: ningún pin tolera 5 V, la tarjeta se dañará.
- Permiso denegado: añada su usuario al grupo
gpioo ejecute como root.
Otros tutoriales para esta placa
- Lire un bouton poussoir avec libgpiod (pull-up interne)
- 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