Se rendre au contenu

Journal des modifications

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 dans src/internal/. L'inclusion directe d'en-têtes internes n'est plus supportée.
  • Les exemples ont été restructurés à partir de fichiers .ino/.c plats en répertoires par croquis (requis pour le gestionnaire de bibliothèque Arduino IDE 2.x).
  • Kconfig.txt supprimé — la configuration du composant ESP-IDF utilise désormais le nom de fichier standard Kconfig. Les projets qui référençaient Kconfig.txt doivent ê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-bruit
  • rbdimmer_channel — État du canal, distribution de phase ZC, ISR deux passages
  • rbdimmer_timer — wrappers esp_timer create/start/stop
  • rbdimmer_curves — Conversion niveau → délai (LINEAR, RMS, LOG)
  • rbdimmer_transition — Fondu lisse basé sur tâche FreeRTOS
  • rbdimmer_types — Structures et énumérations partagées
  • rbdimmer_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-bruit
  • CONFIG_RBDIMMER_MIN_DELAY_US (par défaut 100 µs) — délai minimum ZC→TRIAC
  • CONFIG_RBDIMMER_LEVEL_MIN (par défaut 3%) — niveaux inférieurs → OFF
  • CONFIG_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_timer depuis l'ISR GPIO de niveau 3 rendait les délais sub-100 µs imprévisibles. MIN_DELAY_US augmenté 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_ISR pour 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