🛠 Variation d'intensité d'une LED avec le PWM

Raspberry Pi 5 (model-5) · intermediaire · Schéma : IMG-model-5-intermediaire-1-model5-i1-pwm-led.svg — LED sur GPIO18 (broche physique 12, PWM matériel) avec résistance 470 Ω, effet de respiration lumineuse

Objectifs

Faire varier l'intensité lumineuse d'une LED avec la modulation de largeur d'impulsion (PWM). Sur le Raspberry Pi 5, le PWM matériel est disponible sur les GPIO 12, 13, 18 et 19, tous pilotés par la puce RP1. On réalise un effet de « respiration » (breathing LED) en Python avec gpiozero.

Matériel

Code complet

#!/usr/bin/env python3
# breathe.py — effet respiration sur LED PWM (GPIO18 = broche physique 12)
# PWM matériel Pi 5 : GPIO 12, 13, 18, 19 (pilotés par la puce RP1).
from gpiozero import PWMLED
from time import sleep

led = PWMLED(18, freq=1000)        # 1 kHz : imperceptible pour l'œil

try:
    while True:
        # montée progressive de 0 % à 100 %
        for duty in range(0, 101, 2):
            led.value = duty / 100.0
            sleep(0.02)
        # descente progressive de 100 % à 0 %
        for duty in range(100, -1, -2):
            led.value = duty / 100.0
            sleep(0.02)
except KeyboardInterrupt:
    led.off

Alternative en ligne de commande avec le PWM matériel exporté :

echo 18 | sudo tee /sys/class/pwm/pwmchip0/export
sleep 0.2
echo 1000000 | sudo tee /sys/class/pwm/pwmchip0/pwm0/period
echo 500000 | sudo tee /sys/class/pwm/pwmchip0/pwm0/duty_cycle
echo 1 | sudo tee /sys/class/pwm/pwmchip0/pwm0/enable

Vérification attendue

La LED s'intensifie puis s'estompe en boucle, sans scintillement visible. Avec la variante sysfs, la LED reste à 50 % de luminosité (duty_cycle = moitié de la période).

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels