Get started example update for addressable LED compatibility.
Added the RMT/addr LED blink to the example and more detailed README.md Moved component/led_strip to common_components Added missing README file to common_components/led_strip README file update Makefile and Kconfig fixed for led_strip component Fixing end-of-line on main/blink.c Component updated to handle multiple instances Added note on the RMT channel number (ESP32 and ESP32-S2) Removed components folder from rmt/led_strip example and README updated Changed the led_strip_denit function and added ESP32-C3 RMT info on channel configuration Updates on README, Kconfig default settings and configure_led() function added
This commit is contained in:
@@ -1,14 +1,46 @@
|
||||
menu "Example Configuration"
|
||||
|
||||
choice BLINK_LED
|
||||
prompt "Blink LED type"
|
||||
default BLINK_LED_RMT if IDF_TARGET_ESP32C3
|
||||
default BLINK_LED_RMT if IDF_TARGET_ESP32S2
|
||||
default BLINK_LED_GPIO
|
||||
help
|
||||
Defines the default peripheral for blink example
|
||||
|
||||
config BLINK_LED_GPIO
|
||||
bool "GPIO"
|
||||
config BLINK_LED_RMT
|
||||
bool "RMT - Addressable LED"
|
||||
endchoice
|
||||
|
||||
config BLINK_LED_RMT_CHANNEL
|
||||
depends on BLINK_LED_RMT
|
||||
int "RMT Channel"
|
||||
range 0 7
|
||||
default 0
|
||||
help
|
||||
Set the RMT peripheral channel.
|
||||
ESP32 RMT channel from 0 to 7
|
||||
ESP32-S2 RMT channel from 0 to 3
|
||||
ESP32-C3 RMT channel from 0 to 1
|
||||
|
||||
config BLINK_GPIO
|
||||
int "Blink GPIO number"
|
||||
range 0 34
|
||||
default 8 if IDF_TARGET_ESP32C3
|
||||
default 18 if IDF_TARGET_ESP32S2
|
||||
default 5
|
||||
help
|
||||
GPIO number (IOxx) to blink on and off.
|
||||
|
||||
GPIO number (IOxx) to blink on and off or the RMT signal for the addressable LED.
|
||||
Some GPIOs are used for other purposes (flash connections, etc.) and cannot be used to blink.
|
||||
|
||||
GPIOs 35-39 are input-only so cannot be used as outputs.
|
||||
|
||||
config BLINK_PERIOD
|
||||
int "Blink period in ms"
|
||||
range 10 3600000
|
||||
default 1000
|
||||
help
|
||||
Define the blinking period in milliseconds.
|
||||
|
||||
endmenu
|
||||
|
||||
@@ -10,32 +10,74 @@
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "driver/gpio.h"
|
||||
#include "esp_log.h"
|
||||
#include "led_strip.h"
|
||||
#include "sdkconfig.h"
|
||||
|
||||
/* Can use project configuration menu (idf.py menuconfig) to choose the GPIO to blink,
|
||||
static const char *TAG = "example";
|
||||
|
||||
/* 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.
|
||||
*/
|
||||
#define BLINK_GPIO CONFIG_BLINK_GPIO
|
||||
|
||||
void app_main(void)
|
||||
static uint8_t s_led_state = 0;
|
||||
|
||||
#ifdef CONFIG_BLINK_LED_RMT
|
||||
static led_strip_t *pStrip_a;
|
||||
|
||||
static void blink_led(void)
|
||||
{
|
||||
/* Configure the IOMUX register for pad BLINK_GPIO (some pads are
|
||||
muxed to GPIO on reset already, but some default to other
|
||||
functions and need to be switched to GPIO. Consult the
|
||||
Technical Reference for a list of pads and their default
|
||||
functions.)
|
||||
*/
|
||||
/* 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 */
|
||||
pStrip_a->set_pixel(pStrip_a, 0, 16, 16, 16);
|
||||
/* Refresh the strip to send data */
|
||||
pStrip_a->refresh(pStrip_a, 100);
|
||||
} else {
|
||||
/* Set all LED off to clear all pixels */
|
||||
pStrip_a->clear(pStrip_a, 50);
|
||||
}
|
||||
}
|
||||
|
||||
static void configure_led(void)
|
||||
{
|
||||
ESP_LOGI(TAG, "Example configured to blink addressable LED!");
|
||||
/* LED strip initialization with the GPIO and pixels number*/
|
||||
pStrip_a = led_strip_init(CONFIG_BLINK_LED_RMT_CHANNEL, BLINK_GPIO, 1);
|
||||
/* Set all LED off to clear all pixels */
|
||||
pStrip_a->clear(pStrip_a, 50);
|
||||
}
|
||||
|
||||
#elif CONFIG_BLINK_LED_GPIO
|
||||
|
||||
static void blink_led(void)
|
||||
{
|
||||
/* Set the GPIO level according to the state (LOW or HIGH)*/
|
||||
gpio_set_level(BLINK_GPIO, s_led_state);
|
||||
}
|
||||
|
||||
static void configure_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);
|
||||
while(1) {
|
||||
/* Blink off (output low) */
|
||||
printf("Turning off the LED\n");
|
||||
gpio_set_level(BLINK_GPIO, 0);
|
||||
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
||||
/* Blink on (output high) */
|
||||
printf("Turning on the LED\n");
|
||||
gpio_set_level(BLINK_GPIO, 1);
|
||||
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void app_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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user