一台设备,五重身份
蓝牙音箱 · PC 歌词副屏 · 局域网对讲机 · 录音笔 · 视频播放器——再叠加 USB 扩展屏双固件与 WiFi OTA v2.1.0 A/B 双槽防砖升级。
106.50 × 89.20 mm
一块可以转的真板
不是示意图。板框、台阶、6 个 φ3.30 安装孔、13194 个焊盘、5896 段丝印、314 个器件,全部按官方尺寸图(DXF)与参考设计 placement 的真实坐标落位,板厚 1.60 mm。上面叠着 4.3 英寸 LCD 子板,屏上是这台设备的真实壁纸——拆下来,裸板的每一颗芯片都标着号。
规格
- 板尺寸
- 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;音频链路独立供电
板载接口与按键
其余贴装器件
主板与 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。
电脑在放的歌
副屏同步呈现
PyQt 上位机 pc_host 监听本机"正在播放"(网易云等),经局域网推送到设备副屏:旋转封面、三行滚动歌词(1.25s 提前量补偿滚动启动)、进度条与媒体控制键,还能反向遥控播放。
升级不怕断电
断了接着传
设备作 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。
七个 Tab
装下一整个桌面
播放、录音、对讲经命令队列互斥调度,UI 从不直接碰 codec / I2S 寄存器;蓝牙与本地双输出一路切换。
主固件 ⇄ 副屏固件
一个键来回切
uext 独立固件把本机变成 Windows 认证的 800×480 USB 扩展屏(TinyUSB HS 收 JPEG → 硬解直写屏)。SET 键单击 → 倒计时确认卡 → 重启进副屏;再按 → 回写引导标志回主固件。
一套 Agent 可执行的开发闭环
传统嵌入式:人写码、人编译、人烧录、人看日志、人改。本仓库把整条链路沉淀成 Agent 可执行的 Skill + 工程规范——每一步的产物与判据都有明确定义。
读规范
docs/工程规范 01~11 + skills/esp-idf-closed-loop.md 闭环 SOP。
写代码
按模块模板生成 middleware / UI 代码,自动注册 CMakeLists。
编译
idf.py build,自动读 error: 并修复。
烧录
idf.py -p COM9 flash,确认 Hash verified。
抓日志
_serial_capture.py 拉 RTS 复位,抓 12s 启动日志。
判错修复
panic?功能日志?静默?不对就改代码,再走一遍。
端侧人脸识别
ESP32-S31 单芯片完成人脸检测、识别与手势——不依赖任何云端服务器。拍照录像、小智 AI 对话、网页管理端,一机俱全。
三采三验录入
一键打卡存档
录入模式姓名输入 + 三采三验;用户模式对准摄像头按 PUNCH,识别成功自动拍照存入 SD 卡专属文件夹,附 SNTP 校时的可信时间戳,并生成 CSV 流水。人脸库持久化在 SD 卡,掉电安全。
五个模型
一条流水线
HumanFaceDetect 检测、MSR+MNP 配准、MFN 512 维特征、face_db 比对;HAND 档再挂 MobileNetV2 手势分类。模型全部置于 LittleFS,不编入固件——6.5 MB 的 app bin 也能住进 7 MB 单槽。
离线视觉之外
还有一颗云端大脑
点开 AI 浮窗即可与小智对话(esp_xiaozhi,16k/2ch 立体声锚点),支持按钮唤醒。内置 IoT 物体抽象——语音直接控制摄像头、喇叭、灯;音频通道与 MP3 播放、本地录音经租约互斥调度,谁持有谁播放,杜绝 codec 抢占。
取景、拍照、录像
一屏搞定
CAM 档 240×240 RGB565 实时取景,VIDEO 档寄存器级切到 720p JPEG。按下即拍、按住即录、松手即停(deadman 交互,含滑出按钮收尾),FILES 页缩略图等比回放,不拉伸变形。
10 分钟一换
断电也记得住
SD 卡 /wallpaper 壁纸池:每 10 分钟随机换一张,800ms 渐变切换(下拉浮层打开时同样生效);每次换图写入 NVS,断电重启恢复上次壁纸;FILES 页或网页端一键设壁纸。池空 / 坏图自动落到 littlefs 内置图——任何情况不黑屏。
连上热点
就是控制台
设备内置 HTTP 服务,APSTA 双模常开热点,手机 / PC 连上即用:识别打卡 1 秒内推送(照片 + 姓名 + 时间 + 分数)、全量记录表、SD 卡媒体预览(AVI 流式播放)、壁纸 / 音乐上传管理。
七步,从帧到打卡存档
检测 → 配准 → 特征 → 比对 → 存档。每一步都有明确的资源归属:引擎随会话按需加载,会话结束即释放——PSRAM 从不被无故占用。
以上为架构示意(API 命名与仓库 middleware 层一致),完整实现见 main/middleware/camera/face_recog_service.c · face_service.cpp
每一兆字节,都有归属
16 MB PSRAM 要同时养活 LVGL 双帧缓冲、摄像头流、AI 模型与音频链路。项目用显式的生命周期纪律管好它:即用即释放、租约互斥、起流自愈。
LVGL / 相机 / 音频 · 16 MB PSRAM
五分钟,在板子上跑起来
ESP-IDF v6.1.0 · 全量烧录一步到位 · 空 SD 卡即插即用
准备 SD 卡
FAT32 格式;设备不自动格式化,exFAT 不支持。其余目录按需自建,空卡即插即用。
安装 ESP-IDF
EIM 一键安装 v6.1.x,自动配好 Python venv、交叉工具链与 OpenOCD。
idf.espressif.com编译
分区偏移变更时必须全量,reconfigure 一步不能省。
idf.py reconfigure && idf.py build烧录
全量烧录 app + storage.bin,分区偏移变更时尤其如此。
idf.py -p COM9 flash连接管理端
手机 / PC 连设备热点(无密码),浏览器开箱即用。
http://192.168.4.1把端侧智能,装进你的下一块板子
人脸识别打卡 · 720p 拍照录像 · 手势检测 · 小智 AI 对话 · 动态壁纸 · 网页管理端
不只是代码——一套 AI Agent 可读规范:写代码 → 静态校验 → 烧录 → 抓日志 → 反复验证的智能开发闭环