🛠 LED et bouton avec libgpiod sur le port 40 broches
Objetivos
El BPI-M2 Zero dispone de un conector de 40 pines cuyo esquema de pines coincide con el de las Raspberry Pi (las carcasas y los HATs Zero W son compatibles), pero los pines pertenecen a bancos Allwinner: gpiochip0 cubre los bancos A a E (PA6 = pin 7, ya cableado por defecto como PWM1) y gpiochip1 cubre el banco R_PIO PL (PL2 = pin 32, PL4 = pin 36; PL10 controla el LED rojo de alimentación). Vas a hacer parpadear un LED y leer un botón utilizando las herramientas libgpiod, sin bibliotecas propietarias.
Material
- BPI-M2 Zero con Armbian (kernel mainline)
- LED + resistencia de 330 Ω entre el pin 7 (PA6) y un pin GND (la lógica funciona a 3,3 V, nunca uses 5 V en un pin)
- Botón pulsador entre el pin 32 (PL2) y el pin 6 (GND)
- Protoboard y cables Dupont
Código completo
sudo apt update && sudo apt install -y gpiod
# Repérer les puces et le nom des lignes du connecteur (CON2-Pxx)
gpiodetect
gpioinfo gpiochip0 | grep -e CON2-P07 -e CON2-P11
# PA6 est PWM1 par défaut : libérer la broche si un overlay pwm la revendique
sudo armbian-config # System > Hardware > décocher_pwm/pwm-user, puis reboot
# Clignoter 10 fois sur PA6 (broche 7), impulsions de 500 ms
for i in $(seq 10); do
gpioset -c gpiochip0 PA6=1 --time 500ms
sleep 0.5
done
# Écouter le bouton sur PL2 — attention : banque PL = gpiochip1 !
gpiomon --num-events 5 --rising-edge gpiochip1 PL2
Verificación esperada
El LED parpadea diez veces; gpiomon muestra un evento por pulsación (flanco de subida gracias a la resistencia pull-up interna o al cableado hacia GND); gpioinfo muestra la línea PA6 como «requested» durante la ejecución de gpioset. El LED rojo PWR (PL10) permanece encendido permanentemente, no es el LED de prueba.
Errores frecuentes
- Buscar PL2 en gpiochip0: el banco R_PIO es un segundo controlador, gpiochip1 — gpiodetect lo muestra.
- Olvidar que PA6 está reservada por el controlador PWM: gpioset falla mientras el overlay no esté desactivado (o utiliza un pin libre).
- Enviar 5 V a un pin lógico: el conector entrega lógica de 3,3 V, los pines no son tolerantes a 5 V en todas partes.
- Ejecutar gpioset sin permisos: usa sudo o añade el usuario al grupo gpio.
- Confundir la numeración: aquí se nombran las líneas (PA6, PL2), no los índices wiringPi que difieren según los forks.
Otros tutoriales para esta placa
- Flasher Armbian et premier boot du BPI-M2 Zero
- Wi-Fi AP6212 : le piège de l'antenne U.FL non fournie
- Console série sur USB-OTG : dépanner sans réseau ni câble UART
- Activer le bus SPI0 et piloter un petit écran TFT
- Survivre avec 512 Mo : zram, swap compressé et services légers
- Câbler l'Ethernet 10/100 EMAC avec le carrier Zero-EPHY
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash