Se rendre au contenu

Mauvaise bibliothèque : RBDdimmer au lieu de rbdimmerESP32 sur ESP32

Vous utilisez RBDdimmer sur ESP32 ? C'est la bibliothèque AVR — ESP32 nécessite rbdimmerESP32. L'ordre des broches dans begin() est aussi inversé : (DIM, ZC) → (ZC, DIM, freq). Guide de migration, tableau des plateformes et DimmerLink comme alternative universelle.

En bref : Pour ESP32 vous avez besoin de rbdimmerESP32 — pas de l'ancienne RBDdimmer. L'ancienne bibliothèque a été écrite pour Arduino AVR : pas d'IRAM_ATTR, pas d'épinglage de cœur, pas de protection contre les conditions de course. Sur ESP32 elle provoque un Guru Meditation Error, des redémarrages aléatoires ou un comportement erratique de setPower(). Inversement, pour Arduino Uno/Mega utilisez RBDdimmerrbdimmerESP32 ne compilera pas dessus.



Description du problème

Vous prenez un tutoriel qui utilise #include <RBDdimmer.h>, vous le téléversez sur un ESP32 — et vous obtenez l'un des problèmes suivants :

  • Guru Meditation Error avec WiFi actif (plantage dans le gestionnaire d'interruption)
  • Redémarrages aléatoires sans cause apparente
  • setPower() ne donne pas la luminosité attendue — comportement chaotique de la charge
  • Avertissements du compilateur sur IRAM_ATTR et des API obsolètes

Ou l'inverse — rbdimmerESP32 sur Arduino Uno :

  • error: 'xTaskCreatePinnedToCore' was not declared in this scope

Messages typiques sur les forums :

  • 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) — la lampe s'éteint puis passe à pleine luminosité »



Cause profonde

L'écosystème rbdimmer possède deux bibliothèques distinctes pour différentes plateformes :

Bibliothèque Plateforme Classe
RBDdimmer Arduino AVR (Uno, Nano, Mega) dimmerLamp
rbdimmerESP32 ESP32 double cœur (orig, S3) rbdimmer

Elles ne sont pas interchangeables. Différences techniques clés :

  • RBDdimmer n'utilise pas IRAM_ATTR → l'ISR s'exécute depuis la flash → avec WiFi actif le cache flash est désactivé → plantage. Détails : troubleshooting/esp32-iram-attr.md
  • RBDdimmer n'épingle pas la tâche sur un cœur spécifique → sur ESP32 double cœur elle entre en concurrence avec la tâche WiFi → instabilité du timing → luminosité instable
  • rbdimmerESP32 utilise xTaskCreatePinnedToCore de FreeRTOS → ne compile pas sur Arduino AVR (pas de FreeRTOS)



Solutions



🟢 Pour les débutants : DimmerLink — une bibliothèque pour toutes les plateformes

Vous ne voulez pas vous soucier de quelle bibliothèque utiliser ? DimmerLink est contrôlé via I2C — le même code fonctionne sur Arduino, ESP32, ESP8266 et RPi.

DimmerLink possède son propre contrôleur de passage par zéro et son timing TRIAC. Votre microcontrôleur ne fait que définir le niveau de luminosité via I2C. Pas d'ISR, pas d'IRAM_ATTR, pas de sélection de bibliothèque par plateforme.

Code :

cpp
// DimmerLink — fonctionne sur Arduino, ESP32, ESP8266, Raspberry Pi
// Documentation : 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();      // SDA/SCL par défaut pour votre carte
    setLevel(50);      // luminosité 50%
}
void loop() {}

Résultat : Aucun casse-tête de sélection de bibliothèque — code identique sur n'importe quelle plateforme.



🔵 Pour les utilisateurs avancés : la bonne bibliothèque pour votre plateforme

Vous voulez une connexion ISR directe ? Utilisez la bonne bibliothèque.


Installer rbdimmerESP32 (pour ESP32)

Dans Arduino IDE :

  • Croquis → Inclure une bibliothèque → Gérer les bibliothèques
  • Rechercher : rbdimmerESP32
  • Installer : par RobotDyn

Dans PlatformIO (platformio.ini) :

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


Migration du code de RBDdimmer vers rbdimmerESP32

cpp
// ─────────────── AVANT (RBDdimmer — pas pour ESP32) ──────────────────
#include <RBDdimmer.h>
dimmerLamp dimmer(DIM_PIN, ZC_PIN);
void setup() {
    // NORMAL_MODE, ON — constantes RBDdimmer, n'existent pas dans rbdimmerESP32
    dimmer.begin(NORMAL_MODE, ON);
    dimmer.setPower(50);
}
// ──────────────── APRÈS (rbdimmerESP32 — correct pour ESP32) ─────────
#include "rbdimmerESP32.h"
rbdimmer dimmer;
void setup() {
    // Ordre des broches : ZC_PIN, DIM_PIN (inversé par rapport à RBDdimmer !)
    dimmer.begin(ZC_PIN, DIM_PIN, 50);  // troisième paramètre — fréquence secteur
    dimmer.setPower(50);
}

⚠️ L'ordre des broches dans begin() a changé : dans RBDdimmer le constructeur prenait (DIM, ZC), dans rbdimmerESP32 la méthode begin() prend (ZC, DIM, freq). Si vous les inversez, la charge ne sera pas régulée.

Test rapide après migration (balayage 10→90→10%) :

cpp
// Test visuel : balayage progressif 10% → 90% → 10%
// Si la charge réagit — bibliothèque et broches sont correctes
#include "rbdimmerESP32.h"
#define ZC_PIN  18  // n'importe quel GPIO sur ESP32
#define DIM_PIN 19  // n'importe quel GPIO sur ESP32
rbdimmer dimmer;
void setup() {
    Serial.begin(115200);
    dimmer.begin(ZC_PIN, DIM_PIN, 50);  // secteur 50 Hz
    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);
    }
}


⚠️ Pièges courants

  • « J'ai trouvé un tutoriel utilisant RBDdimmer sur ESP32 — il dit que ça marche » : Les tutoriels de 2019–2022 utilisent souvent l'ancienne bibliothèque sur ESP32. Depuis la sortie de rbdimmerESP32, ces exemples sont obsolètes. Cherchez des exemples utilisant rbdimmerESP32.

  • « ESP8266 + RBDdimmer + WiFi — instable » : L'ESP8266 est simple cœur ; le SDK WiFi prend périodiquement le contrôle du CPU. Les symptômes sont similaires à l'ESP32 simple cœur : instabilité du timing avec WiFi actif. Pour des projets ESP8266 fiables avec WiFi — utilisez DimmerLink via I2C.

  • « J'ai essayé rbdimmerESP32 sur Uno — ne compile pas » : rbdimmerESP32 nécessite FreeRTOS (xTaskCreatePinnedToCore), qui n'existe pas sur AVR. Pour Uno/Nano/Mega utilisez RBDdimmer.

  • « Les deux bibliothèques installées — conflit d'en-têtes » : L'Arduino IDE peut mélanger les fichiers. Supprimez celle dont vous n'avez pas besoin via Croquis → Inclure une bibliothèque → Gérer les bibliothèques.

  • « L'ordre des broches semble identique — pourquoi ça ne marche pas ? » : dimmerLamp dimmer(DIM, ZC) vs dimmer.begin(ZC, DIM, freq) — ZC et DIM sont inversés. Vérifiez cela en premier.

  • « setPower() compile et fait quelque chose — mais instable » : RBDdimmer peut tourner sur ESP32 sans plantage explicite — mais sans IRAM_ATTR et épinglage de cœur, le timing n'est pas fiable. Ce n'est pas « fonctionner » — c'est « coïncider occasionnellement ». Passez à rbdimmerESP32.




Vérification rapide

  • ☐ ESP32 (orig, S3) : `#include "rbdimmerESP32.h"` et classe `rbdimmer`
  • ☐ Arduino Uno/Nano/Mega: `#include ` and class `dimmerLamp`
  • ☐ ESP8266: `#include ` (no dual-core, no FreeRTOS)
  • ☐ ESP32 S2/C3/H2/C6 (simple cœur) : DimmerLink via I2C
  • ☐ Ordre des broches dans `begin()` : `(ZC_PIN, DIM_PIN, freq)` pour ESP32
  • ☐ Les deux bibliothèques installées en même temps ? → supprimez celle inutile


  • Tableau de compatibilité des bibliothèques

    Plateforme Bibliothèque Classe Remarque
    Arduino Uno/Nano/Mini RBDdimmer dimmerLamp AVR, pas de FreeRTOS
    Arduino Mega RBDdimmer dimmerLamp AVR
    ESP32 (orig) / S3 rbdimmerESP32 rbdimmer Double cœur
    ESP32-S2/C3/H2/C6 DimmerLink (I2C) Simple cœur
    ESP8266 RBDdimmer dimmerLamp Pas de double cœur ; instable avec WiFi
    DimmerLink DimmerLink (I2C) Pas de temps réel



    Problèmes connexes

    • Passage par zéro non détectétroubleshooting/zero-cross-detection-errors.md
    • ESP32-S2/C3 simple cœurtroubleshooting/esp32-single-core-dimmer.md
    • Zero-cross not detectedtroubleshooting/zero-cross-detection-errors.md



    Encore des questions ?

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

    Partager cet article
    Se connecter pour laisser un commentaire.