¿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

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: