ESP32-S3 控制 RGB彩灯
ESP32-S3 实验:RGB 彩灯控制(WS2812)
本实验使用 ESP32-S3 控制 WS2812 RGB 灯珠(也称 NeoPixel),通过程序实现 彩灯颜色的循环变化。
一、实验目的
- 学习 ESP32-S3 控制 WS2812 RGB 彩灯 的方法
- 熟悉 Adafruit_NeoPixel 库 的使用
- 掌握 RGB 三基色混合 实现彩色变化的原理
二、实验器材
- ESP32-S3 开发板
- WS2812 RGB 彩灯模块
- 杜邦线
三、接线说明
| RGB 彩灯模块 | ESP32-S3 IO |
|---|---|
| WS 数据线 | IO16 |
| VCC | 3.3V |
| GND | GND |
四、实验现象
程序下载成功后,RGB 彩灯模块会 循环变化颜色,从红色渐变到绿色,再到蓝色,最后回到红色,形成一个循环。
五、注意事项
-
需要先在 Arduino IDE 中安装 Adafruit_NeoPixel 库
- 打开菜单 “项目” → “导入库” → “添加 .ZIP 库...”
- 选择工程路径下的
Adafruit_NeoPixel-1.11.0.zip文件进行安装
六、完整源代码
/*
* 实验名称:RGB彩灯实验
*
* 接线说明:RGB彩灯模块-->ESP32 IO
* WS-->(16)
*
* 实验现象:程序下载成功后,RGB彩灯循环变化颜色
*
* 注意事项:需要在软件中选择"项目"-->"导入库"-->"添加.ZIP库...",将工程路径下"Adafruit_NeoPixel-1.11.0.zip"安装即可。
*
*/
#include "public.h"
#include <Adafruit_NeoPixel.h>
// 设置灯珠数量
#define NUMPIXELS 1
// 设置输出数据引脚
#define PIN_NEOPIXEL 16
// 初始化灯珠控制实例
Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);
// 启动设置
void setup() {
// 调试串口速率设置
Serial.begin(115200);
// 灯珠控制开始
pixels.begin();
// 设置亮度为255
pixels.setBrightness(255);
// 将RGB设置为0(熄灭)
pixels.clear();
}
u8 r_value=0;
u8 g_value=0;
u8 b_value=0;
u8 dir=0;
// 循环主体程序
void loop() {
if(dir==0) // 红色通道变化
{
r_value++;
if(r_value>=255)
{
r_value=0;
dir=1;
}
}
else if(dir==1) // 绿色通道变化
{
g_value++;
if(g_value>=255)
{
g_value=0;
dir=2;
}
}
else if(dir==2) // 蓝色通道变化
{
b_value++;
if(b_value>=255)
{
b_value=0;
dir=0;
}
}
// 设置颜色(RGB 混合)
pixels.setPixelColor(0, pixels.Color(r_value,g_value,b_value));
/*=======================================
如果要让所有灯珠同时点亮:
pixels.fill(pixels.Color(c1,c2,c3));
=======================================*/
delay(10); // 延时,控制颜色变化速度
// 显示
pixels.show();
}
七、代码解析
-
灯珠初始化
Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);NUMPIXELS:灯珠数量(本实验为 1 个)PIN_NEOPIXEL:ESP32-S3 输出数据的 GPIONEO_GRB + NEO_KHZ800:RGB 排列方式与通信频率
-
设置颜色
pixels.setPixelColor(0, pixels.Color(r_value,g_value,b_value));通过调整 R/G/B 三个通道的数值(0~255),实现不同的颜色。
-
显示更新
pixels.show();修改颜色后,必须调用
show(),灯珠才会生效。 -
循环变色
程序通过一个状态机dir,依次递增 R/G/B 三个通道的值,实现循环渐变。
八、实验总结
通过本实验,我们掌握了 ESP32-S3 控制 WS2812 RGB 彩灯 的方法,
学习了 Adafruit_NeoPixel 库的使用,并实现了 RGB 渐变效果。
在实际应用中,可以扩展到:
- 多灯珠控制(LED 灯带)
- 音乐律动彩灯
- 物联网智能灯光系统

浙公网安备 33010602011771号