🛠 Variation d'intensité LED avec le PWM matériel (et son piège)

Raspberry Pi Model B (Rev 1, 2012) — Fiche carte · intermediaire · Schéma : IMG-model-b-rev1-intermediaire-1-modelb1-pwm-led.svg — LED sur GPIO18 (broche 12), unique sortie PWM matérielle du BCM2835, signal carré animé montrant le rapport cyclaire variable

Objectifs

Faire varier l'intensité d'une LED avec la modulation de largeur d'impulsion (PWM). Piège majeur du BCM2835 : une seule sortie PWM matérielle, sur GPIO18 (broche physique 12). Si un autre usage (son, autre moteur) réclame ce canal, tout le reste doit passer par du PWM logiciel, moins précis. Ce tutoriel montre l'approche avec RPi.GPIO et illustre la contrainte.

Matériel

Code complet

#!/usr/bin/env python3
"""Respiration LED sur GPIO18 - PWM matériel UNIQUE du BCM2835."""
import RPi.GPIO as GPIO
import time

LED = 18  # SEULE broche PWM materielle du Model B Rev 1 (broche 12)
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED, GPIO.OUT)

p = GPIO.PWM(LED, 100)     # fréquence 100 Hz
p.start(0)
try:
    while True:            # montee puis descente du rapport cyclique
        for dc in range(0, 101, 5):
            p.ChangeDutyCycle(dc)
            time.sleep(0.05)
        for dc in range(100, -1, -5):
            p.ChangeDutyCycle(dc)
            time.sleep(0.05)
except KeyboardInterrupt:
    pass
finally:
    p.stop
    GPIO.cleanup

Vérification attendue

La LED « respire » : l'intensité monte et descend en boucle. Vérifiez avec cat /sys/kernel/debug/pwm (si disponible) que le canal PWM matériel est bien réclamé. Testez le piège : lancez un second script PWM sur GPIO18, le second échoue ou récupère l'unique canal.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels