🛠 Allumer une LED en C avec libgpiod sur le GPIO 40 broches
Objectifs
Allumer une LED en C avec libgpiod sur GPIO17 du connecteur 40 broches du Raspberry Pi 3 Model A+ (SoC Broadcom BCM2837B0). Comprendre la différence entre broche physique et numéro Broadcom, et manipuler gpiochip0.
Matériel
- Raspberry Pi 3 A+ alimenté en 5 V / 2,5 A (micro-USB), Raspberry Pi OS Lite Bookworm
- LED + résistance 330 Ω, câbles Dupont femelle-mâle
- Brochage 40 broches : GPIO17 = broche 11, GND = broche 14 ; logique 3,3 V uniquement, aucun ADC/DAC à bord
Code complet
/* 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
Vérification attendue
gpiodetect affiche gpiochip0 ; la LED clignote 10 fois (200 ms ON / 200 ms OFF). Test rapide sans compiler : sudo gpioset gpiochip0 17=1 puis 17=0.
Erreurs fréquentes
- Confondre broche physique 11 et GPIO17 : toujours raisonner en numérotation Broadcom.
- Oublier la résistance 330 Ω ou alimenter la LED depuis le 5 V au lieu du 3,3 V.
- Debian 13/Trixie est passée à libgpiod v2 (API
gpiod_ctx_*) : le code cible la v1.6 de Bookworm. - Permission refusée : lancer en sudo ou ajouter l'utilisateur au groupe
gpio.
Autres tutoriels pour cette carte
- 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
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython