🛠 LEDs du Lichee RV Dock : LED verte et RGB WS2812 pilotée par le LEDC du D1
Objectifs
Le Lichee RV Dock possède DEUX LED pilotables sous Linux mainline : la LED verte « status » du module (broche PC1, pilote LED class classique) et la LED RGB WS2812 (NeoPixel) du Dock sur la broche PC0 — particularité rare, elle est pilotée par le périphérique matériel LEDC du D1, déclaré dans le device tree mainline comme LED multicolore (classe multicolor), sans bit-banging. Ce tutoriel vous fait découvrir /sys/class/leds, les triggers (timer, heartbeat) et l'API multicolor multi_intensity.
Matériel
- Lichee RV Dock sous image mainline (Buildroot
sipeed_lichee_rv_dock, Ubuntu 24.04 RISC-V ou Armbian D1) — kernel ≥ 6.3 pour le device tree de la carte (fusionné pour v6.3), et correctif WS2812/LEDC ultérieur (commit f8ad8bbb8827) requis pour la RGB - Aucun câblage externe : les deux LED sont embarquées
Code complet
# 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
Vérification attendue
ls /sys/class/leds/ liste au moins la LED verte green:status et, avec un kernel assez récent, un device multicolor *::status contenant multi_intensity. Le trigger timer fait clignoter la LED verte à 1 Hz ; echo 1/0 sur brightness l'allume et l'éteint visiblement. La WS2812 du Dock change réellement de couleur avec multi_intensity (R G B séparés par des espaces) — si le device multicolor est absent, votre kernel n'a pas encore le nœud LEDC du Dock. Le cat de trigger montre la valeur active entre crochets.
Erreurs fréquentes
- Oublier d'échapper le deux-points du nom : en shell, mettre le chemin entre guillemets (
'/sys/class/leds/green:status/trigger') ou utiliser le complétion Tab. echo 1 > brightnesssans sudo : la redirection est faite par le shell sans élévation ; utilisersudo tee.- Chercher la WS2812 sous un nom « led0 » classique : c'est une LED MULTICOLORE (
multi_intensity,multi_led), pas une LED mono-canal ; les anciens kernels l'exposent parfois en LED mono couleur unique. - Tester sous Tina Linux (image vendor OpenWrt) : les noms de LED y diffèrent totalement du mainline ; se référer au wiki Sipeed côté vendor.
- Confondre avec le ruban WS2812 externe : ici le LEDC pilote la LED embarquée PC0 ; pour un ruban externe il faut le driver
leds-ax20000/pwm selon le kernel.
Autres tutoriels pour cette carte
- 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)
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash