Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ESP32 Audio-Reactive LED Controller (ESP32 音乐律动氛围灯)

这是一个基于 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。

🛠️ 硬件清单

  1. 开发板: ESP32 / ESP32-S3 系列开发板
  2. LED 灯带: WS2812B (代码中默认配置为 48 颗 LED)
  3. 麦克风: I2S 麦克风模块 (强烈推荐 INMP441)
  4. 电源:若灯珠较多,请为灯带提供独立 5V 供电,并与 ESP32 共地。

🔌 接线说明

可以在代码头部的宏定义中自行修改引脚。默认接线如下:

I2S 麦克风 (例如 INMP441)

INMP441 引脚ESP32 引脚说明
VDD3.3V供电
GNDGND接地
L/RGND接地 (配置为左声道/右声道使用)
WS (LRCK)GPIO 5字选择 / 左右时钟
SCK (BCLK)GPIO 6串行数据时钟
SD (DOUT)GPIO 4音频数据输出

WS2812B 灯带

WS2812BESP32 引脚说明
5V5V 独立电源灯带供电
GNDGND必须与 ESP32 共地
DINGPIO 13数据控制引脚

💻 软件依赖与编译

在使用 Arduino IDE 编译前,请确保安装了以下依赖库(可通过 Library Manager 搜索安装):

  • arduinoFFT - 用于快速傅里叶变换。
  • Freenove_WS2812_Lib_for_ESP32 - 专为 ESP32 优化的 WS2812 驱动库(支持 RMT / I2S DMA 以防闪烁)。

🚀 如何使用

  1. 将代码烧录至 ESP32。
  2. 设备启动后,会建立一个 WiFi 局域网热点。
    • WiFi 名字 (SSID): ESP32_Audio_LED
    • WiFi 密码: 12345678
  3. 使用手机或电脑连接该 WiFi。
  4. 打开浏览器,访问 http://192.168.4.1
  5. 在美观的暗色控制面板中尽情调节吧:
    • 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 };

📜 许可证 (License)

MIT License. 欢迎各类 Fork 与魔改!

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages