Registro de cambios
Note: Library GitHub: https://github.com/robotdyn-dimmer/rbdimmerESP32
Todos los cambios notables en la biblioteca rbdimmerESP32 serán documentados en este archivo.
El formato se basa en Keep a Changelog, y este proyecto se adhiere a Semantic Versioning.
[2.0.0] - 2026-03-23
Descripción general
Reescritura arquitectónica completa. La implementación monolítica de un solo archivo ha sido reemplazada con una arquitectura interna completamente modular. Todas las rutas críticas en tiempo de ejecución ahora utilizan colocación IRAM_ATTR y envío ESP_TIMER_ISR. La validación de hardware en una placa de 4 canales reveló y resolvió tres problemas de parpadeo independientes que no eran reproducibles en simulación.
Cambios que rompen compatibilidad
- El diseño de código fuente interno cambió de un único
rbdimmerESP32.cppa módulos ensrc/internal/. Ya no se admite la inclusión directa de encabezados internos. - Ejemplos reestructurados de archivos
.ino/.cplanos a directorios por esquema (requerido para el administrador de bibliotecas del Arduino IDE 2.x). Kconfig.txteliminado — la configuración del componente ESP-IDF ahora utiliza el nombre de archivo estándarKconfig. Los proyectos que hacían referencia aKconfig.txtdeben actualizarse.- El API del encabezado público (
rbdimmerESP32.h) no ha cambiado — el código del usuario no necesita ser modificado.
Agregado
- Arquitectura modular — implementación dividida en siete módulos internos:
rbdimmer_zerocross— ZC GPIO ISR, medición de frecuencia, compuerta de ruidorbdimmer_channel— Estado del canal, envío de fase ZC, ISR de dos pasadasrbdimmer_timer— Contenedores esp_timer crear/iniciar/detenerrbdimmer_curves— Conversión de nivel → retardo (LINEAR, RMS, LOG)rbdimmer_transition— Transición suave basada en tarea FreeRTOSrbdimmer_types— Estructuras y enumeraciones compartidasrbdimmer_hal— Derivaciones HAL GPIO/temporizador para portabilidad Arduino/ESP-IDF- Parámetros Kconfig para ajuste ESP-IDF:
CONFIG_RBDIMMER_ZC_DEBOUNCE_US(predeterminado 3000 µs) — ventana de compuerta de ruidoCONFIG_RBDIMMER_MIN_DELAY_US(predeterminado 100 µs) — retardo mínimo ZC→TRIACCONFIG_RBDIMMER_LEVEL_MIN(predeterminado 3%) — niveles por debajo → OFFCONFIG_RBDIMMER_LEVEL_MAX(predeterminado 99%) — niveles por encima → limitado- Matriz de compilación CI (
.github/workflows/build.yml): - Arduino:
arduino/compile-sketches@v1, Core 3.x, 4 ejemplos × 5 chips (ESP32, S2, S3, C3, C6) - ESP-IDF:
espressif/esp-idf-ci-action@v1, IDF v5.3 / v5.4 / v5.5 × 5 chips = 15 trabajos test_app/— proyecto minimal ESP-IDF para verificación de superficie de API en tiempo de compilación
Corregido
- Parpadeo general en todos los niveles de brillo — el pico de conmutación TRIAC reactivó ISR ZC a mitad del ciclo. Se agregó compuerta de ruido: cualquier borde ZC dentro de
ZC_DEBOUNCE_US(3000 µs) del borde válido anterior se descarta. - Parpadeo al 100% de brillo — a un retardo de 50 µs el voltaje AC (~5V) estaba por debajo del umbral de enganche TRIAC; además, el envío ISR
esp_timerdesde ISR GPIO de nivel 3 hizo que los retardos por debajo de 100 µs fueran impredecibles.MIN_DELAY_USaumentado de 50 → 100 µs; niveles ≥ 100% asignados aLEVEL_MAX(99%). - Sincronización multicanal — los desplazamientos de fase por canal causados por reajuste GPIO secuencial + brazo de temporizador en un solo bucle. ISR de dos pasadas: Pasada 1 establece todos los GPIO en BAJO, Pasada 2 arma todos los temporizadores de retardo.
- Parpadeo en niveles por debajo del 3% — voltaje AC demasiado bajo para enganche TRIAC confiable cerca del final del medio ciclo. Niveles por debajo de
LEVEL_MIN(3%) retornan retardo = 0 (canal OFF).
Cambiado
- Todos los manejadores ISR ahora utilizan colocación
IRAM_ATTR - Envío de temporizador cambiado a
ESP_TIMER_ISRpara jitter mínimo - Versión mínima compatible de ESP-IDF: 5.3 (fue 4.4)
- Núcleo Arduino ESP32 mínimo: 3.x (fue 2.0.0)
[1.0.0] - 2024-01-01
Agregado
- Lanzamiento inicial
- Implementación de un solo archivo
- Soporte para ESP32, ESP32-S2, ESP32-S3, ESP32-C3
- Tres curvas de brillo: LINEAR, RMS, LOGARITHMIC
- Soporte multicanal y multifase
- Transiciones suaves a través de tareas FreeRTOS
- Soporte Arduino IDE y ESP-IDF