Registro delle modifiche
Note: Library GitHub: https://github.com/robotdyn-dimmer/rbdimmerESP32
Tutte le modifiche notevoli alla libreria rbdimmerESP32 saranno documentate in questo file.
Il formato è basato su Keep a Changeloge questo progetto aderisce al Versionamento Semantico.
[2.0.0] - 2026-03-23
Panoramica
Riscrittura architettonica completa. L'implementazione monolitica a file singolo è stata sostituita con un'architettura interna completamente modulare. Tutti i percorsi critici per il timing ora utilizzano il posizionamento IRAM_ATTR e l'invio ESP_TIMER_ISR. La convalida hardware su una scheda a 4 canali ha rivelato e risolto tre problemi indipendenti di sfarfallio che non erano riproducibili nella simulazione.
Modifiche di Rottura
- Il layout della sorgente interna è stato modificato da un singolo
rbdimmerESP32.cppa modulisrc/internal/. L'inclusione diretta di intestazioni interne non è più supportata. - Gli esempi sono stati ristrutturati da file
.ino/.cflat a directory per-sketch (necessario per il gestore librerie di Arduino IDE 2.x). Kconfig.txtrimosso — la configurazione dei componenti ESP-IDF ora utilizza il nome file standardKconfig. I progetti che hanno fatto riferimento aKconfig.txtdevono essere aggiornati.- L'API dell'intestazione pubblica (
rbdimmerESP32.h) è invariata — il codice dell'utente non deve essere modificato.
Aggiunto
- Architettura Modulare — implementazione divisa in sette moduli interni:
rbdimmer_zerocross— ZC GPIO ISR, misurazione della frequenza, filtro del rumorerbdimmer_channel— Stato del canale, invio fase ZC, ISR a due passaggirbdimmer_timer— wrapper di creazione/avvio/arresto esp_timerrbdimmer_curves— Conversione Livello → ritardo (LINEAR, RMS, LOG)rbdimmer_transition— Dissolvenza uniforme basata su attività FreeRTOSrbdimmer_types— Struct ed enum condivisirbdimmer_hal— Shim HAL GPIO/timer per la portabilità Arduino/ESP-IDF- Parametri Kconfig per l'ottimizzazione di ESP-IDF:
CONFIG_RBDIMMER_ZC_DEBOUNCE_US(default 3000 µs) — finestra del filtro del rumoreCONFIG_RBDIMMER_MIN_DELAY_US(default 100 µs) — ritardo minimo ZC→TRIACCONFIG_RBDIMMER_LEVEL_MIN(default 3%) — livelli inferiori → SPENTOCONFIG_RBDIMMER_LEVEL_MAX(default 99%) — livelli superiori → limitati- Matrice di Build CI (
.github/workflows/build.yml): - Arduino:
arduino/compile-sketches@v1, Core 3.x, 4 esempi × 5 chip (ESP32, S2, S3, C3, C6) - ESP-IDF:
espressif/esp-idf-ci-action@v1, IDF v5.3 / v5.4 / v5.5 × 5 chip = 15 job test_app/— progetto ESP-IDF minimalista per la verifica della superficie API in fase di compilazione
Corretto
- Sfarfallio generale a tutti i livelli di luminosità — il picco di commutazione TRIAC ha re-innescato lo ZC ISR a metà ciclo. Aggiunto filtro del rumore: qualsiasi bordo ZC entro
ZC_DEBOUNCE_US(3000 µs) dal bordo valido precedente viene scartato. - Sfarfallio al 100% di luminosità — con un ritardo di 50 µs la tensione CA (~5V) era al di sotto della soglia di latching TRIAC; inoltre l'invio
esp_timerISR dal GPIO ISR di livello 3 ha reso i ritardi sub-100 µs imprevedibili.MIN_DELAY_USaumentato da 50 → 100 µs; i livelli ≥ 100% mappati aLEVEL_MAX(99%). - Sincronizzazione multi-canale — offset di fase per-canale causati da reset GPIO sequenziale + braccio del timer in un singolo ciclo. ISR a due passaggi: il passaggio 1 imposta tutti i GPIO BASSO, il passaggio 2 arma tutti i timer di ritardo.
- Sfarfallio a livelli inferiori al 3% — tensione CA troppo bassa per un latching TRIAC affidabile verso la fine del ciclo. I livelli inferiori a
LEVEL_MIN(3%) restituiscono ritardo = 0 (canale SPENTO).
Modificato
- Tutti i gestori ISR ora utilizzano il posizionamento
IRAM_ATTR - L'invio del timer è stato modificato a
ESP_TIMER_ISRper jitter minimo - Versione minima supportata di ESP-IDF: 5.3 (era 4.4)
- Minimo Arduino ESP32 Core: 3.x (era 2.0.0)
[1.0.0] - 2024-01-01
Aggiunto
- Rilascio iniziale
- Implementazione a file singolo
- Supporto per ESP32, ESP32-S2, ESP32-S3, ESP32-C3
- Tre curve di luminosità: LINEAR, RMS, LOGARITHMIC
- Supporto multi-canale e multi-fase
- Transizioni uniformi tramite attività FreeRTOS
- Supporto Arduino IDE e ESP-IDF