From b2efd94109b14f6810f89cc81e27f1aed97b4f78 Mon Sep 17 00:00:00 2001 From: morris Date: Thu, 11 Aug 2022 14:54:50 +0800 Subject: [PATCH] led_strip: use component manager in the example --- .../led_strip/CMakeLists.txt | 9 -- .../common_components/led_strip/README.md | 15 --- .../led_strip/include/led_strip.h | 95 -------------- .../led_strip/interface/led_strip_interface.h | 78 ----------- .../led_strip/src/led_strip_api.c | 35 ----- .../led_strip/src/led_strip_rmt_dev.c | 112 ---------------- .../led_strip/src/led_strip_rmt_encoder.c | 124 ------------------ .../led_strip/src/led_strip_rmt_encoder.h | 36 ----- examples/get-started/blink/CMakeLists.txt | 2 - examples/get-started/blink/README.md | 8 +- .../blink/main/blink_example_main.c | 5 +- .../get-started/blink/main/idf_component.yml | 2 + .../light_sample/light_bulb/CMakeLists.txt | 4 +- .../light_bulb/main/idf_component.yml | 1 + .../light_bulb/main/light_driver.c | 5 +- 15 files changed, 16 insertions(+), 515 deletions(-) delete mode 100644 examples/common_components/led_strip/CMakeLists.txt delete mode 100644 examples/common_components/led_strip/README.md delete mode 100644 examples/common_components/led_strip/include/led_strip.h delete mode 100644 examples/common_components/led_strip/interface/led_strip_interface.h delete mode 100644 examples/common_components/led_strip/src/led_strip_api.c delete mode 100644 examples/common_components/led_strip/src/led_strip_rmt_dev.c delete mode 100644 examples/common_components/led_strip/src/led_strip_rmt_encoder.c delete mode 100644 examples/common_components/led_strip/src/led_strip_rmt_encoder.h create mode 100644 examples/get-started/blink/main/idf_component.yml diff --git a/examples/common_components/led_strip/CMakeLists.txt b/examples/common_components/led_strip/CMakeLists.txt deleted file mode 100644 index bdf92d10fc..0000000000 --- a/examples/common_components/led_strip/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -set(srcs "src/led_strip_api.c") - -if(CONFIG_SOC_RMT_SUPPORTED) - list(APPEND srcs "src/led_strip_rmt_dev.c" "src/led_strip_rmt_encoder.c") -endif() - -idf_component_register(SRCS ${srcs} - INCLUDE_DIRS "include" "interface" - PRIV_REQUIRES "driver") diff --git a/examples/common_components/led_strip/README.md b/examples/common_components/led_strip/README.md deleted file mode 100644 index 8f3dae326e..0000000000 --- a/examples/common_components/led_strip/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# LED Strip Component - -This directory contains an implementation for addressable LEDs by different peripherals. Currently only RMT is supported as the led strip backend. - -It's compatible with: - -* [WS2812](http://www.world-semi.com/Certifications/WS2812B.html) -* SK68XX - -This component is used as part of the following ESP-IDF examples: -- [Blink Example](../../get-started/blink). - -To learn more about how to use this component, please check API Documentation from header file [led_strip.h](./include/led_strip.h). - -Please note that this component is not considered to be a part of ESP-IDF stable API. It may change and it may be removed in the future releases. diff --git a/examples/common_components/led_strip/include/led_strip.h b/examples/common_components/led_strip/include/led_strip.h deleted file mode 100644 index d49a530ca4..0000000000 --- a/examples/common_components/led_strip/include/led_strip.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2019-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#pragma once - -#include -#include "esp_err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @brief LED strip handle - */ -typedef struct led_strip_t *led_strip_handle_t; - -/** - * @brief Set RGB for a specific pixel - * - * @param strip: LED strip - * @param index: index of pixel to set - * @param red: red part of color - * @param green: green part of color - * @param blue: blue part of color - * - * @return - * - ESP_OK: Set RGB for a specific pixel successfully - * - ESP_ERR_INVALID_ARG: Set RGB for a specific pixel failed because of invalid parameters - * - ESP_FAIL: Set RGB for a specific pixel failed because other error occurred - */ -esp_err_t led_strip_set_pixel(led_strip_handle_t strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue); - -/** - * @brief Refresh memory colors to LEDs - * - * @param strip: LED strip - * - * @return - * - ESP_OK: Refresh successfully - * - ESP_FAIL: Refresh failed because some other error occurred - * - * @note: - * After updating the LED colors in the memory, a following invocation of this API is needed to flush colors to strip. - */ -esp_err_t led_strip_refresh(led_strip_handle_t strip); - -/** - * @brief Clear LED strip (turn off all LEDs) - * - * @param strip: LED strip - * - * @return - * - ESP_OK: Clear LEDs successfully - * - ESP_FAIL: Clear LEDs failed because some other error occurred - */ -esp_err_t led_strip_clear(led_strip_handle_t strip); - -/** - * @brief Free LED strip resources - * - * @param strip: LED strip - * - * @return - * - ESP_OK: Free resources successfully - * - ESP_FAIL: Free resources failed because error occurred - */ -esp_err_t led_strip_del(led_strip_handle_t strip); - -/** - * @brief LED Strip Configuration - */ -typedef struct { - uint32_t strip_gpio_num; /*!< GPIO number that used by LED strip */ - uint32_t max_leds; /*!< Maximum LEDs in a single strip */ -} led_strip_config_t; - -/** - * @brief Create LED strip based on RMT TX channel - * - * @param config LED strip specific configuration - * @param ret_strip Returned LED strip handle - * @return - * - ESP_OK: create LED strip handle successfully - * - ESP_ERR_INVALID_ARG: create LED strip handle failed because of invalid argument - * - ESP_ERR_NO_MEM: create LED strip handle failed because of out of memory - * - ESP_FAIL: create LED strip handle failed because some other error - */ -esp_err_t led_strip_new_rmt_device(const led_strip_config_t *config, led_strip_handle_t *ret_strip); - -#ifdef __cplusplus -} -#endif diff --git a/examples/common_components/led_strip/interface/led_strip_interface.h b/examples/common_components/led_strip/interface/led_strip_interface.h deleted file mode 100644 index 3ba15df2ba..0000000000 --- a/examples/common_components/led_strip/interface/led_strip_interface.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#pragma once - -#include -#include "esp_err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct led_strip_t led_strip_t; /*!< Type of LED strip */ - -/** - * @brief LED strip interface definition - */ -struct led_strip_t { - /** - * @brief Set RGB for a specific pixel - * - * @param strip: LED strip - * @param index: index of pixel to set - * @param red: red part of color - * @param green: green part of color - * @param blue: blue part of color - * - * @return - * - ESP_OK: Set RGB for a specific pixel successfully - * - ESP_ERR_INVALID_ARG: Set RGB for a specific pixel failed because of invalid parameters - * - ESP_FAIL: Set RGB for a specific pixel failed because other error occurred - */ - esp_err_t (*set_pixel)(led_strip_t *strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue); - - /** - * @brief Refresh memory colors to LEDs - * - * @param strip: LED strip - * @param timeout_ms: timeout value for refreshing task - * - * @return - * - ESP_OK: Refresh successfully - * - ESP_FAIL: Refresh failed because some other error occurred - * - * @note: - * After updating the LED colors in the memory, a following invocation of this API is needed to flush colors to strip. - */ - esp_err_t (*refresh)(led_strip_t *strip); - - /** - * @brief Clear LED strip (turn off all LEDs) - * - * @param strip: LED strip - * @param timeout_ms: timeout value for clearing task - * - * @return - * - ESP_OK: Clear LEDs successfully - * - ESP_FAIL: Clear LEDs failed because some other error occurred - */ - esp_err_t (*clear)(led_strip_t *strip); - - /** - * @brief Free LED strip resources - * - * @param strip: LED strip - * - * @return - * - ESP_OK: Free resources successfully - * - ESP_FAIL: Free resources failed because error occurred - */ - esp_err_t (*del)(led_strip_t *strip); -}; - -#ifdef __cplusplus -} -#endif diff --git a/examples/common_components/led_strip/src/led_strip_api.c b/examples/common_components/led_strip/src/led_strip_api.c deleted file mode 100644 index b2fbf8f175..0000000000 --- a/examples/common_components/led_strip/src/led_strip_api.c +++ /dev/null @@ -1,35 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#include "esp_log.h" -#include "esp_check.h" -#include "led_strip.h" -#include "led_strip_interface.h" - -static const char *TAG = "led_strip"; - -esp_err_t led_strip_set_pixel(led_strip_handle_t strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue) -{ - ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); - return strip->set_pixel(strip, index, red, green, blue); -} - -esp_err_t led_strip_refresh(led_strip_handle_t strip) -{ - ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); - return strip->refresh(strip); -} - -esp_err_t led_strip_clear(led_strip_handle_t strip) -{ - ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); - return strip->clear(strip); -} - -esp_err_t led_strip_del(led_strip_handle_t strip) -{ - ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); - return strip->del(strip); -} diff --git a/examples/common_components/led_strip/src/led_strip_rmt_dev.c b/examples/common_components/led_strip/src/led_strip_rmt_dev.c deleted file mode 100644 index 7658df8c93..0000000000 --- a/examples/common_components/led_strip/src/led_strip_rmt_dev.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2019-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#include -#include -#include -#include "esp_log.h" -#include "esp_check.h" -#include "driver/rmt_tx.h" -#include "led_strip.h" -#include "led_strip_interface.h" -#include "led_strip_rmt_encoder.h" - -#define LED_SRIP_RMT_RESOLUTION 10000000 // 10MHz resolution - -static const char *TAG = "led_strip_rmt"; - -typedef struct { - led_strip_t base; - rmt_channel_handle_t rmt_chan; - rmt_encoder_handle_t strip_encoder; - uint32_t strip_len; - uint8_t pixel_buf[]; -} led_strip_rmt_obj; - -static esp_err_t led_strip_rmt_set_pixel(led_strip_t *strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue) -{ - led_strip_rmt_obj *rmt_strip = __containerof(strip, led_strip_rmt_obj, base); - ESP_RETURN_ON_FALSE(index < rmt_strip->strip_len, ESP_ERR_INVALID_ARG, TAG, "index out of maximum number of LEDs"); - uint32_t start = index * 3; - // In thr order of GRB, as LED strip like WS2812 sends out pixels in this order - rmt_strip->pixel_buf[start + 0] = green & 0xFF; - rmt_strip->pixel_buf[start + 1] = red & 0xFF; - rmt_strip->pixel_buf[start + 2] = blue & 0xFF; - return ESP_OK; -} - -static esp_err_t led_strip_rmt_refresh(led_strip_t *strip) -{ - led_strip_rmt_obj *rmt_strip = __containerof(strip, led_strip_rmt_obj, base); - rmt_transmit_config_t tx_conf = { - .loop_count = 0, - }; - ESP_RETURN_ON_ERROR(rmt_transmit(rmt_strip->rmt_chan, rmt_strip->strip_encoder, rmt_strip->pixel_buf, - rmt_strip->strip_len * 3, &tx_conf), TAG, "transmit pixels by RMT failed"); - ESP_RETURN_ON_ERROR(rmt_tx_wait_all_done(rmt_strip->rmt_chan, -1), TAG, "flush RMT channel failed"); - return ESP_OK; -} - -static esp_err_t led_strip_rmt_clear(led_strip_t *strip) -{ - led_strip_rmt_obj *rmt_strip = __containerof(strip, led_strip_rmt_obj, base); - // Write zero to turn off all leds - memset(rmt_strip->pixel_buf, 0, rmt_strip->strip_len * 3); - return led_strip_rmt_refresh(strip); -} - -static esp_err_t led_strip_rmt_del(led_strip_t *strip) -{ - led_strip_rmt_obj *rmt_strip = __containerof(strip, led_strip_rmt_obj, base); - ESP_RETURN_ON_ERROR(rmt_disable(rmt_strip->rmt_chan), TAG, "disable RMT channel failed"); - ESP_RETURN_ON_ERROR(rmt_del_channel(rmt_strip->rmt_chan), TAG, "delete RMT channel failed"); - ESP_RETURN_ON_ERROR(rmt_del_encoder(rmt_strip->strip_encoder), TAG, "delete strip encoder failed"); - free(rmt_strip); - return ESP_OK; -} - -esp_err_t led_strip_new_rmt_device(const led_strip_config_t *config, led_strip_handle_t *ret_strip) -{ - led_strip_rmt_obj *rmt_strip = NULL; - esp_err_t ret = ESP_OK; - ESP_GOTO_ON_FALSE(config && ret_strip, ESP_ERR_INVALID_ARG, err, TAG, "invalid argument"); - rmt_strip = calloc(1, sizeof(led_strip_rmt_obj) + config->max_leds * 3); - ESP_GOTO_ON_FALSE(rmt_strip, ESP_ERR_NO_MEM, err, TAG, "no mem for rmt strip"); - rmt_tx_channel_config_t rmt_chan_config = { - .clk_src = RMT_CLK_SRC_DEFAULT, - .gpio_num = config->strip_gpio_num, - .mem_block_symbols = 64, - .resolution_hz = LED_SRIP_RMT_RESOLUTION, - .trans_queue_depth = 4, - }; - ESP_GOTO_ON_ERROR(rmt_new_tx_channel(&rmt_chan_config, &rmt_strip->rmt_chan), err, TAG, "create RMT TX channel failed"); - - led_strip_encoder_config_t strip_encoder_conf = { - .resolution = LED_SRIP_RMT_RESOLUTION, - }; - ESP_GOTO_ON_ERROR(rmt_new_led_strip_encoder(&strip_encoder_conf, &rmt_strip->strip_encoder), err, TAG, "create LED strip encoder failed"); - - ESP_GOTO_ON_ERROR(rmt_enable(rmt_strip->rmt_chan), err, TAG, "enable RMT channel failed"); - - rmt_strip->strip_len = config->max_leds; - rmt_strip->base.set_pixel = led_strip_rmt_set_pixel; - rmt_strip->base.refresh = led_strip_rmt_refresh; - rmt_strip->base.clear = led_strip_rmt_clear; - rmt_strip->base.del = led_strip_rmt_del; - - *ret_strip = &rmt_strip->base; - return ESP_OK; -err: - if (rmt_strip) { - if (rmt_strip->rmt_chan) { - rmt_del_channel(rmt_strip->rmt_chan); - } - if (rmt_strip->strip_encoder) { - rmt_del_encoder(rmt_strip->strip_encoder); - } - free(rmt_strip); - } - return ret; -} diff --git a/examples/common_components/led_strip/src/led_strip_rmt_encoder.c b/examples/common_components/led_strip/src/led_strip_rmt_encoder.c deleted file mode 100644 index aa05fd3daf..0000000000 --- a/examples/common_components/led_strip/src/led_strip_rmt_encoder.c +++ /dev/null @@ -1,124 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include "esp_check.h" -#include "led_strip_rmt_encoder.h" - -static const char *TAG = "led_encoder"; - -typedef struct { - rmt_encoder_t base; - rmt_encoder_t *bytes_encoder; - rmt_encoder_t *copy_encoder; - int state; - rmt_symbol_word_t reset_code; -} rmt_led_strip_encoder_t; - -static size_t rmt_encode_led_strip(rmt_encoder_t *encoder, rmt_channel_handle_t channel, const void *primary_data, size_t data_size, rmt_encode_state_t *ret_state) -{ - rmt_led_strip_encoder_t *led_encoder = __containerof(encoder, rmt_led_strip_encoder_t, base); - rmt_encoder_handle_t bytes_encoder = led_encoder->bytes_encoder; - rmt_encoder_handle_t copy_encoder = led_encoder->copy_encoder; - rmt_encode_state_t session_state = 0; - rmt_encode_state_t state = 0; - size_t encoded_symbols = 0; - switch (led_encoder->state) { - case 0: // send RGB data - encoded_symbols += bytes_encoder->encode(bytes_encoder, channel, primary_data, data_size, &session_state); - if (session_state & RMT_ENCODING_COMPLETE) { - led_encoder->state = 1; // switch to next state when current encoding session finished - } - if (session_state & RMT_ENCODING_MEM_FULL) { - state |= RMT_ENCODING_MEM_FULL; - goto out; // yield if there's no free space for encoding artifacts - } - // fall-through - case 1: // send reset code - encoded_symbols += copy_encoder->encode(copy_encoder, channel, &led_encoder->reset_code, - sizeof(led_encoder->reset_code), &session_state); - if (session_state & RMT_ENCODING_COMPLETE) { - led_encoder->state = 0; // back to the initial encoding session - state |= RMT_ENCODING_COMPLETE; - } - if (session_state & RMT_ENCODING_MEM_FULL) { - state |= RMT_ENCODING_MEM_FULL; - goto out; // yield if there's no free space for encoding artifacts - } - } -out: - *ret_state = state; - return encoded_symbols; -} - -static esp_err_t rmt_del_led_strip_encoder(rmt_encoder_t *encoder) -{ - rmt_led_strip_encoder_t *led_encoder = __containerof(encoder, rmt_led_strip_encoder_t, base); - rmt_del_encoder(led_encoder->bytes_encoder); - rmt_del_encoder(led_encoder->copy_encoder); - free(led_encoder); - return ESP_OK; -} - -static esp_err_t rmt_led_strip_encoder_reset(rmt_encoder_t *encoder) -{ - rmt_led_strip_encoder_t *led_encoder = __containerof(encoder, rmt_led_strip_encoder_t, base); - rmt_encoder_reset(led_encoder->bytes_encoder); - rmt_encoder_reset(led_encoder->copy_encoder); - led_encoder->state = 0; - return ESP_OK; -} - -esp_err_t rmt_new_led_strip_encoder(const led_strip_encoder_config_t *config, rmt_encoder_handle_t *ret_encoder) -{ - esp_err_t ret = ESP_OK; - rmt_led_strip_encoder_t *led_encoder = NULL; - ESP_GOTO_ON_FALSE(config && ret_encoder, ESP_ERR_INVALID_ARG, err, TAG, "invalid argument"); - led_encoder = calloc(1, sizeof(rmt_led_strip_encoder_t)); - ESP_GOTO_ON_FALSE(led_encoder, ESP_ERR_NO_MEM, err, TAG, "no mem for led strip encoder"); - led_encoder->base.encode = rmt_encode_led_strip; - led_encoder->base.del = rmt_del_led_strip_encoder; - led_encoder->base.reset = rmt_led_strip_encoder_reset; - // different led strip might have its own timing requirements, following parameter is for WS2812 - rmt_bytes_encoder_config_t bytes_encoder_config = { - .bit0 = { - .level0 = 1, - .duration0 = 0.3 * config->resolution / 1000000, // T0H=0.3us - .level1 = 0, - .duration1 = 0.9 * config->resolution / 1000000, // T0L=0.9us - }, - .bit1 = { - .level0 = 1, - .duration0 = 0.9 * config->resolution / 1000000, // T1H=0.9us - .level1 = 0, - .duration1 = 0.3 * config->resolution / 1000000, // T1L=0.3us - }, - .flags.msb_first = 1 // WS2812 transfer bit order: G7...G0R7...R0B7...B0 - }; - ESP_GOTO_ON_ERROR(rmt_new_bytes_encoder(&bytes_encoder_config, &led_encoder->bytes_encoder), err, TAG, "create bytes encoder failed"); - rmt_copy_encoder_config_t copy_encoder_config = {}; - ESP_GOTO_ON_ERROR(rmt_new_copy_encoder(©_encoder_config, &led_encoder->copy_encoder), err, TAG, "create copy encoder failed"); - - uint32_t reset_ticks = config->resolution / 1000000 * 50 / 2; // reset code duration defaults to 50us - led_encoder->reset_code = (rmt_symbol_word_t) { - .level0 = 0, - .duration0 = reset_ticks, - .level1 = 0, - .duration1 = reset_ticks, - }; - *ret_encoder = &led_encoder->base; - return ESP_OK; -err: - if (led_encoder) { - if (led_encoder->bytes_encoder) { - rmt_del_encoder(led_encoder->bytes_encoder); - } - if (led_encoder->copy_encoder) { - rmt_del_encoder(led_encoder->copy_encoder); - } - free(led_encoder); - } - return ret; -} diff --git a/examples/common_components/led_strip/src/led_strip_rmt_encoder.h b/examples/common_components/led_strip/src/led_strip_rmt_encoder.h deleted file mode 100644 index db5ef076b3..0000000000 --- a/examples/common_components/led_strip/src/led_strip_rmt_encoder.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#pragma once - -#include -#include "driver/rmt_encoder.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @brief Type of led strip encoder configuration - */ -typedef struct { - uint32_t resolution; /*!< Encoder resolution, in Hz */ -} led_strip_encoder_config_t; - -/** - * @brief Create RMT encoder for encoding LED strip pixels into RMT symbols - * - * @param[in] config Encoder configuration - * @param[out] ret_encoder Returned encoder handle - * @return - * - ESP_ERR_INVALID_ARG for any invalid arguments - * - ESP_ERR_NO_MEM out of memory when creating led strip encoder - * - ESP_OK if creating encoder successfully - */ -esp_err_t rmt_new_led_strip_encoder(const led_strip_encoder_config_t *config, rmt_encoder_handle_t *ret_encoder); - -#ifdef __cplusplus -} -#endif diff --git a/examples/get-started/blink/CMakeLists.txt b/examples/get-started/blink/CMakeLists.txt index c7b0832ffc..489742ae56 100644 --- a/examples/get-started/blink/CMakeLists.txt +++ b/examples/get-started/blink/CMakeLists.txt @@ -2,7 +2,5 @@ # CMakeLists in this exact order for cmake to work correctly cmake_minimum_required(VERSION 3.16) -set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/led_strip) - include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(blink) diff --git a/examples/get-started/blink/README.md b/examples/get-started/blink/README.md index 3c9864fc27..b44a692fcc 100644 --- a/examples/get-started/blink/README.md +++ b/examples/get-started/blink/README.md @@ -5,9 +5,9 @@ (See the README.md file in the upper level 'examples' directory for more information about examples.) -This example demonstrates how to blink a LED using GPIO or RMT for the addressable LED, i.e. [WS2812](http://www.world-semi.com/Certifications/WS2812B.html). +This example demonstrates how to blink a LED using GPIO or using the [led_strip](https://components.espressif.com/component/espressif/led_strip) component for the addressable LED, i.e. [WS2812](http://www.world-semi.com/Certifications/WS2812B.html). -See the RMT examples in the [RMT Peripheral](../../peripherals/rmt) for more information about how to use it. +The `led_strip` is installed via [component manager](main/idf_component.yml). ## How to Use Example @@ -37,7 +37,7 @@ Open the project configuration menu (`idf.py menuconfig`). In the `Example Configuration` menu: * Select the LED type in the `Blink LED type` option. - * Use `GPIO` for regular LED blink. + * Use `GPIO` for regular LED blink. * Set the GPIO number used for the signal in the `Blink GPIO number` option. * Set the blinking period in the `Blink period in ms` option. @@ -53,7 +53,7 @@ See the [Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/l As you run the example, you will see the LED blinking, according to the previously defined period. For the addressable LED, you can also change the LED color by setting the `led_strip_set_pixel(led_strip, 0, 16, 16, 16);` (LED Strip, Pixel Number, Red, Green, Blue) with values from 0 to 255 in the [source file](main/blink_example_main.c). -``` +```text I (315) example: Example configured to blink addressable LED! I (325) example: Turning the LED OFF! I (1325) example: Turning the LED ON! diff --git a/examples/get-started/blink/main/blink_example_main.c b/examples/get-started/blink/main/blink_example_main.c index 3320ead77a..8a7c4ed50b 100644 --- a/examples/get-started/blink/main/blink_example_main.c +++ b/examples/get-started/blink/main/blink_example_main.c @@ -49,7 +49,10 @@ static void configure_led(void) .strip_gpio_num = BLINK_GPIO, .max_leds = 1, // at least one LED on board }; - ESP_ERROR_CHECK(led_strip_new_rmt_device(&strip_config, &led_strip)); + led_strip_rmt_config_t rmt_config = { + .resolution_hz = 10 * 1000 * 1000, // 10MHz + }; + ESP_ERROR_CHECK(led_strip_new_rmt_device(&strip_config, &rmt_config, &led_strip)); /* Set all LED off to clear all pixels */ led_strip_clear(led_strip); } diff --git a/examples/get-started/blink/main/idf_component.yml b/examples/get-started/blink/main/idf_component.yml new file mode 100644 index 0000000000..234f9781ac --- /dev/null +++ b/examples/get-started/blink/main/idf_component.yml @@ -0,0 +1,2 @@ +dependencies: + espressif/led_strip: "^2.0.0" diff --git a/examples/zigbee/light_sample/light_bulb/CMakeLists.txt b/examples/zigbee/light_sample/light_bulb/CMakeLists.txt index 1302519c20..3c60c93069 100644 --- a/examples/zigbee/light_sample/light_bulb/CMakeLists.txt +++ b/examples/zigbee/light_sample/light_bulb/CMakeLists.txt @@ -1,8 +1,6 @@ # The following lines of boilerplate have to be in your project's CMakeLists # in this exact order for cmake to work correctly cmake_minimum_required(VERSION 3.16) -set(EXTRA_COMPONENT_DIRS - $ENV{IDF_PATH}/examples/common_components/led_strip - ) + include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(light_bulb) diff --git a/examples/zigbee/light_sample/light_bulb/main/idf_component.yml b/examples/zigbee/light_sample/light_bulb/main/idf_component.yml index b13132f298..92103ca698 100644 --- a/examples/zigbee/light_sample/light_bulb/main/idf_component.yml +++ b/examples/zigbee/light_sample/light_bulb/main/idf_component.yml @@ -1,6 +1,7 @@ ## IDF Component Manager Manifest File dependencies: espressif/esp-zboss-lib: "~0.0.4" + espressif/led_strip: "~2.0.0" ## Required IDF version idf: version: ">=5.0.0" diff --git a/examples/zigbee/light_sample/light_bulb/main/light_driver.c b/examples/zigbee/light_sample/light_bulb/main/light_driver.c index 9d6413eaea..aea5651c61 100644 --- a/examples/zigbee/light_sample/light_bulb/main/light_driver.c +++ b/examples/zigbee/light_sample/light_bulb/main/light_driver.c @@ -53,6 +53,9 @@ void light_driver_init(bool power) .max_leds = CONFIG_EXAMPLE_STRIP_LED_NUMBER, .strip_gpio_num = CONFIG_EXAMPLE_STRIP_LED_GPIO, }; - ESP_ERROR_CHECK(led_strip_new_rmt_device(&led_strip_conf, &s_led_strip)); + led_strip_rmt_config_t rmt_conf = { + .resolution_hz = 10 * 1000 * 1000, // 10MHz + }; + ESP_ERROR_CHECK(led_strip_new_rmt_device(&led_strip_conf, &rmt_conf, &s_led_strip)); light_driver_set_power(power); }