ESP32 无线音响系统 (AirPlay 2 / 蓝牙 / AUX + NJW1195A 硬件级音量控制)。

wp 2abdab06f6 修复 README 在某些 Git 平台上的 Markdown 解析错误 2 settimane fa
.githooks 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
cmake 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
components 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
data 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
docs 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
main 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
scripts 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
.clang-format 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
.clang-tidy 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
.clangd 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
.gitignore cda1c75204 从 Git 跟踪中移除 .agents 缓存并加入忽略列表 2 settimane fa
.gitmodules 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
CLAUDE.md 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
CMakeLists.txt 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
CONTRIBUTING.md 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
LICENSE 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
README.md 2abdab06f6 修复 README 在某些 Git 平台上的 Markdown 解析错误 2 settimane fa
dependencies.lock 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
platformio.ini 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
requirements-dev.txt 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
sdkconfig.defaults.bt 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
sdkconfig.defaults.esp32p4 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
sdkconfig.defaults.esp32s2 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
sdkconfig.defaults.esp32s3 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
sdkconfig.defaults.esparagus-audio-brick 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
sdkconfig.defaults.esparagus-audio-brick-s3 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
sdkconfig.defaults.esparagus-louder 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
sdkconfig.defaults.esparagus-louder-s3 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
sdkconfig.defaults.music-box 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
sdkconfig.defaults.squeezeamp 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
sdkconfig.defaults.squeezeamp-4m 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
sdkconfig.defaults.waveshare-esp32s3 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
sdkconfig.defaults.wrover 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa
version.txt 511e775a80 ESP32 智能音响控制系统定制开发完成 2 settimane fa

README.md

🎵 ESP32 智能音响控制系统 (AirPlay 2 & Bluetooth & AUX)

ESP-IDF Platform

将您的 ESP32 打造成一台支持 Apple AirPlay 2、蓝牙 A2DP 和 AUX 模拟输入的高端智能无线音响中控!


✨ 核心特性

本项目基于开源的 airplay-esp32 深度定制,针对专用音响硬件进行了全面升级:

  1. 多音源无缝切换
    • 🍏 AirPlay 2:原生支持苹果生态无损串流,手机/Mac 直接控制。
    • 📶 Bluetooth A2DP:支持任何手机/平板蓝牙直连播放,完美处理蓝牙意外断开与回连。
    • 🔌 AUX 模拟输入:支持传统有线音源输入。
  2. 专业级音频控制 (NJW1195A)
    • 通过 SPI 总线深度集成 NJW1195A 音频处理芯片。
    • 支持硬件级的主音量控制(0~100级)。
    • 支持高低音 (Bass/Treble) EQ 独立调节。
  3. UART 外部面板通信协议
    • 内置完整的串口通信协议 (panel_uart.c),可与外部屏幕、按键面板或 MCU 进行双向通信。
    • 支持同步电量、充电状态、播放状态、音源切换等。
  4. 极致体验的 Web UI (PWA 原生应用级体验)
    • 暗黑鎏金主题:高级质感的深色系 UI 设计。
    • PWA 支持:在 iOS Safari 中点击“添加到主屏幕”,即可拥有完美适配刘海屏/灵动岛的全屏原生 App 体验,沉浸式操控!
    • 实时状态同步:毫秒级同步当前播放歌曲、艺术家、专辑进度条,以及电池电量和网络状态。
    • OTA 在线升级:支持直接通过网页后台一键升级固件。

🛠️ 硬件与引脚配置

该固件专为搭配了 NJW1195A 芯片和外部通信串口的定制 ESP32 硬件设计:

  • I2S 音频输出:用于连接 DAC 解码音频数据。
  • SPI 总线 (NJW1195A)
    • SPI_CLK / SPI_DATA / SPI_CS:用于控制 NJW1195A 的音量和通道切换。
  • UART 控制面板
    • 默认使用 UART2 (TX: GPIO4, RX: GPIO5),波特率 115200,用于与外部控制板交互。

🚀 快速上手与编译

项目使用 ESP-IDF v5.x 进行构建。

1. 编译与烧录

确保您已经正确安装并配置了 ESP-IDF 环境:

# 1. 激活 ESP-IDF 环境
. $HOME/esp/esp-idf/export.sh

# 2. 设置目标芯片为 ESP32 (或 ESP32-S3,取决于您的实际硬件)
idf.py set-target esp32

# 3. 编译并烧录固件
idf.py build
idf.py -p /dev/ttyUSB0 flash monitor

(注意:如果是首次烧录,或者修改了网页文件 data/www/index.html,需要同步烧录 SPIFFS 分区)

2. 首次配网 (Setup)

  1. 给 ESP32 上电开机。
  2. 拿出手机,连接名为 ESP32-AirPlay-Setup 的 Wi-Fi 热点。
  3. 手机会自动弹出配置页面(如果没有,请浏览器访问 192.168.4.1)。
  4. 在页面中输入您家的 Wi-Fi 密码,并为您的高级音响起一个名字(比如“客厅音响”)。
  5. 保存后 ESP32 会自动重启并连入您家路由器的网络。

3. 使用原生 Web 控制面板 (PWA)

为了获得最佳体验,强烈建议您在苹果手机上将其安装为原生应用:

  1. 确保手机和音响在同一局域网下。
  2. 打开 iPhone 上的 Safari 浏览器,在地址栏输入:http://您的音响名称.local(例如 http://musicbox.local,无需查找复杂且会变动的 IP 地址!借助苹果原生的 mDNS 即可秒连)。
  3. 点击浏览器底部的 “分享” 图标 ➡️ 选择 “添加到主屏幕”
  4. 回到桌面,点击新添加的独立 App 图标,即可享受沉浸式、无刘海遮挡的丝滑控制体验!

📝 固件版本修改

如果您需要发布新版本固件,只需修改项目根目录下的 version.txt 文件内容(例如修改为 1.2.0)。 在下次执行 idf.py build 时,CMake 会自动将该版本号编译进固件中,并在网页控制台的右上角同步展示。


⚖️ 许可 (License)

本项目基于原 airplay-esp32 开发,遵循非商业开源协议。禁止未经授权用于任何商业盈利用途。