ESP32-S3 控制 WS2812 RGB 彩灯
ESP32-S3 WS2812 RGB 彩灯进阶实验合集
在很多 ESP32 项目中,RGB 彩灯(如 WS2812)常用于氛围灯、状态指示灯、DIY 灯带等场景。
本文整理了一套从入门到进阶的实验合集,涵盖了单颗渐变、跑马灯、彩虹流水、呼吸灯以及声音律动灯的效果。
一、实验准备
-
开发板:ESP32-S3
-
RGB 灯珠:WS2812 / WS2812B(单颗或灯带均可)
-
软件环境:Arduino IDE
-
库依赖:Adafruit_NeoPixel(在 Arduino IDE 中通过“项目 → 导入库 → 添加.ZIP库”安装)
-
接线说明:
- WS → IO16
- VCC → 3.3V
- GND → GND
代码中统一使用以下定义(如实际接线不同,请修改):
#define PIN_NEOPIXEL 16 // 数据引脚
#define NUMPIXELS 8 // 灯珠数量
二、实验一:单颗 RGB 渐变灯
实验现象
单颗 RGB 灯珠在红-蓝之间渐变,类似氛围灯。
核心代码
#include <Adafruit_NeoPixel.h>
#define PIN_NEOPIXEL 16
#define NUMPIXELS 1
Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);
void setup() {
pixels.begin();
pixels.setBrightness(100);
pixels.clear();
}
void loop() {
for(int r=0; r<256; r+=5) {
pixels.setPixelColor(0, pixels.Color(r, 0, 255-r));
pixels.show();
delay(30);
}
}
三、实验二:多颗灯珠跑马灯
实验现象
多颗灯珠依次点亮,形成“跑马灯”效果。
核心代码
#include <Adafruit_NeoPixel.h>
#define PIN_NEOPIXEL 16
#define NUMPIXELS 8
Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);
void setup() {
pixels.begin();
pixels.setBrightness(100);
pixels.clear();
}
void loop() {
for(int i=0; i<NUMPIXELS; i++) {
pixels.clear();
pixels.setPixelColor(i, pixels.Color(255,0,0)); // 红色跑马
pixels.show();
delay(200);
}
}
四、实验三:彩虹流水灯 🌈
实验现象
灯珠颜色不断变化,形成彩虹流水的流动效果。
核心代码
#include <Adafruit_NeoPixel.h>
#define PIN_NEOPIXEL 16
#define NUMPIXELS 8
Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);
uint16_t j = 0;
void setup() {
pixels.begin();
pixels.setBrightness(120);
}
void loop() {
for(int i=0; i<NUMPIXELS; i++) {
int pixelHue = (i * 65536L / NUMPIXELS + j) & 65535;
pixels.setPixelColor(i, pixels.gamma32(pixels.ColorHSV(pixelHue)));
}
pixels.show();
j += 256; // 控制流速
delay(30);
}
五、实验四:呼吸灯效果
实验现象
灯珠亮度由暗变亮,再由亮变暗,循环往复,类似“呼吸灯”。
核心代码
#include <Adafruit_NeoPixel.h>
#define PIN_NEOPIXEL 16
#define NUMPIXELS 8
Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);
void setup() {
pixels.begin();
pixels.setBrightness(255);
}
void loop() {
for(int b=0; b<=255; b+=5) {
pixels.fill(pixels.Color(0,0,b)); // 蓝色呼吸灯
pixels.show();
delay(20);
}
for(int b=255; b>=0; b-=5) {
pixels.fill(pixels.Color(0,0,b));
pixels.show();
delay(20);
}
}
六、实验五:音乐律动灯(进阶🔥)
实验现象
接入麦克风声音传感器后,RGB 灯珠会根据音量高低进行动态变化。
接线说明
- 麦克风传感器 AO → ESP32 IO34 (ADC)
核心代码
#include <Adafruit_NeoPixel.h>
#define PIN_NEOPIXEL 16
#define NUMPIXELS 8
#define MIC_PIN 34 // 麦克风模拟输入
Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);
void setup() {
pixels.begin();
pixels.setBrightness(255);
analogReadResolution(12);
}
void loop() {
int micValue = analogRead(MIC_PIN); // 读取音量
int level = map(micValue, 0, 4095, 0, NUMPIXELS);
pixels.clear();
for(int i=0; i<level; i++) {
pixels.setPixelColor(i, pixels.Color(0, 255, 0)); // 音量条绿色
}
pixels.show();
delay(20);
}
七、总结
本文整理了 五个进阶实验,涵盖了从入门到高级的 RGB 彩灯玩法:
- 基础实验:渐变、跑马、呼吸灯
- 进阶实验:彩虹流水、音乐律动
通过这些实验,读者可以快速掌握 ESP32-S3 控制 WS2812 RGB 灯珠 的方法,并进一步扩展到 WiFi 远程控制、MQTT 智能灯带、音乐可视化 等更有趣的应用。

浙公网安备 33010602011771号