🛠 LED et bouton USER : triggers kernel et gpio-keys
Objetivos
Aprender a manejar las E/S del BeaglePlay sin escribir un controlador: controlar los cinco LED gpio-leds definidos en el árbol de dispositivos mediante la interfaz /sys/class/leds, cambiar sus disparadores (heartbeat, cpu, mmc, gpio) y leer el botón USER, declarado como gpio-keys en la línea GPIO0_18, utilizando evtest.
Hardware
- Una placa BeaglePlay (imagen Debian reciente)
- Ningún componente externo: los LED y el botón están integrados
- Acceso SSH o serie
Código completo
# 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
Verificación esperada
ls /sys/class/leds/ muestra los LED del árbol de dispositivos; tras ejecutar echo heartbeat, el LED parpadea al ritmo del núcleo. sudo evtest lista una entrada con el nombre del botón; al pulsarlo se imprime EV_KEY / BTN_0 / value 1 y luego value 0. Si se escribe gpio en el archivo trigger, el LED solo responde a brightness.
Errores frecuentes
- Buscar un archivo
/sys/class/gpio/gpio...: con gpio-keys y gpio-leds, las líneas están reclamadas por el núcleo, por lo quegpioget/gpiosetdevuelven EBUSY. - Equivocarse con el nombre del LED: las etiquetas exactas las proporciona
ls /sys/class/leds, no el esquema. - Escribir en
brightnesssin haber puestotriggerennone: el disparador sobrescribe el valor constantemente. - Conectar un botón externo en GPIO0_18 pensando en leer datos en bruto: hay que eliminar el nodo gpio-keys del DTBO, si no, la línea permanece ocupada.
- Olvidar
sudoen evtest: sin permisos sobre /dev/input, la herramienta no lista ninguna entrada.
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash