🛠 Variateur d'intensité : faire varier une LED en PWM matériel
Objectifs
Utiliser la sortie PWM materielle du BCM2711 (le SoC dispose d'un PWM materielle) pour faire varier la luminosité d'une LED : rapport cyclique, fréquence, respiration (breathing). Vous activerez le overlay device tree puis piloterez en ligne de commande et en Python.
Materiel
- Raspberry Pi 4B, LED, résistance 330 ohms
- GPIO18 = broche physique 12 (canal PWM materielle 0)
- sudo apt install gpiod python3-gpiozero
Code complet
# 1) Activer le PWM : sudo raspi-config -> Interface Options -> PWM
# ou ajouter dtoverlay=pwm-2chan dans /boot/firmware/config.txt
sudo reboot
gpioset --pwm gpiochip0 18=100=0 # 0 % de rapport cyclique
for d in 100 75 50 25 0; do echo "Duty $d %"; gpioset --pwm gpiochip0 18=$d=0; sleep 1; done
# breathing.py - respiration de la LED via gpiozero
from gpiozero import PWMLED
from signal import pause
led = PWMLED(18) # GPIO18, PWM matériel
led.pwm_frequency = 1000 # Hz
led.source = "pulse" # oscillation continue du rapport cyclique
pause
Verification attendue
La LED s'estompe progressivement a chaque etape du shell, puis respire en continu avec le script Python. A 0 % elle est eteinte, a 100 % pleine ; l'oeil percoit la variation grâce à une fréquence de quelques centaines de Hz.
Erreurs frequentes
- Choisir une broche sans PWM materielle : le overlay n'est route que vers GPIO12/13/18/19.
- Oublier dtoverlay=pwm puis gpioset --pwm : la ligne refuse le flag pwm.
- Confondre fréquence (rapidité du cycle) et rapport cyclique (proportion d'état haut) : c'est le duty qui pilote la luminosité.
- Frequence trop basse (< 100 Hz) : la LED scintille visiblement.
- Confusion physique/BCM : broche 12 = GPIO18.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython