🛠 Variation d'intensité d'une LED avec le PWM
Objectifs
Faire varier l'intensité d'une LED externe sur l'ODROID-C4 en utilisant la sortie PWM du SoC Amlogic S905X3 (le connecteur 40 broches expose jusqu'à 6 canaux PWM). Vous apprendrez à exporter un canal via /sys/class/pwm, à raisonner en période (ns) et rapport cyclique (duty_cycle), et à écrire une respiration (breathing) en bash.
Matériel
- ODROID-C4 sous Armbian current
- 1 LED + résistance 330 Ω (les broches sont en 3,3 V : jamais de LED sans résistance)
- Fils jumper
- >
Code complet
#!/usr/bin/env bash
# respiration.sh - fade d'une LED sur pwmchip0 / channel 0
# Adapter le numéro de chip/canal selon le brochage confirmé.
CHIP=/sys/class/pwm/pwmchip0
sudo sh -c "echo 0 > $CHIP/export" 2>/dev/null || true
sleep 0.3
CH=$CHIP/pwm0
sudo sh -c "echo 20000 > $CH/period" # période 20 kHz (50 µs)
sudo sh -c "echo 1 > $CH/enable"
for step in $(seq 0 20 100) ; do # montée 0 -> 100 %
duty=$(( 20000 * step / 100 ))
sudo sh -c "echo $duty > $CH/duty_cycle"
sleep 0.05
done
for step in $(seq 100 -20 0) ; do # descente 100 -> 0 %
duty=$(( 20000 * step / 100 ))
sudo sh -c "echo $duty > $CH/duty_cycle"
sleep 0.05
done
sudo sh -c "echo 0 > $CHIP/unexport"
Vérification attendue
La LED monte progressivement en luminosité puis redescend en environ une seconde, sans clignotement perceptible (20 kHz). cat $CH/duty_cycle suit les valeurs écrites. Après le script, pwmchip0 ne contient plus de dossier pwm0 (canal libéré). Si $CHIP n'existe pas, listez ls /sys/class/pwm/ et vérifiez que le overlay PWM est activé dans /boot/armbianEnv.txt (overlay_add=).
Erreurs fréquentes
- Écrire
duty_cycleavantperiod: la valeur est écrasée ou refusée ; toujours période puis rapport cyclique. - Confondre nanosecondes et microsecondes : la période est en ns (20000 = 20 µs = 50 kHz).
- Oublier la résistance : un court-circuit LED-GND sur une broche 3,3 V peut endommager le bank GPIO.
exportrenvoie « Device or resource busy » : le canal est réservé par le noyau ou un overlay ; choisissez un autre canal.- >
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash