🛠 GPIO avec libgpiod : faire clignoter une LED et lire un bouton

Radxa ZERO 3W · debutant · Schéma : IMG-rz3w-debutant-3-rz3w-gpio-libgpiod-blink.svg — Radxa ZERO 3W avec son connecteur 40 broches compatible Raspberry Pi (non soudé sur les SKUs de base), breadboard : LED + résistance 330 Ω entre la broche 35 (GPIO3_A4) et GND, bouton poussoir entre la broche 11 (GPIO3_A1) et 3V3 ; broches 3/5/27/28 barrées en rouge (résistances de pull-up I2C).

Objectifs

Apprendre les GPIO de la ZERO 3W comme en 2026 : pas de sysfs (déprécié), mais libgpiod, la voie recommandée par la doc Radxa. Le connecteur 40 broches est électriquement compatible Raspberry Pi (3,3 V en logique, jamais 5 V sur les broches !), avec ses pièges spécifiques : broches 3, 5, 27, 28 inutilisables en GPIO à cause de résistances de pull-up I2C, et broches 8/10 = console série U-Boot. Vous écrirez un blink en C et un bouton à interruption en Python.

Matériel

Règles de brochage (source : hardware-interface officiel)

Blink en C (broche 35, GPIO3_A4)

/* blink.c — compile : gcc blink.c -o blink -lgpiod */
#include <gpiod.h>
#include <stdio.h>
int main(void) {
    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, 4);   /* A4 = ligne 4 */
    if (gpiod_line_request_output(line, "blink", 0) < 0) { perror("request"); return 1; }
    for (int i = 0; i < 10; i++) {          /* 5 cycles ON/OFF */
        gpiod_line_set_value(line, 1); sleep(1);
        gpiod_line_set_value(line, 0); sleep(1);
    }
    gpiod_line_release(line); gpiod_chip_close(chip);
    return 0;
}

Sans compiler : gpioset -m signal $(gpiofind GPIO3_A4)=1 — gpiofind évite de coder en dur chip/ligne.

Bouton à évènement (broche 11, GPIO3_A1)

#!/usr/bin/env python3  # apt install python3-libgpiod gpiod
# Bouton : broche 11 -> 3V3 ; pull-down (flag gpiod ou résistance externe vers GND)
import gpiod
chip = gpiod.Chip("gpiochip3")
line = chip.get_line(1)                      # A1 = ligne 1
line.request(consumer="bouton", type=gpiod.LINE_REQ_EV_RISING_EDGE)
while True:
    if line.event_wait(sec=None): line.event_read; print("appui")

Vérification attendue

gcc blink.c -o blink -lgpiod && ./blink fait clignoter la LED 5 fois. Le script Python affiche « appui » sur chaque pression, sans polling (blocage noyau). gpioinfo gpiochip3 montre vos lignes demandées.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels