|
|
@@ -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)
|
|
|
+{
|
|
|
+ /* 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)
|
|
|
{
|
|
|
- /* 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.)
|
|
|
- */
|
|
|
+ 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);
|
|
|
}
|
|
|
}
|