All articles

PWM on ESP32: everything you need to know for RC LEDs

PWM (Pulse Width Modulation) is the technology that allows fine control of LED intensity without an analog regulator. On ESP32, it's handled by the LEDC module — far more powerful than a classic Arduino.

How does PWM work?

Au lieu d'abaisser la tension, le PWM coupe rapidement l'alimentation à haute fréquence. À 1000Hz et 50% de rapport cyclique, la LED s'allume et s'éteint 1000 fois par seconde — l'œil perçoit une LED à moitié allumée. Plus le rapport cyclique est élevé, plus la LED est lumineuse.

The ESP32 LEDC module

L'ESP32 dispose de 16 canaux PWM indépendants (LEDC). Chaque canal peut être assigné à n'importe quel GPIO compatible. Flare RC utilise une fréquence de 1000Hz et une résolution de 8 bits (0-255) — 256 niveaux d'intensité.

ledcAttach and ledcWrite

ledcAttach(pin, freq, resolution) initialise un canal PWM sur un GPIO. ledcWrite(pin, value) définit l'intensité (0 = éteint, 255 = plein). Sur ESP32 Core 3.x (ArduinoDroid), la gestion des canaux est automatique — plus besoin de les assigner manuellement.

Why not analogWrite?

Sur Arduino classique, analogWrite() fait du PWM à 490Hz sur 8 bits. Sur ESP32, cette fonction n'existe pas (ou est émulée). Flare RC utilise directement l'API LEDC pour un contrôle précis et une fréquence optimale pour les LEDs.

💡 Astuce : À 1000Hz, le PWM est inaudible (au-dessus des 20kHz humains) et invisible à l'œil nu. En dessous de 100Hz, vous pourriez voir des scintillements ou les capter en vidéo.
Related articles
← Back to the blog