ESP32-S31-KORVO-1 · 多功能智能音箱

一台设备,五重身份

蓝牙音箱 · PC 歌词副屏 · 局域网对讲机 · 录音笔 · 视频播放器——再叠加 USB 扩展屏双固件与 WiFi OTA v2.1.0 A/B 双槽防砖升级。

在 GitHub 上查看
7 Tab 主界面 ≤100ms 对讲延迟 A/B 双槽 OTA 800×480 USB 副屏 16MB Flash
HARDWARE · 1 : 1 · 12 处标注

106.50 × 89.20 mm
一块可以转的真板

不是示意图。板框、台阶、6 个 φ3.30 安装孔、13194 个焊盘、5896 段丝印、314 个器件,全部按官方尺寸图(DXF)与参考设计 placement 的真实坐标落位,板厚 1.60 mm。上面叠着 4.3 英寸 LCD 子板,屏上是这台设备的真实壁纸——拆下来,裸板的每一颗芯片都标着号。

106.50× 89.20板尺寸 mm
1.60mm板厚 · 6 × φ3.30 安装孔
314颗贴装器件 · 全部 Top 面
13 194+5 896焊盘 / 丝印段
ESP32-S31-KORVO-1V1.1 · 整机形态 · 4.3″ LCD 子板叠装
整机形态 · 屏上是真实壁纸拖动旋转 · 滚轮缩放 · 点右上「拆下 LCD」看裸板标注
1 : 1mm · 实测尺寸
正在装板…
板上有什么12 处可交互

规格

板尺寸
106.50 × 89.20 mm(右段 89.20 / 左段 83.20,台阶 x = 75.60)
板厚
1.60 mm,6 × φ3.30 mm 安装孔
主控
ESP32-S31-WROOM-3(模组型号 N16R16V)
存储
16 MB SPI Flash + 16 MB PSRAM(芯片内置)+ microSD 4-bit
无线
Wi-Fi 6(2.4 GHz)、BT 5.4 + 经典蓝牙、802.15.4(Zigbee 3.0 / Thread 1.4)
音频
ES8389 双通道 Codec + 2× NS4150B(4 Ω 3 W)+ 双 MEMS 麦克风
视觉
板载 DVP 摄像头(24 Pin FPC);LCD 子板接口接 4.3 英寸 SUB3
供电
USB-C 5 V 输入,整板最大 3 A;音频链路独立供电

板载接口与按键

J1 / J5 Type-C 16P ×2 J2 USB Type-A J7 microSD J4 24Pin 0.5mm FPC J13 / J15 PH2.0 扬声器 ×2 J14 40Pin 2.54mm J3 电源拨动开关 SW1–SW6 4.2×3.2mm 按键 U3 WS2812B RGB

其余贴装器件

U14 TPS2051C · 0.5 A 限流 U16 BC847BDW1 双 NPN U11 TLV62569 降压 U2 / U12 / U13 ME6211 LDO ×3 L2 功率电感 Y1 无源晶振

主板与 LCD 子板通过 40Pin(2×20 / 2.54 mm)排针 J14 叠装;microSD 与 SPI NAND 复用 GPIO20–25,默认走 microSD。标牌点位取自参考设计 placement,板框与孔位取官方 DXF;封装外形为封装级还原,非厂家 STEP。LCD 子板外形按 4.3″ 面板模组标准尺寸推定(乐鑫未公开 SUB3 结构图),有效显示区 95.04 × 53.86 mm 与 800 × 480 像素一致。

数据来源:ESP32-S31-Korvo-1 V1.1 用户指南 · 尺寸图 DXF · 参考设计 placement / BOM 20260813。

PC NOW · 局域网推送

电脑在放的歌
副屏同步呈现

PyQt 上位机 pc_host 监听本机"正在播放"(网易云等),经局域网推送到设备副屏:旋转封面、三行滚动歌词(1.25s 提前量补偿滚动启动)、进度条与媒体控制键,还能反向遥控播放。

旋转封面 三行歌词 · 1.25s 补偿 媒体双向控制 上位机深色主题 · §77
PC NOW · LAN 推送中
夜航西飞演示曲目 · Local
灯光落进副屏的时候歌词正好滚到这一行比电脑慢不了半秒
02:11 / 04:29
PREVPAUSENEXTLIKE
v2.1.0 · A/B 双槽 · 零新增端口

升级不怕断电
断了接着传

设备作 HTTP 客户端主动拉取(控制面复用 UDP 50003、数据面复用 TCP 50005):OFFER 六条校验链 → 边收边写对侧槽(32KB 攒块,256KB 段哈希落 NVS)→ 段 CRC → 自证转正;窗口内断电由 bootloader 自动回滚旧槽。真续传已实弹验收:40% 断开 → 归零重推 → 从段边界 RESUME。v2.1.0 已整链路真机验收(CLI / UI 双路线):OFFER → HMAC 认证 → 六条校验 → 切槽 → 自证转正全绿;OTA 期 WiFi 停态 panic 已根治,版本三层 = version.txt 发布号 + +g<sha> 构建标识 + ELF SHA256 归档;吞吐 105~187 KB/s,TCP 窗口按实测定档 5760/16。

ota_0 ⇄ ota_1 锁死 真续传 · 最多重下 256KB 防砖四防线 双向 OTA §79 · 手动切槽 LVGL 全屏遮罩 · 请勿断电 版本三层 · version.txt + g<sha> + ELF SHA 自证约 10 s 转正 · 断电自动回滚
ota_0 · A 槽当前运行 · 已自证
⇄ 对侧写入
ota_1 · B 槽OTA 写入目标
uext (ota_2) · USB 副屏固件OTA 永不触碰 · 定点烧写 0xA20000
firmware_v2.1.0.bin · 5.0 / 5 MB(余 8 KB)SHA256 校验
HTTP GET :50005 · 32KB 攒块段 CRC 通过 · 自证转正 ✓
防砖四防线:esp_ota_end 段 CRC → 256KB 摘要链 → 自证回滚 → USB 全量兜底
audio_service · 命令队列仲裁

七个 Tab
装下一整个桌面

播放、录音、对讲经命令队列互斥调度,UI 从不直接碰 codec / I2S 寄存器;蓝牙与本地双输出一路切换。

A2DP Sink + AVRCP MJPEG AVI 硬解 + PPA 缩放 16kHz / 16bit 全双工 LOCAL / BT PUSH 双输出
CALL · 局域网对讲UDP 50000/50001 全双工,端到端 ≤100ms
REC · 本地录音一键开录 → SD 卡 WAV → FILES 页回放
AUDIO · 播放中心SD 卡音乐硬解;LOCAL / BT PUSH 双输出
SINK · 蓝牙音箱A2DP 推歌 + AVRCP 歌名/进度 + 实时歌词
VIDEO · 视频播放MJPEG AVI 硬件解码 + PPA 缩放,全屏 800×480
PC · 音乐副屏封面 / 歌词 / 进度 / 媒体控制,见上节
SYS · 系统中心RGB / WiFi / 蓝牙信息 / 固件升级(版本查询 · 双向 OTA · 运行槽显示与手动切槽)/ 存储·堆栈监视卡
双固件 · SET 一键切换

主固件 ⇄ 副屏固件
一个键来回切

uext 独立固件把本机变成 Windows 认证的 800×480 USB 扩展屏(TinyUSB HS 收 JPEG → 硬解直写屏)。SET 键单击 → 倒计时确认卡 → 重启进副屏;再按 → 回写引导标志回主固件。

TinyUSB HS · 硬解直写屏 JPEG 质量 9 · 单帧 ≤450KB 定点烧写 0xA20000 Windows IDD 签名驱动
bootloadernvs 24Kphy 4Kotadata 8K
ota_0 · 主固件 A 槽5 MB ota_1 · 主固件 B 槽5 MB
uext · 副屏固件2.875 MB · OTA 锁槽 storage · littlefs3 MB
16 MB Flash · partitions.csv V1.3OTA 只写对侧 · 断电回滚兜底
SET 单击(主固件)→ 倒计时确认卡 → 重启进副屏 → SET 单击 → 回写引导标志 → 回主固件
不只是固件 · AGENT FIRST

一套 Agent 可执行的开发闭环

传统嵌入式:人写码、人编译、人烧录、人看日志、人改。本仓库把整条链路沉淀成 Agent 可执行的 Skill + 工程规范——每一步的产物与判据都有明确定义。

01

读规范

docs/工程规范 01~11 + skills/esp-idf-closed-loop.md 闭环 SOP。

02

写代码

按模块模板生成 middleware / UI 代码,自动注册 CMakeLists。

03

编译

idf.py build,自动读 error: 并修复。

04

烧录

idf.py -p COM9 flash,确认 Hash verified。

05

抓日志

_serial_capture.py 拉 RTS 复位,抓 12s 启动日志。

06

判错修复

panic?功能日志?静默?不对就改代码,再走一遍。

middleware 禁 include lvgl.h 业务任务栈 ≥ 8192B PSRAM 生命周期归属明确 驱动结论搜遍 IDF + managed_components
访问 GitHub 仓库