# dac-esp32s3 **Repository Path**: question_h/dac-esp32s3 ## Basic Information - **Project Name**: dac-esp32s3 - **Description**: 使用esp32s3 和tda1543做的数字播放器 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-16 - **Last Updated**: 2026-03-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TDA1543 Digital Player **ESP32-S3 + TDA1543 DAC 数字播放器** [![PlatformIO](https://img.shields.io/badge/PlatformIO-6.10.0-orange)](https://platformio.org) [![Framework](https://img.shields.io/badge/Framework-Arduino-blue)](https://www.arduino.cc) [![RAM](https://img.shields.io/badge/RAM-14.3%25-green)]() [![Flash](https://img.shields.io/badge/Flash-22.3%25-green)]() --- ## 功能特性 ### ✅ DLNA 无线播放 - 手机/PC 推送音频到设备 - UPnP/SSDP 自动发现 - 固定 16bit/44.1kHz PCM 格式 - 实时播放状态显示 ### ✅ SD 卡本地播放 - SDIO 4-bit 高速模式 (20MB/s) - WAV 文件浏览与多选 - 播放列表管理 - 一键添加文件夹内所有歌曲 ### ✅ 系统功能 - iOS 风格 UI 界面 - WiFi AP/STA 双模式 - Web 配置界面 - OTA 固件升级 - 配置持久化存储 --- ## 硬件配置 | 组件 | 型号 | 说明 | |------|------|------| | **MCU** | ESP32-S3 N16R8 | 16MB Flash + 8MB PSRAM | | **DAC** | TDA1543 | 16bit / 44.1kHz | | **Display** | ST7789 | 240x280 SPI | | **SD Card** | TF Card | SDIO 4-bit | ### 引脚定义 **TFT Display (SPI)**: ``` SCK: GPIO48 MOSI: GPIO47 CS: GPIO40 DC: GPIO41 RST: GPIO21 ``` **I2S Audio**: ``` BCLK: GPIO1 WS: GPIO2 DATA: GPIO42 ``` **SD Card (SDIO 4-bit)**: ``` CLK: GPIO7 CMD: GPIO6 D0: GPIO15 D1: GPIO16 D2: GPIO4 D3: GPIO5 ``` **Buttons (4-way)**: ``` UP: GPIO8 DOWN: GPIO18 LEFT: GPIO3 RIGHT: GPIO17 PRESS: GPIO0 (禁用 - 电压问题) ``` --- ## 项目结构 ``` tda1543/ ├── README.md ├── platformio.ini ├── ota_update.py # OTA 升级脚本 ├── flash.bat # Windows 烧录脚本 ├── docs/ │ ├── REQUIREMENTS.md # 需求文档 │ ├── HARDWARE.md # 硬件说明 │ └── UI_DESIGN.md # UI 设计 └── src/ ├── main.cpp ├── config.h ├── audio/ │ ├── audio_source.h # 音频源接口 │ ├── audio_player.h/cpp # 播放器管理 │ ├── i2s_output.h/cpp # I2S 输出 │ └── sd_source.h/cpp # SD 卡音源 ├── dlna/ │ ├── dlna_renderer.h/cpp # DLNA 渲染器 │ ├── ssdp.h/cpp # SSDP 发现 │ └── upnp_service.h/cpp # UPnP 服务 ├── wifi_manager.h/cpp ├── sd_card.h/cpp ├── file_manager.h/cpp ├── playlist.h/cpp ├── ui.h/cpp └── display.h/cpp ``` --- ## UI 界面 ### 菜单结构 ``` 启动屏 │ ▼ 播放界面 ◄────────────────┐ │ 播放源: DLNA / SD Card │ │ 曲目信息 │ │ 进度条 │ │ 播放控制 │ │ │ │ [上] 进入设置 ─────────┘ │ ▼ 设置菜单 ├─► 音源选择 (DLNA / SD Card) ├─► SD卡文件管理 │ ├─► 文件管理器 (浏览/多选/删除) │ └─► 播放列表 (创建/添加/删除) ├─► 网络管理 (AP/STA) ├─► OTA 升级 └─► 系统信息 ``` ### 文件管理器多选功能 - **按下文件**: 切换选中 (蓝色 = 选中) - **按下文件夹**: 全选内部所有 WAV 文件 - **底部状态栏**: 显示选中数量 - **支持删除**: 批量删除选中文件 --- ## 编译与烧录 ### 编译 ```bash cd tda1543 pio run ``` ### 烧录 (Windows) ```cmd flash.bat ``` ### OTA 升级 ```bash python ota_update.py 192.168.1.72 ``` 或访问 Web 界面: `http://192.168.1.72` --- ## WiFi 配置 ### AP 模式 (默认) - **SSID**: `DigitalPlayer` - **密码**: `12345678` - **IP**: `192.168.4.1` ### STA 模式 1. 连接到 AP 2. 浏览器打开 `http://192.168.4.1` 3. 输入 WiFi SSID 和密码 4. 设备自动连接并切换到 STA 模式 --- ## 音频格式要求 ### DLNA - 接受: 16bit / 44.1kHz / 立体声 PCM - 手机/PC 端负责格式转换 ### SD 卡 - 只支持: WAV (16bit / 44.1kHz / 立体声 PCM) - 其他格式会被拒绝并提示 --- ## 开发进度 ### DLNA 播放功能 ✅ - [x] SSDP 设备发现 - [x] SSDP 周期性广播 (每30秒) - [x] UPnP SOAP 服务 - [x] HTTP 音频流接收 - [x] I2S 音频输出 - [x] 播放控制 - [x] UI 集成 ### SD 卡播放功能 ✅ - [x] SDIO 4-bit 驱动 - [x] 文件管理器 + 多选 UI - [x] SDAudioSource (WAV) - [x] 播放列表管理 - [x] 播放控制 - [x] 持久化存储 ### 系统功能 ✅ - [x] WiFi 管理 (AP/STA) - [x] Web 配置界面 - [x] OTA 固件升级 - [x] 配置持久化 - [x] iOS 风格 UI - [x] GPIO0 按键修复 (I2S 初始化后重置上拉) --- ## 编译信息 | 项目 | 占用 | 总计 | |------|------|------| | **RAM** | 46 KB (14.3%) | 327 KB | | **Flash** | 934 KB (22.3%) | 4 MB | --- ## 技术架构 ### 模块化音频架构 ``` ┌─────────────────────────────┐ │ DLNA Source / SD Source │ │ (AudioSource) │ └─────────────┬───────────────┘ │ ▼ AudioPlayer │ ▼ I2S Output (44.1kHz/16bit) │ ▼ TDA1543 DAC ``` ### FreeRTOS 任务分配 | 任务 | 优先级 | 核心 | |------|--------|------| | UI 渲染 | 3 | 0 | | WiFi 管理 | 2 | 1 | | 音频播放 | 2 | 1 | | SSDP/UPnP | 1 | 1 | --- ## Git 仓库 https://gitee.com/question_h/dac-esp32s3 --- ## 许可证 MIT License --- ## DLNA 测试工具 项目包含一个 Python3 DLNA 测试工具: ```bash python3 tools/dlna_test.py -d # 发现设备 python3 tools/dlna_test.py -i # 交互模式 python3 tools/dlna_test.py -p # 播放媒体 ``` --- *最后更新: 2026-03-17 23:30*