Kurzfassung: Für ESP32 benötigen Sie
rbdimmerESP32— nicht die alteRBDdimmer. Die alte Bibliothek wurde für Arduino AVR geschrieben: keinIRAM_ATTR, kein Core-Pinning, kein Schutz vor Race Conditions. Auf ESP32 verursacht sie Guru Meditation Error, zufällige Neustarts oder erratischessetPower()-Verhalten. Umgekehrt gilt: Für Arduino Uno/Mega verwenden SieRBDdimmer—rbdimmerESP32lässt sich dort nicht kompilieren.
Problembeschreibung
Sie nehmen ein Tutorial, das #include <RBDdimmer.h> verwendet, laden es
auf einen ESP32 — und erhalten eines der folgenden Probleme:
- Guru Meditation Error bei aktivem WiFi (Absturz im ISR-Handler)
- Zufällige Neustarts ohne erkennbare Ursache
setPower()liefert nicht die erwartete Helligkeit — chaotisches Lastverhalten- Kompilerwarnungen über
IRAM_ATTRund veraltete APIs
Oder umgekehrt — rbdimmerESP32 auf Arduino Uno:
error: 'xTaskCreatePinnedToCore' was not declared in this scope
Typische Forenbeiträge:
Guru Meditation Error: Core 1 panic'ed (Cache disabled but cachedmemory region accessed)error: 'xTaskCreatePinnedToCore' was not declared in this scopewarning: 'IRAM_ATTR' attribute ignored- „
setPower(50)— Lampe wird dunkel, springt dann auf volle Helligkeit"
Grundursache
Das rbdimmer-Ökosystem hat zwei separate Bibliotheken für unterschiedliche Plattformen:
| Bibliothek | Plattform | Klasse |
|---|---|---|
RBDdimmer |
Arduino AVR (Uno, Nano, Mega) | dimmerLamp |
rbdimmerESP32 |
ESP32 Dual-Core (orig, S3) | rbdimmer |
Sie sind nicht austauschbar. Wichtige technische Unterschiede:
RBDdimmerverwendet keinIRAM_ATTR→ ISR wird aus Flash ausgeführt → bei aktivem WiFi wird der Flash-Cache deaktiviert → Absturz. Details:troubleshooting/esp32-iram-attr.mdRBDdimmerpinnt die Aufgabe nicht an einen bestimmten Kern → auf Dual-Core-ESP32 konkurriert sie mit der WiFi-Aufgabe → Timing-Jitter → instabile HelligkeitrbdimmerESP32verwendetxTaskCreatePinnedToCorevon FreeRTOS → kompiliert nicht auf Arduino AVR (kein FreeRTOS)
Lösungen
🟢 Für Einsteiger: DimmerLink — eine Bibliothek für alle Plattformen
Sie möchten sich nicht um die richtige Bibliothek kümmern? DimmerLink wird über I2C gesteuert — derselbe Code funktioniert auf Arduino, ESP32, ESP8266 und RPi.
DimmerLink hat einen eigenen Nulldurchgangs-Controller und TRIAC-Timing. Ihr Mikrocontroller setzt nur die Helligkeit über I2C. Keine ISR, kein IRAM_ATTR, keine plattformabhängige Bibliotheksauswahl.
Code:
// DimmerLink — funktioniert auf Arduino, ESP32, ESP8266, Raspberry Pi
// Dokumentation: https://www.rbdimmer.com/docs/dimmerlink-I2CCommunication
#include <Wire.h>
#define DIMMER_ADDR 0x50
#define REG_LEVEL 0x10
void setLevel(uint8_t level) { // level: 0–100%
Wire.beginTransmission(DIMMER_ADDR);
Wire.write(REG_LEVEL);
Wire.write(level);
Wire.endTransmission();
}
void setup() {
Wire.begin(); // Standard-SDA/SCL für Ihr Board
setLevel(50); // 50% Helligkeit
}
void loop() {}Ergebnis: Keine Probleme bei der Bibliotheksauswahl — identischer Code auf jeder Plattform.
🔵 Für Fortgeschrittene: Die richtige Bibliothek für Ihre Plattform
Sie möchten eine direkte ISR-Verbindung? Verwenden Sie die richtige Bibliothek.
rbdimmerESP32 installieren (für ESP32)
In der Arduino IDE:
- Sketch → Bibliothek einbinden → Bibliotheken verwalten
- Suchen nach:
rbdimmerESP32 - Installieren: von RobotDyn
In PlatformIO (platformio.ini):
lib_deps =
https://github.com/robotdyn-dimmer/rbdimmerESP32Code von RBDdimmer zu rbdimmerESP32 migrieren
// ─────────────── VORHER (RBDdimmer — nicht für ESP32) ────────────────
#include <RBDdimmer.h>
dimmerLamp dimmer(DIM_PIN, ZC_PIN);
void setup() {
// NORMAL_MODE, ON — RBDdimmer-Konstanten, gibt es nicht in rbdimmerESP32
dimmer.begin(NORMAL_MODE, ON);
dimmer.setPower(50);
}
// ──────────────── NACHHER (rbdimmerESP32 — korrekt für ESP32) ────────
#include "rbdimmerESP32.h"
rbdimmer dimmer;
void setup() {
// Pin-Reihenfolge: ZC_PIN, DIM_PIN (vertauscht gegenüber RBDdimmer!)
dimmer.begin(ZC_PIN, DIM_PIN, 50); // dritter Parameter — Netzfrequenz
dimmer.setPower(50);
}⚠️ Pin-Reihenfolge in
begin()geändert: InRBDdimmernahm der Konstruktor(DIM, ZC), inrbdimmerESP32nimmt die Methodebegin()(ZC, DIM, freq). Vertauschen Sie sie, und die Last wird nicht geregelt.
Schnelltest nach der Migration (Sweep 10→90→10%):
// Visueller Test: gleitender Sweep 10% → 90% → 10%
// Wenn die Last reagiert — Bibliothek und Pins sind korrekt
#include "rbdimmerESP32.h"
#define ZC_PIN 18 // beliebiger GPIO am ESP32
#define DIM_PIN 19 // beliebiger GPIO am ESP32
rbdimmer dimmer;
void setup() {
Serial.begin(115200);
dimmer.begin(ZC_PIN, DIM_PIN, 50); // 50-Hz-Netz
delay(500);
}
void loop() {
for (int p = 10; p <= 90; p += 10) {
dimmer.setPower(p);
Serial.println(p);
delay(500);
}
for (int p = 90; p >= 10; p -= 10) {
dimmer.setPower(p);
Serial.println(p);
delay(500);
}
}⚠️ Häufige Fallstricke
-
„Tutorial mit
RBDdimmerauf ESP32 gefunden — es soll funktionieren": Tutorials aus 2019–2022 verwenden häufig die alte Bibliothek auf ESP32. Nach der Veröffentlichung vonrbdimmerESP32sind diese Beispiele veraltet. Suchen Sie nach Beispielen mitrbdimmerESP32. -
„ESP8266 + RBDdimmer + WiFi — instabil": ESP8266 ist Single-Core; das WiFi-SDK übernimmt periodisch die CPU. Die Symptome ähneln dem Single-Core-ESP32: Timing-Jitter bei aktivem WiFi. Für zuverlässige ESP8266-Projekte mit WiFi — verwenden Sie DimmerLink über I2C.
-
„
rbdimmerESP32auf Uno getestet — kompiliert nicht":rbdimmerESP32benötigt FreeRTOS (xTaskCreatePinnedToCore), das auf AVR nicht existiert. Für Uno/Nano/Mega verwenden SieRBDdimmer. -
„Beide Bibliotheken installiert — Header-Konflikt": Die Arduino IDE kann Dateien verwechseln. Entfernen Sie die nicht benötigte über Sketch → Bibliothek einbinden → Bibliotheken verwalten.
-
„Pin-Reihenfolge sieht gleich aus — warum funktioniert es nicht?":
dimmerLamp dimmer(DIM, ZC)vsdimmer.begin(ZC, DIM, freq)— ZC und DIM sind vertauscht. Prüfen Sie das zuerst. -
„
setPower()kompiliert und tut etwas — aber instabil":RBDdimmerkann auf ESP32 laufen, ohne explizit abzustürzen — aber ohneIRAM_ATTRund Core-Pinning ist das Timing unzuverlässig. Das ist kein „Funktionieren" — das ist „gelegentliches Zusammentreffen". Wechseln Sie zurbdimmerESP32.
Schnell-Check
Bibliothekskompatibilitätstabelle
| Plattform | Bibliothek | Klasse | Hinweis |
|---|---|---|---|
| Arduino Uno/Nano/Mini | RBDdimmer |
dimmerLamp |
AVR, kein FreeRTOS |
| Arduino Mega | RBDdimmer |
dimmerLamp |
AVR |
| ESP32 (orig) / S3 | rbdimmerESP32 |
rbdimmer |
Dual-Core |
| ESP32-S2/C3/H2/C6 | DimmerLink (I2C) | — | Single-Core |
| ESP8266 | RBDdimmer |
dimmerLamp |
Kein Dual-Core; instabil mit WiFi |
| — (kein ISR) | DimmerLink (I2C) | — | Keine Echtzeitfähigkeit |
Verwandte Probleme
- Nulldurchgang nicht erkannt →
troubleshooting/zero-cross-detection-errors.md - ESP32-S2/C3 Single-Core →
troubleshooting/esp32-single-core-dimmer.md - Zero-cross not detected →
troubleshooting/zero-cross-detection-errors.md
Noch Fragen?
Ask on forum.rbdimmer.com or open a GitHub Issue.