🛠 LED et bouton USER : triggers kernel et gpio-keys
Objectifs
Apprivoiser les E/S du BeaglePlay sans écrire de driver : piloter les cinq LED gpio-leds définies dans le device tree via l'interface /sys/class/leds, changer leurs triggers (heartbeat, cpu, mmc, gpio), et lire le bouton USER qui est déclaré en gpio-keys sur la ligne GPIO0_18, lu avec evtest.
Matériel
- Une carte BeaglePlay (image Debian récente)
- Aucun composant externe : LED et bouton sont embarqués
- Un accès SSH ou série
Code complet
# Lister les LED déclarées par le device tree
ls /sys/class/leds/
# Voir les triggers disponibles puis activer heartbeat
cat /sys/class/leds/green:heartbeat/trigger
echo heartbeat | sudo tee /sys/class/leds/green:heartbeat/trigger
# Pilotage manuel
echo none | sudo tee /sys/class/leds/green:heartbeat/trigger
echo 1 | sudo tee /sys/class/leds/green:heartbeat/brightness
echo 200 | sudo tee /sys/class/leds/green:heartbeat/delay_on
# Bouton USER (gpio-keys, GPIO0_18) : écouter les événements
sudo evtest # choisir l'entrée gpio-keys, appuyer : BTN_0 down/up
Vérification attendue
ls /sys/class/leds/ affiche les LED du device tree ; après echo heartbeat, la LED clignote au rythme du noyau. sudo evtest liste une entrée nommée d'après le bouton ; l'appui imprime EV_KEY / BTN_0 / value 1 puis value 0. Si l'on écrit gpio dans le fichier trigger, la LED ne répond plus qu'à brightness.
Erreurs fréquentes
- Chercher un fichier
/sys/class/gpio/gpio...: avec gpio-keys et gpio-leds, les lignes sont revendiquées par le noyau,gpioget/gpiosetrenvoient EBUSY. - Se tromper de nom de LED : les libellés exacts sont donnés par
ls /sys/class/leds, pas par le schéma. - Écrire dans
brightnesssans avoir mistriggerànone: le trigger écrase la valeur en permanence. - Brancher un bouton externe sur GPIO0_18 en pensant lire du brut : il faut retirer le nœud gpio-keys du DTBO, sinon la ligne reste occupée.
- Oublier le
sudosur evtest : sans droit sur /dev/input, l'outil ne liste aucune entrée.
Autres tutoriels pour cette carte
- Flasher l'image Debian sur la microSD puis l'eMMC 16 Go
- OLED Qwiic sur le bus I2C 5 (mcu_i2c0)
- Capteurs Grove sur le bus I2C 1 et inventaire du bus
- Double Ethernet : GbE RTL8211F et 10BASE-T1L sur RJ11
- Caméra CSI OV5640 via fdtoverlays dans extlinux.conf
- Reflasher le CC1352P7 en BSL depuis le processeur hôte
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash