AIWatch — ESP32-S3 AI 语音可穿戴终端
AIWatchAIWatch是一款基于 ESP32-S3 微控制器的开源 AI 可穿戴设备固件。它通过 WebSocket 连接OpenClaw AI 网关以自然语音交互实现端到端语音对话、MP3 音乐播放和远程设备控制。当前阶段: DVT设计验证测试— v0.1.0-beta 概述AIWatch 将 ESP32-S3 开发板变成以语音为先的 AI 伴侣。用唤醒词例如你好小智唤醒它自然说话即可通过 TTS 获得 AI 语音回复。它是 Rabbit R1 和 Humane AI Pin 等封闭平台的开源替代品——低成本、隐私可控、完全可自由修改。┌───────────────────────────────────────────────────────┐ │ AIWatch Device │ │ ┌─────────┐ ┌──────────┐ ┌────────────────────┐ │ │ │ Wake │ │ STT │ │ OpenClaw Client │ │ │ │ Word │─▶│ (MiMo) │─▶│ (WebSocket JSON) │──┼──▶ OpenClaw │ │ (ESP-SR)│ │ │ │ │ │ Gateway │ └─────────┘ └──────────┘ └────────────────────┘ │ │ ▲ │ │ │ │ ▼ │ │ ┌────┴──────┐ ┌──────────┐ │ │ │ I2S Mic │ │ TTS │ │ │ │ (ES7210) │ │ (MiMo) │ │ │ └───────────┘ └────┬─────┘ │ │ │ │ │ ▼ │ │ ┌──────────┐ │ │ │ I2S Spkr │ │ │ │ (ES8311) │ │ │ └──────────┘ │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │ │ │ LVGL UI │ │ MP3 │ │ Web Server │ │ │ │ (AMOLED) │ │ Player │ │ (Config API) │ │ │ └──────────┘ └──────────┘ └──────────────────┘ │ └───────────────────────────────────────────────────────┘ 功能特性语音 AI 对话离线唤醒词ESP-SR WakeNet 引擎如你好小智或 MultiNet 自定义短语——引擎与短语均可通过 menuconfig 选择无需云端依赖语音转文字STT小米 MiMo-V2.5-ASRHTTP REST API兼容 OpenAI 格式文字转语音TTS小米 MiMo-V2.5-TTSHTTP SSE 流式输出——支持多音色智能 VAD自适应噪声校准、静音检测默认 1.5s连续对话模式延长至 15s、最大 25s 录音缓冲设备命令AI 可控制设备——[DEVICE:volume80]、[DEVICE:brightness70]、[DEVICE:mp3play:song.mp3]等用户界面AMOLED 屏幕410×502 AMOLED 面板LVGL 9.x 深色主题 UIiOS / HarmonyOS 风格纯黑背景灵动岛Dynamic Island顶部胶囊250×44圆角胶囊显示当前状态文字带状态色辉光边框WiFi 图标与OpenClaw 连接光点与胶囊同一行左右排列距边缘 50px与胶囊垂直中心对齐避开圆角裁剪区域每状态内容15 个状态每个最多显示 3 个元素——主标题 中文副标题 一条滚动文本状态互斥不重叠待机时钟120px 特粗体时钟 下方中文日期如2025年8月13日 星期三波形动画LISTENING录音中状态渲染 16 条动态音频波形滚动字幕统一单行左滚文本10 px/s由 LLM 回复白色、STT 转写黄色#FF9F0A、TTS 字幕蓝色#0A84FF共用MP3 播放器 UI全屏覆盖层——珊瑚红光环、渐变专辑封面、选曲模式滑动浏览 · 双击确认触摸交互点击 MP3 覆盖层切换播放/暂停滑动 双击选曲音频播放MP3 播放器播放 microSD 卡中的 MP3 文件/sdcard/mp3/支持播放列表I2S 音频共享 I2S 总线——ES8311 DAC扬声器与 ES7210 ADC双麦克风优先级仲裁录音 MP3 TTS 通知——保证音频切换干净无冲突网络WiFiStation 模式自动重连 AP 模式配合强制门户captive portal配网Web 服务器80 端口的 HTTP 配置界面与 REST APISNTP自动时间同步系统设置通过 NVS非易失存储持久化配置错误日志带严重级别的结构化错误追踪内存监控周期性 DRAM/PSRAM 健康检查电源管理CPU 频率缩放80–240MHz、可配置休眠超时[DEVICE:sleepN]分钟、CLI 深睡串口 CLI通过 USB-C 的交互式命令行️ 支持的硬件主目标板Waveshare ESP32-S3-Touch-AMOLED-2.06组件规格MCUESP32-S3R8双核 Xtensa LX7 240MHzFlash32MBQSPIPSRAM8MBOctal SPI屏幕410×502 QSPI AMOLEDCO5300 / SH8601 驱动触摸FT3168 电容触摸I2C音频 DACES8311扬声器输出I2S音频 ADCES72104 通道麦克风输入I2SIMUQMI8658 六轴加速度计 陀螺仪PMUAXP2101 电源管理RTCPCF85063SD 卡microSDSPI 模式按键BOOTGPIO0 PWRAXP2101 管理其他支持板卡Waveshare ESP32-S3-AUDIO-Board1.47 IPS LCD172×320、7× WS2812 RGB 灯环、OV2640 摄像头硬件当前固件无摄像头驱动、TCA9555 IO 扩展Seeed Studio SenseCAP WatcherESP32-S3、SPD2010 屏幕遗留支持M5StickC Plus2ESP32-PICO-V3-02遗留支持 准备工作硬件Waveshare ESP32-S3-Touch-AMOLED-2.06或其他受支持板卡USB-C 数据线烧录与串口控制台microSD 卡用于 MP3 文件与聊天记录可选外接扬声器音频输出软件ESP-IDF v5.5与 ESP32-S3 工具链gitclone-bv5.5--recursivehttps://github.com/espressif/esp-idf.gitcdesp-idf./install.sh esp32s3../export.sh外部服务需要 API 密钥OpenClaw 网关自托管 AI 网关WebSocket 服务器小米 MiMo APISTTASR与 TTS 服务——到 platform.xiaomimimo.com 获取 API 密钥 快速开始1. 克隆仓库gitclone https://github.com/zhou19830318/AIWatch.gitcdAIWatch2. 配置构建目标# 确保使用 ESP32-S3 目标idf.py set-target esp32s33. 通过 Menuconfig 配置idf.py menuconfig进入AIWatch Application Configuration选择Waveshare ESP32-S3-Touch-AMOLED-2.06作为目标板卡选择唤醒词引擎推荐 WakeNet设置 OpenClaw 网关主机与端口4. 配置 API 密钥从示例创建main/include/secrets.hcpmain/include/secrets.h.example main/include/secrets.h编辑secrets.h设置WiFi SSID 与密码STT / TTS 的 MiMo API 密钥OpenClaw 设备凭据ED25519 密钥5. 准备 SD 卡将 microSD 卡格式化为 FAT32 并创建如下目录结构/sdcard/ ├── mp3/ # MP3 音乐文件 └── notes/ # 每日聊天记录自动创建6. 编译与烧录idf.py build idf.py-p/dev/ttyACM0 flash monitor或使用便捷编译脚本./build_audio_board.sh 状态机应用以 15 态有限状态机运行#状态说明0SLEEP屏幕关闭 / 深睡低功耗1ARMED系统初始化完成等待中2BOOT系统启动 / 初始化3CONNECTING连接 OpenClaw4IDLE就绪等待唤醒词5LISTENING录制用户语音6SENDING上传音频至 STT7THINKING等待 AI 回复8STREAMING接收流式回复9RESPONSE收到完整回复10TTS_LOADING准备 TTS 音频11TTS_PLAYING播放 TTS 音频12PLAYING_MP3MP3 音乐播放13NOTIFYING网关通知14ERROR错误状态正常流程BOOT → CONNECTING → IDLE → (唤醒词) → LISTENING → SENDING → THINKING → STREAMING → RESPONSE → TTS_LOADING → TTS_PLAYING → IDLE⌨️ 串口 CLI 命令通过 USB-C 串口115200 波特率连接输入help括号内为别名命令说明helph、?显示 AIWatch 命令参考statuss显示设备状态talkt开始语音对话say text向 AI 发送文本abort中止当前对话detailsd请求 OpenClaw 完整详情playp朗读上一条回复quietq切换 ESP_LOG* 输出抑制wakew唤醒屏幕deepsleep进入深睡rebootrestart重启设备wifi ssid pass设置 WiFi 凭据web切换 Web 管理服务器tasks打开任务界面cron-add-test添加测试定时任务cron-remove id删除定时任务mp3打开 MP3 播放器界面mp3list列出 SD 卡上的 MP3 文件mp3play file播放 MP3 文件mp3stop停止 MP3 播放mp3pause暂停 MP3 播放mp3resume恢复 MP3 播放 设备命令AI 控制AI 可以发送格式为[DEVICE:command]的设备命令命令说明volumeN设置扬声器音量0-100brightnessN设置屏幕亮度0-100rgboff/on/rainbow/aurora/starfield/fire/ocean/R,G,B控制 RGB 灯环仅音频板sleepN设置休眠超时为 N分钟0 永不休眠reboot重启设备webserveron/off切换 Web 管理服务器auto_readon/off切换 AI 回复自动朗读mp3play:file按文件名播放 MP3mp3stop停止 MP3 播放mp3pause/mp3resume暂停 / 恢复播放mp3show显示当前播放列表mp3scan或mp3list重新扫描 SD 卡中的 MP3chatlogquery:date读取某日期YYYY-MM-DD的聊天记录并请 AI 总结widgetjson/cardjson保留命令——当前固件忽略️ 项目结构AIWatch/ ├── main/ # 应用入口与核心逻辑 │ ├── app_main.c # 系统初始化与主事件循环 │ ├── app_state.c # 全局状态、设备命令解析、MP3 管理 │ ├── app_state_machine.c # FSM 与资源仲裁 │ ├── app_tasks.c # 后台任务旋钮、TTS、状态、休眠 │ ├── voice_chat.c # 录音 → STT → VAD 流水线 │ ├── serial_cmd.c # 串口 CLI REPL │ ├── mem_monitor.c # 内存监控 │ └── include/ # 应用配置、密钥、全局变量 │ ├── components/ # 可复用 ESP-IDF 组件库 │ ├── board/ # 硬件抽象多板支持 │ ├── wifi_manager/ # WiFi 强制门户 │ ├── openclaw/ # OpenClaw WebSocket 客户端ED25519 认证 │ ├── stt/ # 语音转文字MiMo ASR │ ├── tts/ # 文字转语音MiMo TTS │ ├── wake_word/ # ESP-SR 唤醒词检测 │ ├── ui/ # LVGL 用户界面 │ ├── mp3_player/ # SD 卡 MP3 播放器 │ ├── notes_manager/ # SD 卡聊天记录 │ ├── settings/ # NVS 持久化设置 │ ├── error_log/ # 结构化错误日志 │ ├── webserver/ # HTTP 配置服务器 │ ├── ed25519_lib/ # ED25519 加密库 │ ├── esp_audio_codec/ # 音频编解码MP3、AAC、FLAC 等 │ ├── esp_audio_simple_player/ # 基于 GMF 的音频播放流水线 │ ├── gmf_core/ # 通用媒体框架核心 │ ├── gmf_audio/ # GMF 音频处理单元 │ ├── gmf_io/ # GMF I/O 模块 │ └── sscma_client/ # SSCMA / TensorFlow Micro 客户端 │ ├── partitions.csv # Flash 分区表32MB 布局 ├── sdkconfig.defaults # ESP-IDF SDK 配置默认值 ├── CMakeLists.txt # 根 CMakeESP-IDF v5.5 └── build_audio_board.sh # 便捷编译脚本 Flash 分区布局32MB分区类型大小用途nvsdata24KB非易失设置存储phy_initdata4KBPHY 校准数据factoryapp8MB应用固件modelspiffs960KB唤醒词模型文件storagespiffs2MB应用数据与日志 关键依赖组件版本用途ESP-IDFv5.5.3RTOS 与外设框架LVGLv9.5.0嵌入式 GUI 库esp-srv1.9.5语音识别WakeNetesp_lvgl_portv2.8.0LVGL-ESP 集成esp_codec_devv1.5.10音频编解码设备驱动esp_websocket_clientv1.1.0WebSocket 客户端led_stripv2.5.5WS2812 LED 控制esp32_s3_touch_amoled_2_06v1.0.7Waveshare AMOLED BSPesp_lcd_sh8601v2.0.0SH8601 AMOLED 屏幕驱动 参与贡献欢迎贡献请遵循以下步骤Fork 本仓库创建特性分支git checkout -b feature/amazing-feature提交你的修改git commit -m Add amazing feature推送分支git push origin feature/amazing-feature发起 Pull Request 许可证本项目基于 MIT 许可证开源。详见 LICENSE 文件。SPDX-FileCopyrightText: 2024-2026 AIWatch Contributors SPDX-License-Identifier: MIT 致谢Waveshare— 优秀的 ESP32-S3 开发板与 BSPEspressif— ESP-IDF 框架与 ESP-SR 语音识别LVGL— 轻量而强大的嵌入式图形库OpenClaw— 支持多模态 LLM 交互的 AI 网关协议小米 MiMo— 语音转文字与文字转语音 API 服务由 AIWatch Contributors 用 ❤️ 构建