🛠 LEDs du Lichee RV Dock : LED verte et RGB WS2812 pilotée par le LEDC du D1
Objetivos
El Lichee RV Dock posee DOS LED controlables bajo Linux mainline: el LED verde «status» del módulo (pin PC1, controlador LED class clásico) y el LED RGB WS2812 (NeoPixel) del Dock en el pin PC0 — una particularidad rara, está controlado por el periférico de hardware LEDC del D1, declarado en el device tree mainline como LED multicolor (clase multicolor), sin bit-banging. Este tutorial le hace descubrir /sys/class/leds, los triggers (timer, heartbeat) y la API multicolor multi_intensity.
Material
- Lichee RV Dock bajo imagen mainline (Buildroot
sipeed_lichee_rv_dock, Ubuntu 24.04 RISC-V o Armbian D1) — kernel ≥ 6.3 para el device tree de la placa (fusionado para v6.3), y parche WS2812/LEDC posterior (commit f8ad8bbb8827) requerido para el RGB - Ningún cableado externo: los dos LED están integrados
Código completo
# 1) Lister les LED visibles par le noyau
ls /sys/class/leds/
# mainline : « green:status » (PC1, module) + une LED multicolore « status » (PC0, WS2812)
# 2) LED verte PC1 : trigger timer (clignotement 1 Hz)
echo timer | sudo tee '/sys/class/leds/green:status/trigger'
# rythme cardiaque :
echo heartbeat | sudo tee '/sys/class/leds/green:status/trigger'
# contrôle manuel :
echo none | sudo tee '/sys/class/leds/green:status/trigger'
echo 1 | sudo tee '/sys/class/leds/green:status/brightness'
echo 0 | sudo tee '/sys/class/leds/green:status/brightness'
# 3) RGB WS2812 (PC0) via le LEDC — LED multicolore, canaux R G B 0-255
RGB=$(ls -d /sys/class/leds/*status/multi_intensity 2>/dev/null | head -1)
echo "255 0 0" | sudo tee "$RGB" # rouge
echo "0 255 128" | sudo tee "$RGB" # vert menthe
echo 64 | sudo tee "$(dirname $RGB)/brightness" # luminosité globale
# 4) Petit script d'ambiance
while :; do for c in "255 0 0" "0 255 0" "0 0 255"; do
echo "$c" | sudo tee "$RGB" >/dev/null; sleep 1; done; done
Verificación esperada
ls /sys/class/leds/ lista al menos el LED verde green:status y, con un kernel suficientemente reciente, un dispositivo multicolor *::status que contiene multi_intensity. El trigger timer hace parpadear el LED verde a 1 Hz; echo 1/0 sobre brightness lo enciende y apaga visiblemente. El WS2812 del Dock cambia realmente de color con multi_intensity (R G B separados por espacios) — si el dispositivo multicolor está ausente, su kernel aún no tiene el nodo LEDC del Dock. El cat de trigger muestra el valor activo entre corchetes.
Errores frecuentes
- Olvidar escapar los dos puntos del nombre: en shell, poner la ruta entre comillas (
'/sys/class/leds/green:status/trigger') o usar la autocompletación con Tab. echo 1 > brightnesssin sudo: la redirección es realizada por el shell sin elevación de privilegios; usarsudo tee.- Buscar el WS2812 bajo un nombre «led0» clásico: es un LED MULTICOLOR (
multi_intensity,multi_led), no un LED de un solo canal; los kernels antiguos a veces lo exponen como un LED monocolor. - Probar bajo Tina Linux (imagen vendor OpenWrt): los nombres de los LED difieren totalmente del mainline; consultar la wiki de Sipeed del lado vendor.
- Confundirlo con la tira WS2812 externa: aquí el LEDC controla el LED integrado PC0; para una tira externa se necesita el driver
leds-ax20000/pwm según el kernel.
Otros tutoriales para esta placa
- Premier boot du Lichee RV Dock avec Ubuntu 24.04 RISC-V
- Audio sur le Dock : enregistrer au micro numérique et jouer sur le haut-parleur 3 W
- Wi-Fi et Bluetooth du module RTL8723DS sur le Lichee RV Dock
- GPIO, touche utilisateur ADC et PWM sur le connecteur 2×20 du Lichee RV
- Tina Linux : l'OpenWrt vendor d'Allwinner pour le Lichee RV, installation et sysconfig
- Construire une image mainline complète avec Buildroot (defconfig officiel du Dock)
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash