/* Use project configuration menu (idf.py menuconfig) to choose the GPIO to blink, or you can edit the following line and set a number here. */ // CONFIG_BLINK_GPIO的默认值是8 #define BLINK_GPIO CONFIG_BLINK_GPIO
staticuint8_t s_led_state = 0;
#ifdef CONFIG_BLINK_LED_STRIP
staticled_strip_handle_t led_strip;
staticvoidblink_led(void) { /* If the addressable LED is enabled */ if (s_led_state) { /* Set the LED pixel using RGB from 0 (0%) to 255 (100%) for each color */ led_strip_set_pixel(led_strip, 0, 16, 16, 16); /* Refresh the strip to send data */ led_strip_refresh(led_strip); } else { /* Set all LED off to clear all pixels */ led_strip_clear(led_strip); } }
staticvoidconfigure_led(void) { ESP_LOGI(TAG, "Example configured to blink addressable LED!"); /* LED strip initialization with the GPIO and pixels number*/ led_strip_config_t strip_config = { .strip_gpio_num = BLINK_GPIO, .max_leds = 1, // at least one LED on board }; #if CONFIG_BLINK_LED_STRIP_BACKEND_RMT led_strip_rmt_config_t rmt_config = { .resolution_hz = 10 * 1000 * 1000, // 10MHz .flags.with_dma = false, }; ESP_ERROR_CHECK(led_strip_new_rmt_device(&strip_config, &rmt_config, &led_strip)); #elif CONFIG_BLINK_LED_STRIP_BACKEND_SPI led_strip_spi_config_t spi_config = { .spi_bus = SPI2_HOST, .flags.with_dma = true, }; ESP_ERROR_CHECK(led_strip_new_spi_device(&strip_config, &spi_config, &led_strip)); #else #error"unsupported LED strip backend" #endif /* Set all LED off to clear all pixels */ led_strip_clear(led_strip); }
#elif CONFIG_BLINK_LED_GPIO
staticvoidblink_led(void) { /* Set the GPIO level according to the state (LOW or HIGH)*/ gpio_set_level(BLINK_GPIO, s_led_state); }
staticvoidconfigure_led(void) { ESP_LOGI(TAG, "Example configured to blink GPIO LED!"); gpio_reset_pin(BLINK_GPIO); /* Set the GPIO as a push/pull output */ gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); }
#else #error"unsupported LED type" #endif
voidapp_main(void) {
/* Configure the peripheral according to the LED type */ configure_led();
while (1) { ESP_LOGI(TAG, "Turning the LED %s!", s_led_state == true ? "ON" : "OFF"); blink_led(); /* Toggle the LED state */ s_led_state = !s_led_state; vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS); } }
choice BLINK_LED prompt "Blink LED type" default BLINK_LED_GPIO if IDF_TARGET_ESP32 || IDF_TARGET_ESP32C2 default BLINK_LED_STRIP help Select the LED type. A normal level controlled LED or an addressable LED strip. The default selection is based on the Espressif DevKit boards. You can change the default selection according to your board.
choice BLINK_LED_STRIP_BACKEND depends on BLINK_LED_STRIP prompt "LED strip backend peripheral" default BLINK_LED_STRIP_BACKEND_RMT if SOC_RMT_SUPPORTED default BLINK_LED_STRIP_BACKEND_SPI help Select the backend peripheral to drive the LED strip.
config BLINK_GPIO int "Blink GPIO number" range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX default 5 if IDF_TARGET_ESP32 default 18 if IDF_TARGET_ESP32S2 default 48 if IDF_TARGET_ESP32S3 default 8 help GPIO number (IOxx) to blink on and off the LED. Some GPIOs are used for other purposes (flash connections, etc.) and cannot be used to blink.
config BLINK_PERIOD int "Blink period in ms" range 10 3600000 default 1000 help Define the blinking period in milliseconds.
这个文件定义了CONFIG_BLINK_LED_STRIP、CONFIG_BLINK_LED_GPIO,在配置菜单中提供支持的LED类型让用户选择,可选项:LED GPIO(普通的LED) or LED STRIP(可寻址的LED)。由于测试的开发板的芯片的ESP32-C3,所以给了默认值:CONFIG_BLINK_LED_STRIP。
staticvoidblink_led(void) { /* If the addressable LED is enabled */ if (s_led_state) { /* Set the LED pixel using RGB from 0 (0%) to 255 (100%) for each color */ led_strip_set_pixel(led_strip, 0, 16, 16, 16); /* Refresh the strip to send data */ led_strip_refresh(led_strip); } else { /* Set all LED off to clear all pixels */ led_strip_clear(led_strip); } }
staticvoidconfigure_led(void) { ESP_LOGI(TAG, "Example configured to blink addressable LED!"); /* LED strip initialization with the GPIO and pixels number*/ led_strip_config_t strip_config = { .strip_gpio_num = BLINK_GPIO, .max_leds = 1, // at least one LED on board };