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();
}

七、代码解析

  1. 灯珠初始化

    Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);
    
    • NUMPIXELS:灯珠数量(本实验为 1 个)
    • PIN_NEOPIXEL:ESP32-S3 输出数据的 GPIO
    • NEO_GRB + NEO_KHZ800:RGB 排列方式与通信频率
  2. 设置颜色

    pixels.setPixelColor(0, pixels.Color(r_value,g_value,b_value));
    

    通过调整 R/G/B 三个通道的数值(0~255),实现不同的颜色。

  3. 显示更新

    pixels.show();
    

    修改颜色后,必须调用 show(),灯珠才会生效。

  4. 循环变色
    程序通过一个状态机 dir,依次递增 R/G/B 三个通道的值,实现循环渐变。


八、实验总结

通过本实验,我们掌握了 ESP32-S3 控制 WS2812 RGB 彩灯 的方法,
学习了 Adafruit_NeoPixel 库的使用,并实现了 RGB 渐变效果

在实际应用中,可以扩展到:

  • 多灯珠控制(LED 灯带)
  • 音乐律动彩灯
  • 物联网智能灯光系统
posted @ 2025-08-16 14:21  jeikerxiao  阅读(203)  评论(0)    收藏  举报