这是一个基于 ESP32 的高性能音频律动 LED 控制器项目。通过 I2S 数字麦克风实时采集音频,利用 FFT(快速傅里叶变换)对音频进行离散频率分析,并驱动 WS2812B 灯带实现多种炫酷的音频同步灯光特效。内置了 Web 服务,允许用户通过手机或电脑浏览器实时控制所有的灯光参数。
- 🎶 实时 FFT 分析:将音频分为 6 个独立的频段,分别驱动不同区域的 LED。
- 🎤 纯数字音频采集:支持 I2S 麦克风(如 INMP441),带动态高通滤波器,自动滤除底噪和直流偏移。
- 🌐 独立 Web 控制界面:ESP32 自动开启 AP 热点(无须路由器),手机直连进行参数调整。
- ⚙️ 动态信号校准:支持在网页端实时调整底噪门限 (Noise Floor) 和 满载峰值 (Peak Signal),适应不同环境音量。
- 🌈 多区域独立控制 (Zone Management):内置 6 个灯带分区,每个分区可以独立设置:
- 音频特效:Audio VU(音频进度条)、Audio Blink(音频闪烁)
- 基础特效:Solid(常亮)、Breathe(呼吸)、Rainbow(彩虹)、Chase(流水跑马)、Off(关闭)
- 独立颜色与亮度控制。
- ⚡ 全局控制:一键总开关 (Power Switch)、全局亮度控制。
- 🐛 ESP32-S3 兼容修复:底层修复了 ESP32-S3 在 Arduino 框架下 WiFi 与高频任务抢占导致的 Beacon 断流 Bug。
- 开发板: ESP32 / ESP32-S3 系列开发板
- LED 灯带: WS2812B (代码中默认配置为 48 颗 LED)
- 麦克风: I2S 麦克风模块 (强烈推荐 INMP441)
- 电源:若灯珠较多,请为灯带提供独立 5V 供电,并与 ESP32 共地。
可以在代码头部的宏定义中自行修改引脚。默认接线如下:
| INMP441 引脚 | ESP32 引脚 | 说明 |
|---|---|---|
| VDD | 3.3V | 供电 |
| GND | GND | 接地 |
| L/R | GND | 接地 (配置为左声道/右声道使用) |
| WS (LRCK) | GPIO 5 | 字选择 / 左右时钟 |
| SCK (BCLK) | GPIO 6 | 串行数据时钟 |
| SD (DOUT) | GPIO 4 | 音频数据输出 |
| WS2812B | ESP32 引脚 | 说明 |
|---|---|---|
| 5V | 5V 独立电源 | 灯带供电 |
| GND | GND | 必须与 ESP32 共地 |
| DIN | GPIO 13 | 数据控制引脚 |
在使用 Arduino IDE 编译前,请确保安装了以下依赖库(可通过 Library Manager 搜索安装):
arduinoFFT- 用于快速傅里叶变换。Freenove_WS2812_Lib_for_ESP32- 专为 ESP32 优化的 WS2812 驱动库(支持 RMT / I2S DMA 以防闪烁)。
- 将代码烧录至 ESP32。
- 设备启动后,会建立一个 WiFi 局域网热点。
- WiFi 名字 (SSID):
ESP32_Audio_LED - WiFi 密码:
12345678
- WiFi 名字 (SSID):
- 使用手机或电脑连接该 WiFi。
- 打开浏览器,访问 http://192.168.4.1
- 在美观的暗色控制面板中尽情调节吧:
- Power State: 点击切换全局灯光开关。
- Noise Floor: 如果房间很安静但灯光闪烁,请适度调大该值(如 0.8~2.0)。
- Peak Signal: 如果很大声灯光才能填满,请适度调小该值(如 5.0~15.0)。
- Zone Panel: 单独改变 A~F 6个分区的颜色及律动模式。
如果你的灯带不是 48 颗,或者想重新划分六个频段的长度,请在代码中修改以下数组:
#defineLED_COUNT48// 你的灯带总灯珠数
...
// ZONE_START: 分区起始 LED 的索引constintZONE_START[ZONE_COUNT] = { 0, 18, 20, 38, 40, 44 };
// ZONE_SIZE: 该分区包含的 LED 个数constintZONE_SIZE[ZONE_COUNT] = { 18, 2, 18, 2, 4, 4 };MIT License. 欢迎各类 Fork 与魔改!