Kurzfassung: LED-Flimmern mit einem AC-Dimmer hat drei verschiedene Ursachen. Typen 1 und 2 entstehen durch architektonische Inkompatibilität von TRIAC AC-Dimmern mit LED-Lampen — die Hardware-Lösung ist ein MOSFET AC-Dimmer (Trailing Edge, entwickelt für LED). Bei Verwendung eines TRIAC-Dimmers: Wechseln Sie zu einer Philips/Osram/Ikea-Lampe und halten Sie die Helligkeit über 20 %. Typ 3 ist eine ESP32-Timing-Störung durch WiFi/BLE — behoben durch die rbdimmerESP32-Bibliothek oder DimmerLink (gilt für jeden Dimmertyp).
Das Problem
Sie haben Ihren Dimmer eingerichtet, der Code funktioniert, die Nulldurchgangserkennung ist korrekt — aber die LED-Lampe flimmert trotzdem. Am deutlichsten unter 40–50 % Helligkeit. Sie vermuten ein Problem mit Interrupts oder Timing, aber Code-Änderungen helfen nicht.
Die Kernaussage: Flimmern hat mehrere Grundursachen, die verschiedene Lösungen erfordern. Code-Änderungen helfen nur bei Typ 3 (ESP32-Timing). Bei Typen 1 und 2 müssen Sie den Dimmertyp (auf MOSFET) oder die Lampe wechseln — nicht den Code.
Symptome nach Flimmertyp:
Typ 1 (LED-Treiber / TRIAC-Architektur):
- „Billige dimmbare LEDs verwenden das gedimmte Netz direkt zum PWM der LED, was zu merklichem Flimmern führt" (Arduino Forum, 2019)
- Flimmern sichtbar unter 40–50 % Helligkeit; Lampe funktioniert bei 100 % einwandfrei
- Code-Änderungen machen keinen Unterschied — gleicher Effekt bei allen Einstellungen
- Selbst bei 50 % flimmern billige Lampen sichtbar
Typ 2 (TRIAC-Haltestrom):
- Zufällige Blitze bei geringer Helligkeit oder kleiner Last
- Summen/Brummen bei Helligkeit unter 20 %
- Einzelne 5–7-W-LED-Lampe ohne zusätzliche Last
Typ 3 (ESP32-Timing):
- Unregelmäßiges, unvorhersehbares Flimmern — nicht synchron mit dem Netz
- Verschwindet beim Trennen des WiFi (
WiFi.disconnect()) - Erscheint unter aktiver MQTT/HTTP-Last auf dem ESP32
- Qualitätslampen flimmern auch — ändert sich bei Code-Modifikation
TRIAC vs. MOSFET: Warum der Dimmertyp wichtiger ist als der Code
Typen 1 und 2 sind keine Fehler der Lampe oder des Codes. Sie sind das Ergebnis davon, dass TRIAC AC-Dimmer für Glühlampen entwickelt wurden — nicht für LED-Lampen.
| Parameter | TRIAC AC-Dimmer | MOSFET AC-Dimmer |
|---|---|---|
| Schaltmethode | Leading Edge (steiler Peak zu Beginn des Halbzyklus) | Trailing Edge (sanfter Schnitt am Ende) |
| Entwickelt für | Glühlampen, Halogen, Widerstandsheizungen | LED-Lampen, Niederspannungstransformatoren |
| Haltestrom | Ja — Mindeststrom zum Leiten | Nein — funktioniert mit jeder Last |
| LED-Flimmern | Typen 1 und 2 bei billigen Lampen | Keins — Trailing Edge ist LED-kompatibel |
| Dimmbereich mit LED | 20–95 % (instabil darunter) | 5–95 % |
Der MOSFET AC-Dimmer beseitigt Typen 1 und 2 auf Hardware-Ebene:
- Trailing Edge öffnet die Last zu Beginn jedes Halbzyklus: der LED-Treiber bekommt sofort die volle Spannung und lädt seine Pufferkondensatoren — keine 100/120-Hz-Pulsation.
- Kein Haltestrom: stabiler Betrieb auch mit Lasten so klein wie 5 W.
Typ 3 (ESP32-Timing) gilt gleichermaßen für beide Dimmertypen — er hängt nicht mit der Schaltmethode zusammen, sondern nur mit der MCU-Interrupt- Genauigkeit.
Grundursachen
Detailed theory of zero-cross detection and TRIAC operation: AC Dimmer: Zero-Cross and TRIAC — How It Works.
Typ 1: LED-Treiber-Flimmern (TRIAC-spezifisch)
Der TRIAC schneidet die AC-Sinuswelle vom Leading Edge: In jedem Halbzyklus wird der erste Teil abgeschnitten, Strom fließt nur im zweiten Teil. Bei geringer Helligkeit — nur ein kurzer Stromimpuls am Ende jedes Halbzyklus.
Ein Qualitäts-LED-Treiber glättet diese Impulse durch Kondensatoren und betreibt sein eigenes Hochfrequenz-PWM (1–4 kHz). Ergebnis: gleichmäßiges, stabiles Licht.
Ein billiger LED-Treiber richtet den Strom ohne Pufferung gleich. Die LED empfängt pulsierenden Gleichstrom mit 100 Hz (50-Hz-Netz) oder 120 Hz (60-Hz-Netz). Diese Frequenz ist für das menschliche Auge sichtbar — das Flimmern ist deutlich.
Ein MOSFET AC-Dimmer (Trailing Edge) öffnet die Last zu Beginn jedes Halbzyklus: der LED-Treiber bekommt sofort die volle Spannung und lädt seine Kondensatoren. Die 100-Hz-Pulsation verschwindet — selbst bei einer billigen Lampe.
Typ 2: TRIAC-Haltestrom (TRIAC-spezifisch)
Jeder TRIAC hat einen Haltestrom-Parameter — den Mindeststrom, der nötig ist, um leitend zu bleiben. Fällt der Laststrom unter diesen Wert, schaltet sich der TRIAC zufällig ab — vor dem Nulldurchgang. Ergebnis: fehlende Halbzyklen, zufällige Blitze und Brummen bei geringer Helligkeit.
MOSFET hat keinen Haltestrom — es ist ein Transistor, kein Thyristor. Stabiler Betrieb auch mit Lasten so klein wie 5 W.
Typ 3: ESP32-Timing-Störung (dimmerunabhängig)
TRIAC-Steuerung erfordert ±50-µs-Genauigkeit: Das MCU muss den TRIAC exakt nach der berechneten Verzögerung nach dem Nulldurchgang zünden. Der ESP32-WiFi-Stack und RTOS-Tasks können die ISR-Ausführung um 200–500 µs verzögern — Flimmern erscheint unter aktivem WiFi.
Verzögerungsquellen:
- WiFi-/BLE-Stack blockiert vorübergehend Interrupts während der Paketverarbeitung
- Flash-Speicher-Zugriff (OTA, SPIFFS, Serial) — Einfrieren für 10–100 ms
- ISR nicht in IRAM: ESP32 liest sie bei jedem Aufruf aus dem Flash — fügt Verzögerung hinzu
loop()und WiFi auf demselben Kern (Core 1) konkurrieren um CPU
Wesentlicher Unterschied zu Typen 1 und 2: Das Flimmern ist unregelmäßig,
verschwindet bei WiFi.disconnect() und ändert sich bei Code-Modifikation —
nicht beim Lampenwechsel.
Detailed breakdown: How to Fix ESP32 AC Dimmer Flickering.
Lösungen
🔑 Beste Lösung: MOSFET AC-Dimmer
Beseitigt Typen 1 und 2 auf Hardware-Ebene — kein Lampenwechsel, kein Code-Tuning erforderlich.
Der MOSFET AC-Dimmer (Trailing Edge) ist speziell für LED-Lampen entwickelt. Trailing-Edge-Schaltung gibt dem LED-Treiber einen sauberen Start in jeden Halbzyklus — 100/120-Hz-Pulsation verschwindet. Kein Haltestrom — stabiler Betrieb mit einer einzelnen 5–7-W-Lampe.
Wann MOSFET AC-Dimmer wählen:
Typ 3 (ESP32-Timing) gilt auch für MOSFET-Dimmer — ISR-Genauigkeit ist genauso wichtig. Verwenden Sie rbdimmerESP32 oder DimmerLink zur Lösung.
🟢 Einsteiger: TRIAC + Qualitätslampe oder DimmerLink
Verwenden Sie einen TRIAC-Dimmer? Zwei Optionen: Lampe wechseln oder DimmerLink verwenden.
Option 1: Lampe ersetzen durch ein Modell mit Qualitäts-LED-Treiber:
- Philips WarmGlow, SceneSwitch, Master LED
- Osram CLASSIC A, SUPERSTAR
- Ikea TRÅDFRI (dimmbarer Bereich)
Achten Sie auf der Verpackung auf: „TRIAC dimmable", „phase-cut compatible", „leading edge compatible".
Option 2: Mindestlast.
Mindestens 15–20 W. Bei kleineren Lasten einen Ballastwiderstand parallel schalten: 100–150 Ω / 20 W.
Option 3: I2C-Steuerung ohne ISR — DimmerLink.
If you use Raspberry Pi, ESP32-S2/C3/H2, or simply don't want to deal with interrupts — Jeder ESP32 controls TRIAC via I2C without writing any ISR code.
Wann DimmerLink wählen:
// DimmerLink via I2C — kein ISR, kein Nulldurchgang im Code
// Funktioniert mit: Arduino, ESP32, Raspberry Pi
// Dokumentation: https://www.rbdimmer.com/docs/dimmerlink-I2CCommunication
#include <Wire.h>
#define DIMMER_ADDR 0x50
#define REG_LEVEL 0x10
// Helligkeit setzen (20–95 % für LED-Lampen mit TRIAC)
void setLevel(uint8_t level) {
Wire.beginTransmission(DIMMER_ADDR);
Wire.write(REG_LEVEL);
Wire.write(level);
Wire.endTransmission();
}
void setup() {
Wire.begin();
setLevel(50); // 50 % Helligkeit
}
void loop() {}Ergebnis: stabile Helligkeit ohne Flimmern, sofern Sie eine Qualitätslampe verwenden.
🔵 Fortgeschritten: ESP32-Timing korrigieren (Typ 3)
Typ 3 gilt für jeden AC-Dimmer — TRIAC oder MOSFET.
Bestimmen Sie zuerst den Flimmertyp — sonst hilft die Lösung nicht:
| Symptom | Typ | Lösung |
|---|---|---|
| Gleiches Flimmern bei beliebigem Code | Typ 1 — LED-Treiber | MOSFET AC-Dimmer oder Lampe wechseln |
| Zufällige Blitze, Brummen unter 20 % | Typ 2 — TRIAC-Haltestrom | MOSFET AC-Dimmer oder min. 20 % |
| Ändert sich mit WiFi ein/aus | Typ 3 — ESP32-Timing | IRAM_ATTR / rbdimmerESP32 |
ESP32-Timing korrigieren (Typ 3)
Wenn das Flimmern bei WiFi.disconnect() verschwindet — das Problem ist das
ISR-Timing.
// Problem: ISR nicht in IRAM — ESP32 liest sie bei jedem Aufruf aus Flash
// Lösung: IRAM_ATTR platziert ISR dauerhaft im RAM
// ❌ Falsch (ohne IRAM_ATTR — Flimmern unter WiFi-Last):
void zeroCrossISR() {
triggerTriac();
}
// ✅ Richtig (IRAM_ATTR — ISR immer im RAM, ohne Flash-Verzögerungen):
void IRAM_ATTR zeroCrossISR() {
triggerTriac();
}For ESP32 Dual-Core, IRAM_ATTR is applied automatically inside the library.
Kerntrennung verbessert die Stabilität zusätzlich:
// rbdimmerESP32: ISR läuft auf Core 0 (System-Kern)
// loop() und WiFi laufen auf Core 1 — keine CPU-Konkurrenz
#include "rbdimmerESP32.h"
// ... restlicher Code unverändertGrundregel für LED-Lampen: Helligkeit niemals unter 20 % setzen. Die meisten LED-Lampen verhalten sich im Bereich 0–15 % instabil.
Option A: ESP32 mit rbdimmerESP32 ✅ Empfohlen
When: dual-core ESP32 only (not S2/C3/H2) Library: rbdimmerESP32 — docs · GitHub
// Plattform: Dual-Core-ESP32
// Bibliothek: rbdimmerESP32
// Bereich: 20–95 % für stabiles LED-Dimmen mit TRIAC
#include "rbdimmerESP32.h"
#define ZC_PIN 18 // Nulldurchgang-Eingang
#define DIM_PIN 19 // TRIAC-Gate-Steuerung
rbdimmer dimmer;
// Helligkeitsbereich für LED-Lampen begrenzen
void setLedLevel(uint8_t percent) {
// 0–100 % → 20–95 % für LED-Stabilität mit TRIAC umrechnen
uint8_t mapped = 20 + (percent * 75) / 100;
if (mapped > 95) mapped = 95;
dimmer.setPower(mapped);
}
void setup() {
dimmer.begin(ZC_PIN, DIM_PIN, 50); // 50-Hz-Netz
setLedLevel(50);
}
void loop() {}Häufige Fehler:
rbdimmerESP32auf Einzelkern-ESP32 (S2/C3/H2) verwenden — nicht unterstützt- Helligkeit = 0 setzen statt off aufzurufen: TRIAC ist bei sehr kleinen
Zündwinkeln instabil. Verwenden Sie
setPower(0)nur zum vollständigen Ausschalten.
Option B: Arduino AVR (Uno, Mega, Nano)
When: AVR boards only — do not use on ESP32! Library: Arduino Uno/Mega (legacy)
// Plattform: Arduino Uno / Mega / Nano (nur AVR)
// WARNUNG: Für ESP32 rbdimmerESP32 verwenden!
// Nulldurchgang: nur Pins 2 oder 3 auf Uno/Nano
#include <RBDdimmer.h>
#define ZC_PIN 2 // Nulldurchgang — nur Pins 2 oder 3
#define DIM_PIN 11 // PWM-fähiger Pin
dimmerLamp dimmer(DIM_PIN, ZC_PIN);
void setup() {
dimmer.begin(NORMAL_MODE, ON);
dimmer.setPower(20); // Minimum 20 % für LED-Lampen
}
void loop() {}⚠️ Häufige Fehler aus den Foren
Echte Fehler aus 3 Forum-Threads (2019–2025).
-
„Verschiedene Codes probiert — Flimmern geht nicht weg": Der Code ist bei Typen 1 und 2 nicht das Problem. Sie müssen den Dimmer (MOSFET AC-Dimmer) oder die Lampe (Philips/Osram) wechseln.
-
„Unter 30 % Helligkeit zufällige helle Blitze": TRIAC-Haltestrom (Typ 2). Lösung: MOSFET AC-Dimmer, oder Helligkeit über 20 % halten, oder mehr Last hinzufügen.
-
„Bei 100 % einwandfrei, flimmert nur beim Dimmen": Klassisches Zeichen eines billigen LED-Treibers (Typ 1). Bei voller Leistung wird die Sinuswelle nicht geschnitten. MOSFET AC-Dimmer oder Lampenwechsel behebt dies.
-
„
delay()in loop() hinzugefügt — etwas besser": Illusion. Zufällige Synchronisation mit der Netzfrequenz. Bei anderen Helligkeits- einstellungen wird wieder geflimmert. -
„ESP32 flimmert nur bei aktivem WiFi": Typ 3 — ISR-Timing-Störung. Lösung:
rbdimmerESP32(IRAM_ATTR automatisch angewendet) oder DimmerLink (Hardware-Isolation der Dimmersteuerung).
Schnell-Checkliste
Vor dem Posten im Forum prüfen:
→ Typ 3 — IRAM_ATTR oder rbdimmerESP32 verwenden
Kompatibilitätstabelle
| Lampe | TRIAC (Leading Edge) | MOSFET (Trailing Edge) | Hinweise |
|---|---|---|---|
| Philips WarmGlow / Master LED | ✅ 10–95 % | ✅ 5–95 % | Empfohlen |
| Osram SUPERSTAR | ✅ 15–95 % | ✅ 5–95 % | Empfohlen |
| Ikea TRÅDFRI dimmable | ✅ 10–95 % | ✅ 5–95 % | Empfohlen |
| Billige „dimmable" No-Name | ⚠️ Flimmert < 40 % | ✅ 5–95 % | MOSFET behebt es |
| Glühlampe | ✅ 10–95 % | ✅ 5–95 % | Ideale Widerstandslast |
| Beliebige „non-dimmable" LED | ❌ Dauerhaftes Flimmern | ❌ Möglich | Lampe ersetzen |
Verwandte Themen
- LED Lamps with AC Dimmer: TRIAC vs MOSFET — Compatibility Guide
- Trailing Edge vs Leading Edge: Which Dimmer Method to Choose
Noch Fragen?
Post on rbdimmer.com forum or open a GitHub Issue.