Journal des modifications
Note: Library GitHub: https://github.com/robotdyn-dimmer/rbdimmerESP32
Tous les changements notables de la bibliothèque rbdimmerESP32 seront documentés dans ce fichier.
Le format est basé sur Keep a Changelog, et ce projet adhère au Semantic Versioning.
[2.0.0] - 2026-03-23
Aperçu
Réécriture architecturale complète. L'implémentation monolithique sur un seul fichier a été remplacée par une architecture interne entièrement modulaire. Tous les chemins critiques en termes de synchronisation utilisent désormais le placement IRAM_ATTR et la distribution ESP_TIMER_ISR. La validation matérielle sur une carte 4 canaux a révélé et résolu trois problèmes de scintillement indépendants qui n'étaient pas reproductibles en simulation.
Changements majeurs
- La disposition interne des sources a changé du fichier unique
rbdimmerESP32.cppà des modules danssrc/internal/. L'inclusion directe d'en-têtes internes n'est plus supportée. - Les exemples ont été restructurés à partir de fichiers
.ino/.cplats en répertoires par croquis (requis pour le gestionnaire de bibliothèque Arduino IDE 2.x). Kconfig.txtsupprimé — la configuration du composant ESP-IDF utilise désormais le nom de fichier standardKconfig. Les projets qui référençaientKconfig.txtdoivent être mis à jour.- L'API de l'en-tête public (
rbdimmerESP32.h) est inchangée — le code utilisateur n'a pas besoin d'être modifié.
Ajoutés
- Architecture modulaire — implémentation divisée en sept modules internes :
rbdimmer_zerocross— ISR GPIO ZC, mesure de fréquence, porte anti-bruitrbdimmer_channel— État du canal, distribution de phase ZC, ISR deux passagesrbdimmer_timer— wrappers esp_timer create/start/stoprbdimmer_curves— Conversion niveau → délai (LINEAR, RMS, LOG)rbdimmer_transition— Fondu lisse basé sur tâche FreeRTOSrbdimmer_types— Structures et énumérations partagéesrbdimmer_hal— Shims HAL GPIO/timer pour portabilité Arduino/ESP-IDF- Paramètres Kconfig pour l'ajustement ESP-IDF :
CONFIG_RBDIMMER_ZC_DEBOUNCE_US(par défaut 3000 µs) — fenêtre de porte anti-bruitCONFIG_RBDIMMER_MIN_DELAY_US(par défaut 100 µs) — délai minimum ZC→TRIACCONFIG_RBDIMMER_LEVEL_MIN(par défaut 3%) — niveaux inférieurs → OFFCONFIG_RBDIMMER_LEVEL_MAX(par défaut 99%) — niveaux supérieurs → limités- Matrice de compilation CI (
.github/workflows/build.yml) : - Arduino :
arduino/compile-sketches@v1, Core 3.x, 4 exemples × 5 puces (ESP32, S2, S3, C3, C6) - ESP-IDF :
espressif/esp-idf-ci-action@v1, IDF v5.3 / v5.4 / v5.5 × 5 puces = 15 tâches test_app/— projet minimal ESP-IDF pour vérification de la surface API au moment de la compilation
Corrigés
- Scintillement général à tous les niveaux de luminosité — la pointe de commutation TRIAC a retriggerisé l'ISR ZC en milieu de demi-cycle. Ajout d'une porte anti-bruit : tout front ZC dans
ZC_DEBOUNCE_US(3000 µs) d'un front valide précédent est rejeté. - Scintillement à 100% de luminosité — à 50 µs de délai, la tension AC (~5V) était en dessous du seuil de latching TRIAC ; de plus, la distribution ISR
esp_timerdepuis l'ISR GPIO de niveau 3 rendait les délais sub-100 µs imprévisibles.MIN_DELAY_USaugmenté de 50 → 100 µs ; les niveaux ≥ 100% mappés àLEVEL_MAX(99%). - Synchronisation multi-canaux — les décalages de phase par canal causés par la réinitialisation GPIO séquentielle + l'armement du minuteur dans une seule boucle. ISR deux passages : Passage 1 définit tous les GPIOs LOW, Passage 2 arme tous les minuteurs de délai.
- Scintillement aux niveaux inférieurs à 3% — tension AC trop faible pour le latching TRIAC fiable près de la fin du demi-cycle. Les niveaux inférieurs à
LEVEL_MIN(3%) retournent délai = 0 (canal OFF).
Changés
- Tous les gestionnaires ISR utilisent désormais le placement
IRAM_ATTR - La distribution des minuteurs a changé vers
ESP_TIMER_ISRpour une gigue minimale - Version ESP-IDF minimale supportée : 5.3 (était 4.4)
- Arduino ESP32 Core minimum : 3.x (était 2.0.0)
[1.0.0] - 2024-01-01
Ajoutés
- Version initiale
- Implémentation sur fichier unique
- Support pour ESP32, ESP32-S2, ESP32-S3, ESP32-C3
- Trois courbes de luminosité : LINEAR, RMS, LOGARITHMIC
- Support multi-canal et multi-phase
- Transitions lisses via tâches FreeRTOS
- Support Arduino IDE et ESP-IDF