¿Cómo controlar por software los LEDs de una Raspberry PI?
Tras escribir ¿Cómo detectar por software una mala alimentación de la Raspberry PI? me quedó la duda de si era posible controlar por software los LEDs de una Raspberry PI. Resulta que sí.
Opciones:
Advertencia
La Raspberry PI es una plataforma en evolución, por lo que a medida que aparezcan modelos nuevos o actualizaciones del sistema operativo, pueden surgir otros mecanismos y algunos de los que muestro aquí podrían dejar de funcionar.
-
El pseudofichero /sys/class/leds/led1/brightness controla el encendido del LED rojo (alimentación) de la Raspberry PI:
root@raspberrypi:~# echo 0 >/sys/class/leds/led1/brightness (el LED rojo se apaga) root@raspberrypi:~# echo 255 >/sys/class/leds/led1/brightness (el LED rojo se enciende)
El encendido está superditado a que el hardware de la Raspberry PI no esté señalizando una mala alimentación eléctrica, tal y como se explica en ¿Cómo detectar por software una mala alimentación de la Raspberry PI?
-
El LED verde (actividad de la tarjeta de memoria MicroSD) se puede controlar de forma similar como:
root@raspberrypi:~# echo 0 >/sys/class/leds/led0/brightness (el LED verde se apaga) root@raspberrypi:~# echo 255 >/sys/class/leds/led0/brightness (el LED verde se enciende)
Si probamos los ejemplos anteriores veremos que el LED verde vuelve a su rol de marcador de actividad de la tarjeta de memoria MicroSD un instante más tarde, perdiendo el estado que le hemos indicado manualmente. Eso es debido a que este LED está gestionado por el Sistema Operativo. Podemos examinar el controlador activo en el fichero /sys/class/leds/led0/trigger:
root@raspberrypi:~# cat /sys/class/leds/led0/trigger none rc-feedback kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock timer oneshot heartbeat backlight gpio cpu cpu0 cpu1 cpu2 cpu3 default-on input panic actpwr mmc1 [mmc0] rfkill-any rfkill-none rfkill0 rfkill1
Este comando nos muestra (editado en varias líneas para mayor claridad) tanto los controladores disponibles como el que está activado en este momento (entre paréntesis cuadrados): [mmc0] [1]
[1] Las MultiMediaCard son antecesoras de las tarjetas SD. El nombre del controlador tiene motivos históricos.
Si queremos controlar el LED verde por software, tenemos que desactivar su gobierno por parte del Sistema Operativo:
root@raspberrypi:~# echo none >/sys/class/leds/led0/trigger root@raspberrypi:~# echo 255 >/sys/class/leds/led0/brightness
Ahora hemos encendido el LED verde y así permanecerá hasta que cambiemos su estado o devolvamos el control al Sistema Operativo:
root@raspberrypi:~# echo mmc0 >/sys/class/leds/led0/trigger
Controladores alternativos de los LEDs
El que los LEDs se puedan controlar por software y que existan diversos controladores entre los que escoger, abre posibilidades interesantes:
-
Podemos pasar el control de actividad de la tarjeta microSD del LED verde al LED rojo [2]. El controlador del LED rojo se especifica en /sys/class/leds/led1/trigger. En una Raspberry PI 4B el controlador por defecto del LED rojo es default-on. Es decir, encendido siempre [3].
[2] Independientemente del estado que deba tener el LED rojo, la notificación de mala alimentación tiene prioridad. Es decir, el LED rojo permanecerá apagado cuando la alimentación es deficiente, tal y como se describe en ¿Cómo detectar por software una mala alimentación de la Raspberry PI?
Advertencia
En realidad no lo he comprobado y no tengo un alimentador "malo" o una fuente de alimentación regulable para poder verificar esta información.
-
Una de las cosas desconcertantes de la Raspberry PI es que incluso apagada (pero enchufada), el LED rojo permanece encendido. Me resulta confuso y desconcertante.
Podríamos apagar el LED rojo por software al final del proceso de apagado de la Raspberry PI.
Mis experimentos, no obstante, indican que el LED se vuelve a encender cuando la Raspberry PI se apaga.
Es posible desactivar el LED rojo permanentemente a través del fichero /boot/config.txt, pero no es lo que quiero.
-
La mayor parte de los controladores por defecto indican estados de un hipotético teclado conectado por USB o por Bluetooth o el estado de la Wifi, pero hay estados más interesantes, como PWM. [3]
[3] | (1, 2) Los controladores disponibles dependen del modelo de Raspberry PI y de la versión del Sistema Operativo. |
Bibliografía
-
Are there other act_led_trigger options besides “mmc” and “heartbeat”?.
-
Los controladores disponibles están muy mal documentados (por no decir no documentados en absoluto), pero podemos ver el código fuente de muchos de ellos y, por supuesto, escribir los nuestros [4].
[4] La mayoría de los controladores de LEDs no son exclusivos de la Raspberry PI, muchos otros equipos permiten controlar sus LEDs y este soporte es genérico en Linux.
Bola extra: ¿Y qué ocurre con los LEDs del puerto Ethernet?
Hay cierta capacidad de control sobre los LEDs del puerto Ethernet de la Raspberry PI, aunque limitado. Una opción útil (aunque puede resultar confusa) es configurarlos como "apagados" para que no molesten por la noche, por ejemplo.
Algunos detalles:
- Controlling LAN LEDs individually.
- Ver los valores para eth_led0 y eth_led1 en la documentación de overlays del firmware de la Raspberry PI.