ESP32-S3 IDF框架 WS2812 灯条控制组件:实现多种灯效

ESP32-S3 IDF框架 控制 WS2812 灯条:实现多种灯效

概述

本组件名叫ws2812_control,依赖乐鑫led_strip 驱动实现了一个用于控制 WS2812 LED 灯条各种灯效的库,适用于 ESP32系列微控制器IDF框架,IDF版本>=4.4.7。该库包含了多种效果,如呼吸、渐变、闪烁和彩虹效果,以及基本的开关功能。设计时考虑了模块化和易集成性,方便在其他项目中使用。

使用下面命令将组件添加到你的项目

idf.py add-dependency "1589326497/ws2812_control^1.1.0"

功能特性

  • HSV 到 RGB 转换:提供了一个辅助函数,用于将 HSV 颜色空间转换为 RGB 颜色空间。
  • 多种 LED 效果:支持常亮、关闭、呼吸、渐入、慢闪、快闪和彩虹效果。
  • 单个 LED 控制:可以单独设置某个 LED 的颜色。
  • 颜色宏定义:预定义了多种常用颜色,如白色、绿色、红色、蓝色等。
  • 模块化设计:代码结构清晰,易于扩展和维护。

使用方法

1. 创建 WS2812 控制句柄

首先,需要创建一个 WS2812 控制句柄,用于后续的 LED 控制操作。

led_strip_t* strip = ws2812_create();

2. 设置 LED 效果

可以通过调用 ws2812_set 函数来设置 LED 的效果。例如,设置所有 LED 为常亮状态,颜色为红色:

led_color_t color = COLOR_RED;
led_effect_t effect = LED_EFFECT_ON;
ws2812_set(strip, color, effect);

3. 其他功能

  • 设置单个 LED 颜色

    set_led_color(strip, 0, COLOR_GREEN); // 设置第0个LED为绿色
    
  • 关闭所有 LED

    led_set_off(strip);
    
  • 呼吸效果

    led_set_breath(strip, COLOR_BLUE);
    
  • 彩虹效果

    led_set_rainbow(strip);
    

示例代码

以下是一个简单的示例代码,展示了如何使用该库控制 WS2812 LED 灯条:

#include "ws2812_control.h"

void app_main() {
    led_strip_t* strip = ws2812_create();

    // 设置所有 LED 为常亮状态,颜色为红色
    led_color_t color = COLOR_RED;
    led_effect_t effect = LED_EFFECT_ON;
    ws2812_set(strip, color, effect);

    // 等待一段时间
    vTaskDelay(pdMS_TO_TICKS(2000));

    // 设置呼吸效果
    effect = LED_EFFECT_BREATH;
    ws2812_set(strip, color, effect);

    // 等待一段时间
    vTaskDelay(pdMS_TO_TICKS(5000));

    // 关闭所有 LED
    effect = LED_EFFECT_OFF;
    ws2812_set(strip, color, effect);
}

仓库地址

https://github.com/NingZiXi/ws2812_control.git

ESP32-S3是一款由Espressif Systems公司生产的基于RISC-V架构的低功耗微控制器,而WS2812是一种串行LED灯条控制芯片,常用于RGB LED灯带。要在ESP32 S3上驱动WS2812灯条,你需要做以下步骤: 1. **库支持**:首先,确保安装了适用于ESP32-S3WS2812驱动库,例如Espressif官方的esp-idf框架内建的`driver_ws281x`库。 2. **硬件连接**:将WS2812灯条连接到ESP32-S3的GPIO引脚,通常数据线(DIN)接到数字输入输出口,时钟线(CLK)连接到高速脉冲信号,以及电源线连接到相应的电源电压。 3. **初始化配置**:在你的应用程序中,通过`ESP32_Series::ledc_set_freq()`设置LED灯频率,并使用`ledc_write_reg()`函数配置灯条的通道、亮度等。 4. **发送颜色数据**:使用`ledc_send_data()`函数,根据需要发送RGB值到WS2812的寄存器,控制每个像素的颜色。 5. **主循环更新**:在你的主循环里,定期调用上述函数刷新LED灯的状态。 ```cpp #include "driver_ws2812.h" // ...其他代码... ledc_channel_config_t ledcfg = { .speed_mode = LEDC_HIGH_SPEED_MODE, .duty_num = 0, // 设置初始亮度 .timer_num = 0, // 使用第0个定时器 .gpio_num = WS2812_DATA_PIN // GPIO引脚对应WS2812的数据线 }; ledc_timer_config_t tmrconfig = { .clk_src = LEDC_APB, // LEDC使用APB时钟源 .freq_hz = WS2812_FREQ_HZ, // 灯频率 .timer_num = 0 // 使用第0个定时器 }; // 初始化LEDC模块和LED灯条 ledc_init(); ledc_timer_config(&tmrconfig); ledc_channel_config(&ledcfg); while (true) { // 更新LED颜色 for (int i = 0; i < WS2812_NUM_PIXELS; i++) { uint32_t color = get_pixel_color(i); // 获取当前像素颜色 ledc_write_reg(ledcfg.channel, i * WS2812_PIXES_PER_BYTE, color); } ledc_sync(); // 发送数据并同步 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁子希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值