🛠 LED et bouton avec libgpiod sur le port 40 broches
Objectifs
Le BPI-M2 Zero porte un connecteur 40 broches dont le brochage reprend celui des Raspberry Pi (les boîtiers et chapeaux Zero W s'adaptent), mais les broches sont des banques Allwinner : gpiochip0 couvre les banques A à E (PA6 = broche 7, déjà câblée en PWM1 par défaut) et gpiochip1 la banque R_PIO PL (PL2 = broche 32, PL4 = broche 36 ; PL10 pilote la LED rouge d'alimentation). Vous allez faire clignoter une LED et lire un bouton avec les outils libgpiod, sans bibliothèque propriétaire.
Matériel
- BPI-M2 Zero sous Armbian (noyau mainline)
- LED + résistance 330 Ω entre la broche 7 (PA6) et une broche GND (la logique est en 3,3 V, jamais de 5 V sur une broche)
- Bouton poussoir entre la broche 32 (PL2) et la broche 6 (GND)
- Breadboard et fils Dupont
Code complet
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
Vérification attendue
La LED clignote dix fois ; gpiomon affiche un événement par appui (rising-edge grâce au rappel interne ou au câblage vers GND) ; gpioinfo montre la ligne PA6 « requested » pendant le gpioset. La LED rouge PWR (PL10) reste allumée en permanence, ce n'est pas la LED de test.
Erreurs fréquentes
- Chercher PL2 sur gpiochip0 : la banque R_PIO est un second contrôleur, gpiochip1 — gpiodetect le montre.
- Oublier que PA6 est revendiquée par le pilote PWM : gpioset échoue tant que l'overlay n'est pas désactivé (ou prendre une broche libre).
- Envoyer du 5 V sur une broche logique : le connecteur délivre du 3,3 V logique, les broches ne sont pas 5 V tolérantes partout.
- Lancer gpioset sans droits : utiliser sudo ou ajouter l'utilisateur au groupe gpio.
- Confondre la numérotation : ici on nomme les lignes (PA6, PL2), pas les indices wiringPi qui diffèrent selon les forks.
Autres tutoriels pour cette carte
- 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
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash