🛠 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).

Objetivos

Aprender los GPIO de la ZERO 3W como en 2026: sin sysfs (obsoleto), sino libgpiod, la vía recomendada por la documentación de Radxa. El conector de 40 pines es eléctricamente compatible con Raspberry Pi (3,3 V en lógica, ¡nunca 5 V en los pines!), con sus trampas específicas: los pines 3, 5, 27 y 28 no se pueden usar como GPIO debido a las resistencias de pull-up I2C, y los pines 8/10 = consola serie U-Boot. Escribirás un blink en C y un botón con interrupción en Python.

Material

Reglas de cableado (fuente: hardware-interface oficial)

Blink en C (pin 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;
}

Sin compilar: gpioset -m signal $(gpiofind GPIO3_A4)=1 — gpiofind evita codificar chip/línea a mano.

Botón por evento (pin 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")

Verificación esperada

gcc blink.c -o blink -lgpiod && ./blink hace parpadear el LED 5 veces. El script de Python muestra «pulso» en cada pulsación, sin polling (bloqueo del kernel). gpioinfo gpiochip3 muestra tus líneas solicitadas.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales