Zum Inhalt springen

Falsche Bibliothek: RBDdimmer statt rbdimmerESP32 auf ESP32

RBDdimmer auf ESP32? Das ist die AVR-Bibliothek — ESP32 benötigt rbdimmerESP32. Die Pin-Reihenfolge in begin() ist ebenfalls vertauscht: (DIM, ZC) → (ZC, DIM, freq). Migrationsanleitung, Plattformtabelle und DimmerLink als universelle Alternative.
26. Februar 2026 durch
Falsche Bibliothek: RBDdimmer statt rbdimmerESP32 auf ESP32
Administrator
| Noch keine Kommentare

Kurzfassung: Für ESP32 benötigen Sie rbdimmerESP32 — nicht die alte RBDdimmer. Die alte Bibliothek wurde für Arduino AVR geschrieben: kein IRAM_ATTR, kein Core-Pinning, kein Schutz vor Race Conditions. Auf ESP32 verursacht sie Guru Meditation Error, zufällige Neustarts oder erratisches setPower()-Verhalten. Umgekehrt gilt: Für Arduino Uno/Mega verwenden Sie RBDdimmerrbdimmerESP32 lä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_ATTR und 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 cached memory region accessed)
  • error: 'xTaskCreatePinnedToCore' was not declared in this scope
  • warning: '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:

  • RBDdimmer verwendet kein IRAM_ATTR → ISR wird aus Flash ausgeführt → bei aktivem WiFi wird der Flash-Cache deaktiviert → Absturz. Details: troubleshooting/esp32-iram-attr.md
  • RBDdimmer pinnt die Aufgabe nicht an einen bestimmten Kern → auf Dual-Core-ESP32 konkurriert sie mit der WiFi-Aufgabe → Timing-Jitter → instabile Helligkeit
  • rbdimmerESP32 verwendet xTaskCreatePinnedToCore von 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:

cpp
// 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):

ini
lib_deps =
    https://github.com/robotdyn-dimmer/rbdimmerESP32


Code von RBDdimmer zu rbdimmerESP32 migrieren

cpp
// ─────────────── 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: In RBDdimmer nahm der Konstruktor (DIM, ZC), in rbdimmerESP32 nimmt die Methode begin() (ZC, DIM, freq). Vertauschen Sie sie, und die Last wird nicht geregelt.

Schnelltest nach der Migration (Sweep 10→90→10%):

cpp
// 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 RBDdimmer auf ESP32 gefunden — es soll funktionieren": Tutorials aus 2019–2022 verwenden häufig die alte Bibliothek auf ESP32. Nach der Veröffentlichung von rbdimmerESP32 sind diese Beispiele veraltet. Suchen Sie nach Beispielen mit rbdimmerESP32.

  • „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.

  • rbdimmerESP32 auf Uno getestet — kompiliert nicht": rbdimmerESP32 benötigt FreeRTOS (xTaskCreatePinnedToCore), das auf AVR nicht existiert. Für Uno/Nano/Mega verwenden Sie RBDdimmer.

  • „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) vs dimmer.begin(ZC, DIM, freq) — ZC und DIM sind vertauscht. Prüfen Sie das zuerst.

  • setPower() kompiliert und tut etwas — aber instabil": RBDdimmer kann auf ESP32 laufen, ohne explizit abzustürzen — aber ohne IRAM_ATTR und Core-Pinning ist das Timing unzuverlässig. Das ist kein „Funktionieren" — das ist „gelegentliches Zusammentreffen". Wechseln Sie zu rbdimmerESP32.




Schnell-Check

  • ☐ ESP32 (orig, S3): `#include "rbdimmerESP32.h"` und Klasse `rbdimmer`
  • ☐ Arduino Uno/Nano/Mega: `#include ` and class `dimmerLamp`
  • ☐ ESP8266: `#include ` (no dual-core, no FreeRTOS)
  • ☐ ESP32 S2/C3/H2/C6 (Single-Core): DimmerLink über I2C
  • ☐ Pin-Reihenfolge in `begin()`: `(ZC_PIN, DIM_PIN, freq)` für ESP32
  • ☐ Beide Bibliotheken gleichzeitig installiert? → Entfernen Sie die nicht benötigte


  • 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 erkannttroubleshooting/zero-cross-detection-errors.md
    • ESP32-S2/C3 Single-Coretroubleshooting/esp32-single-core-dimmer.md
    • Zero-cross not detectedtroubleshooting/zero-cross-detection-errors.md



    Noch Fragen?

    Ask on forum.rbdimmer.com or open a GitHub Issue.

    Diesen Beitrag teilen
    Anmelden , um einen Kommentar zu hinterlassen