🛠 Allumer une LED en C avec libgpiod sur le GPIO 40 broches
Objetivos
Encender un LED en C con libgpiod en el GPIO17 del conector de 40 pines del Raspberry Pi 3 Model A+ (SoC Broadcom BCM2837B0). Comprender la diferencia entre el pin físico y el número Broadcom, y manipular gpiochip0.
Material
- Raspberry Pi 3 A+ alimentado a 5 V / 2,5 A (micro-USB), Raspberry Pi OS Lite Bookworm
- LED + resistencia de 330 Ω, cables Dupont hembra-macho
- Diagrama de pines de 40 pines: GPIO17 = pin 11, GND = pin 14; lógica de 3,3 V únicamente, sin ADC/DAC a bordo
Código completo
/* blink.c — Build: gcc blink.c -o blink -lgpiod (paquet libgpiod1-dev) */
#include <gpiod.h>
#include <stdio.h>
#include <unistd.h>
int main(void) {
/* gpiochip0 = banque des GPIO du SoC sur le connecteur 40 broches */
struct gpiod_chip *chip = gpiod_chip_open_by_name("gpiochip0");
if (!chip) { perror("gpiochip0"); return 1; }
struct gpiod_line *line = gpiod_chip_get_line(chip, 17); /* GPIO17 */
if (gpiod_line_request_output(line, "blink", 0) < 0) { perror("request"); return 1; }
for (int i = 0; i < 10; i++) {
gpiod_line_set_value(line, 1); /* LED on */
usleep(200000);
gpiod_line_set_value(line, 0); /* LED off */
usleep(200000);
}
gpiod_line_release(line);
gpiod_chip_close(chip);
return 0;
}
sudo apt install -y libgpiod1-dev gcc
gcc blink.c -o blink -lgpiod && ./blink
# Sans compiler : sudo gpiodetect && sudo gpioset gpiochip0 17=1
Verificación esperada
gpiodetect muestra gpiochip0; el LED parpadea 10 veces (200 ms ON / 200 ms OFF). Prueba rápida sin compilar: sudo gpioset gpiochip0 17=1 y luego 17=0.
Errores frecuentes
- Confundir el pin físico 11 con el GPIO17: razonar siempre según la numeración Broadcom.
- Olvidar la resistencia de 330 Ω o alimentar el LED desde los 5 V en lugar de los 3,3 V.
- Debian 13/Trixie ha pasado a libgpiod v2 (API
gpiod_ctx_*): el código está dirigido a la v1.6 de Bookworm. - Permiso denegado: ejecutar con sudo o añadir el usuario al grupo
gpio.
Otros tutoriales para esta placa
- Bouton poussoir et retour console avec gpiozero
- Premier script Python : inventaire du système
- Variation d'intensité d'une LED avec le PWM matériel
- Capteur I2C : température et pression avec BME280
- Connexion WiFi station et administration en SSH
- Démarrage SD/USB et récupération d'une carte qui ne boot plus
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython