🛠 PWM : faire respirer la LED bleue
Objectifs
Maîtriser la sortie PWM de l'ODROID-XU4 sous Linux mainline : le device tree expose le canal PWM0 pour le ventilateur et PWM2 pour la LED bleue heartbeat. Vous libérerez le trigger du noyau pour piloter vous-même le rapport cyclique et faire « respirer » la LED.
Matériel
- ODROID-XU4 sous Armbian (kernel 6.6.x, device tree mainline exynos5422-odroidxu4)
- Accès root (sudo) ; aucun câblage nécessaire, la LED bleue est embarquée
Code complet
#!/usr/bin/env bash
# respirer.sh — fade de la LED bleue heartbeat (PWM2) du XU4
set -euo pipefail
CHIP=/sys/class/pwm/pwmchip0
# 1) Liberer le trigger heartbeat pose par le device tree
if [ -e /sys/class/leds/odroid:blue:heartbeat/trigger ]; then
echo none | sudo tee /sys/class/leds/odroid:blue:heartbeat/trigger
fi
# 2) Exporter le canal PWM2 (PWM0 = ventilateur, ne pas y toucher !)
echo 2 | sudo tee "$CHIP/export" >/dev/null 2>&1 || true
PWM="$CHIP/pwm2"
sudo tee "$PWM/period" >/dev/null <<< 1000000 # periode 1 ms (ns)
for d in $(seq 0 50000 1000000) $(seq 1000000 -50000 0); do
echo "$d" | sudo tee "$PWM/duty_cycle" >/dev/null
sleep 0.03
done
Vérification attendue
La LED bleue embarquée monte et descend progressivement en luminosité. cat $PWM/duty_cycle suit les valeurs écrites. Le ventilateur (pwm0, piloté par le governor thermique à 50/60/70 °C) continue de fonctionner normalement.
Erreurs fréquentes
- Oublier d'écrire
nonedans le trigger heartbeat : le noyau garde la main sur le canal et vos écritures sont ignorées. - Exporter le canal 0 : il alimente le pwm-fan, le récupérer casse la régulation thermique.
- Confondre période et duty cycle : les deux s'expriment en nanosecondes, duty > period est invalide.
- Lancer sans sudo : les fichiers sysfs appartiennent à root.
- Négliger l'usure : le fade en boucle infinie consomme un peu de CPU, ajoutez un sleep.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash