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

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

概述

本项目提供了一个用于控制 WS2812 LED 灯条的组件,名叫ws2812_control 适用于 ESP32系列微控制器。该库包含了多种效果,如呼吸、渐变、闪烁和彩虹效果,以及LED 矩阵屏幕的支持。设计时考虑了模块化和易集成性,方便在其他项目中使用。

ws2812_control 依赖于乐鑫的 led_strip 灯条驱动库,其设计初衷是通过更简洁的接口实现一些常用的灯光效果,从而简化开发流程。

功能特性

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

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

idf.py add-dependency "ningzixi/ws2812_control^1.2.0"

配置WS2812参数

在menuconfig中配置WS2812参数,进入menuconfig找到ws2812 config菜单,此配置菜单用于设置 WS2812 LED 的信号引脚和工作模式,工作模式包括条形模式(Strip mode)和矩阵模式(Matrix mode)。根据所选的模式,您还可以配置相关参数,在条形模式(Strip mode)下只需要配置 LED 的数量即可,而在矩阵模式(Matrix mode)下,您还需要配置以下参数:

  1. 矩阵宽高:设置矩阵中每行每列的 LED 数量。
  2. 矩阵布局类型:指定矩阵的布局类型和方向,以便灵活支持不同的安装方式。

配置完成后,保存并退出 menuconfig,即可按照设定的模式和参数控制 WS2812 LED,下面先以条形模式举例介绍的使用方法。

条形模式(Strip mode)使用方法

1. 创建 WS2812 控制句柄

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

ws2812_strip_t* WS2812=ws2812_create();

2. 设置 LED 效果

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

//方式1
ws2812_set(WS2812, COLOR_RED, LED_EFFECT_ON);
//方式2
led_set_on(WS2812,COLOR_RED);
//也可使用COLOR_RGB(255,0,0)来设置红色或自定义颜色
led_set_on(WS2812,COLOR_RGB(255,0,0));

3. 常用功能

  • 设置单个 LED 颜色

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

    led_set_off(WS2812);
    
  • 呼吸效果

    //方式1
    ws2812_set(WS2812, COLOR_BLUE, LED_EFFECT_BREATH);
    //方式2
    led_set_breath(WS2812, COLOR_BLUE);
    
  • 彩虹效果

    //方式1
    ws2812_set(WS2812, COLOR_BLUE, LED_EFFECT_RAINBOW);
    //方式2
    led_set_rainbow(WS2812);
    
ws2812_set()第三个参数 模式可设置以下效果
LED_EFFECT_ON             // 使LED灯常亮效果
LED_EFFECT_BREATH,        // 使LED灯呼吸效果
LED_EFFECT_FADE_IN,       // 使LED灯淡入效果
LED_EFFECT_BLINK_SLOW,    // 使LED灯慢闪烁效果
LED_EFFECT_BLINK_FAST,    // 使LED灯快闪烁效果
LED_EFFECT_RAINBOW        // 使LED灯彩虹效果

需注意ws2812_set()的配置应用于所有灯珠

更多API请参考 ws2812_control.h 文件

示例代码

以下是此库的示例代码,

#include <stdio.h>
#include <ws2812_control.h>

void app_main(void){

    // 创建一个WS2812灯带
    ws2812_strip_t* WS2812=ws2812_create();
    
    //点亮灯带 颜色(255,0,0)
    led_set_on(WS2812,COLOR_RGB(255,0,0));
}

矩阵模式(Matrix mode)使用方法

矩阵模式(Matrix mode)的使用方法与条形模式(Strip mode)类似

//创建ws2812矩阵控制句柄
ws2812_matrix_t* WS2812 = ws2812_matrix_create();

//设置第2行第2列的LED为红色
led_matrix_set_pixel(WS2812,2,2,COLOR_RGB(255,0,0));

//更新矩阵显示
led_matrix_show(WS2812);

示例代码

#include <stdio.h>
#include <ws2812_control.h>

void app_main(void){

    //创建ws2812矩阵控制句柄
    ws2812_matrix_t* WS2812 = ws2812_matrix_create();

    //设置LED为红色
    led_matrix_set_pixel(WS2812,0,0,COLOR_RGB(255,0,0));
    led_matrix_set_pixel(WS2812,1,1,COLOR_RGB(255,0,0));
    led_matrix_set_pixel(WS2812,2,2,COLOR_RGB(255,0,0));
    led_matrix_set_pixel(WS2812,3,3,COLOR_RGB(255,0,0));

    //更新矩阵显示
    led_matrix_show(WS2812);
}

在这里插入图片描述

仓库地址

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

宁子希

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

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

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

打赏作者

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

抵扣说明:

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

余额充值