1.8 KiB
1.8 KiB
ESP32 ESP-IDF component for AC dimmer for 115V/400Hz
Features
- Zero-crossing detection via GPIO interrupt for precise phase-angle control.
- TRIAC gate control through ESP-IDF gptimer with configurable dimming level (0–100%).
- IRAM-safe ISR and callback functions for reliable operation.
- Thread-safe start/stop/set/get API.
Note
Enable the following settings in menuconfig:
GPIO_CTRL_FUNC_IN_IRAM
CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM
CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM
CONFIG_GPTIMER_ISR_CACHE_SAFE
Using
In an existing project, run the following command to install the component:
cd ../your_project/components
git clone https://github.com/aZholtikov/zh_ac_dimmer
In the application, add the component:
#include "zh_ac_dimmer.h"
Example
#include "zh_ac_dimmer.h"
zh_ac_dimmer_handle_t *ac_dimmer_handle = NULL;
void app_main(void)
{
esp_log_level_set("zh_ac_dimmer", ESP_LOG_ERROR);
zh_ac_dimmer_init_config_t config = ZH_AC_DIMMER_INIT_CONFIG_DEFAULT();
config.zero_cross_gpio = GPIO_NUM_16;
config.triac_gpio = GPIO_NUM_17;
zh_ac_dimmer_init(&config, &ac_dimmer_handle);
zh_ac_dimmer_start(&ac_dimmer_handle);
uint8_t value = 0;
for (uint8_t i = 0; i <= 100; ++i)
{
zh_ac_dimmer_set(&ac_dimmer_handle, i);
zh_ac_dimmer_get(&ac_dimmer_handle, &value);
printf("Dimmer value: %d.\n", value);
vTaskDelay(100 / portTICK_PERIOD_MS);
}
for (uint8_t i = 100; i > 0; --i)
{
zh_ac_dimmer_set(&ac_dimmer_handle, i);
zh_ac_dimmer_get(&ac_dimmer_handle, &value);
printf("Dimmer value: %d.\n", value);
vTaskDelay(100 / portTICK_PERIOD_MS);
}
zh_ac_dimmer_stop(&ac_dimmer_handle);
zh_ac_dimmer_deinit(&ac_dimmer_handle);
}