blink_c.c
Version C avec libgpiod : le programme demande la ligne GPIO17 en sortie (gpiochip0), la bascule 20 fois à 1 Hz puis libère tout proprement. Utile en service systemd sans Python, et pédagogique sur le modèle gpiochip du noyau. Broche à vérifier sur le schéma J8 (40 broches).
Matériel requis
Une Raspberry Pi 2 Model B (SoC BCM2836/2837 quad-core, connecteur GPIO 40 broches, Ethernet 100 Mbit/s, alimentation micro-USB). Une LED, résistance 330 ohms, gcc et libgpiod-dev sur la carte.
Câblage
LED + résistance entre GPIO17 (broche 11) et GND ; pas de 5 V sur une ligne GPIO.
Fonctionnement
gpiod_chip_open_by_name ouvre le contrôleur, gpiohandle_request_lines réclame la ligne en sortie, gpiohandle_set_values écrit le niveau ; la libération rend la broche au système.
Exécution
Copiez le script sur la carte (scp), puis lancez-le avec python3 (ou bash). Raspberry Pi OS inclut gpiozero ; sinon sudo apt install python3-gpiozero. Le brochage 40 broches est documenté sur le site officiel Raspberry Pi.
Variantes
Compilateur + -O2 pour un daemon ; gpiod_line_event_wait pour du C événementiel. Quad-core ancien sans Wi-Fi : privilégiez l'Ethernet ; micro-USB 5 V/1,2 A recommandé.
blink_c.c
/* blink_c.c — clignotement LED en C avec libgpiod (API v1 gpiohandle). */
/* Deps: sudo apt install libgpiod-dev ; gcc blink_c.c -lgpiod -o blink_c */
#include <gpiod.h>
#include <stdio.h>
#include <unistd.h>
int main(void)
{
struct gpiod_chip *chip = gpiod_chip_open_by_name("gpiochip0");
if (!chip) { perror("gpiochip0"); return 1; }
struct gpiohandle_data data = { .values[0] = 0 };
struct gpiohandle_request req = {
.lineoffsets = { 17 }, /* GPIO17, broche 11 */
.flags = GPIOHANDLE_REQUEST_OUTPUT,
.lines = 1, .default_values = { 0 },
.consumer_label = "blink-c",
};
if (gpiohandle_request_lines(gpiod_chip_get_line(chip, 17), &req))
{ perror("request"); return 1; }
for (int i = 0; i < 20; i++) {
data.values[0] = !data.values[0];
gpiohandle_set_values(&req, &data);
usleep(500000);
}
gpiohandle_release(&req); gpiod_chip_close(chip);
return 0;
}