# ME-BOT-ESP32 **Repository Path**: hkr9277/me-bot-esp32 ## Basic Information - **Project Name**: ME-BOT-ESP32 - **Description**: 基于esp32S3的me-mot项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-08-04 - **Last Updated**: 2025-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🎤 ESP32-S3 智能语音助手 - 复刻小智 AI 语音功能 > **完整复刻小智 AI 的语音交互体验** | 支持语音唤醒、命令识别和音频反馈 **视频教程预告**:我会在 B 站发布详细教程视频《ESP32 复刻小智 AI 语音功能》 ## 🌟 本示例代码主要做了什么? 这是一个完整的智能语音助手实现,复刻了小智 AI 的核心语音功能。当你说"你好小智"时,它会播放欢迎音频并进入命令模式。然后你可以说"帮我开灯"、"帮我关灯"等指令,系统会执行相应操作并播放确认音频。 **为什么做这个?** 很多朋友对小智 AI 的语音交互功能很感兴趣,但不知道如何实现。这个项目展示了完整的语音助手实现方案,包括唤醒、识别、反馈的全流程,让你可以打造属于自己的智能语音助手。 ## ⚡ 功能特性 - ✅ **语音唤醒检测** - 支持"你好小智"唤醒词 - ✅ **命令词识别** - 支持"帮我开灯"、"帮我关灯"、"拜拜"等指令 - ✅ **音频反馈播放** - 每个操作都有对应的语音确认 - ✅ **LED 灯控制** - 根据语音指令控制外接 LED - ✅ **智能超时管理** - 5 秒无指令自动退出,支持连续指令 - ✅ **完全兼容**小智 AI 的硬件接线方式 ## 📦 需要准备什么? ### 硬件清单(淘宝都能买到) | 部件 | 推荐型号 | 备注 | | ------ | ------------------ | -------------------------- | | 开发板 | ESP32-S3-DevKitC-1 | 必须是 S3 版本,需要 PSRAM | | 麦克风 | INMP441 | 约 5 元/个 | | 功放 | MAX98357A | 约 8 元/个 | | 喇叭 | 4Ω 3W 小喇叭 | 约 3 元/个 | | LED 灯 | 任意颜色 | 普通发光二极管即可 | ### 接线图(完全按照小智 AI 的接线方式) ```text 麦克风(INMP441) → ESP32开发板 ----------------------------- VDD(麦克风)→ 3.3V(开发板) // 接电源正极 GND(麦克风)→ GND(开发板) // 接电源负极 SD (麦克风)→ GPIO6 // 数据线 WS (麦克风)→ GPIO4 // 左右声道选择 SCK (麦克风)→ GPIO5 // 时钟线 功放(MAX98357A) → ESP32开发板 ----------------------------- VIN(功放)→ 3.3V(开发板) // 接电源正极 GND(功放)→ GND(开发板) // 接电源负极 DIN(功放)→ GPIO7 // 音频数据输入 BCLK(功放)→ GPIO15 // 位时钟 LRC(功放)→ GPIO16 // 左右声道时钟 LED控制 ------- LED长脚 → GPIO21 // 信号线 LED短脚 → GND // 接地 喇叭连接 -------- 喇叭正极 → 功放 + 喇叭负极 → 功放 - ``` > 💡 接线提示:严格按照上述接线,这是经过验证的小智 AI 标准接线方式 ## 🚀 3 分钟快速上手 ### 方法 1:电脑已安装 ESP-IDF(推荐) ```bash # 步骤1:配置项目 idf.py menuconfig # 在蓝色菜单中进行以下配置: # ① ESP Speech Recognition → Load Multiple Wake Words # 选择 "CONFIG_SR_WN_WN9_NIHAOXIAOZHI_TTS" (你好小智) # ② ESP Speech Recognition → 中文命令词识别 # 选择 "CONFIG_SR_MN_CN_MULTINET7_QUANT" (MultiNet7) # ③ 按S保存,按Q退出 # 步骤2:编译代码(约2-3分钟) idf.py build # 步骤3:连接开发板到电脑USB口 idf.py flash # 自动烧录程序 # 步骤4:查看运行状态 idf.py monitor # 看到"等待唤醒词"就成功啦! ``` ### 方法 2:使用预编译固件(快速体验) > 为了方便大家快速体验,我已经编译好了固件 1. 访问 **ESP 官方烧录工具** → [https://espressif.github.io/esp-launchpad/](https://espressif.github.io/esp-launchpad/) 2. 连接开发板到电脑 USB 口 3. 点击网页上的"DIY"按钮 4. 点击"Connect",选择你的开发板 5. 在"DIY"页面将"Flash"改成 0 6. 上传本项目 release 目录下的 `speech_commands_recognition.bin` 文件 7. 点击"Program"开始烧录 8. 烧录完成后点击"Reset"重启开发板 ## 🎯 使用方法 ### 基本语音交互流程 1. **唤醒阶段**:对着麦克风说"你好小智" - 系统检测到唤醒词后播放欢迎音频 - 自动进入命令识别模式(5 秒倒计时) 2. **命令阶段**:在 5 秒内说出以下指令之一 - "帮我开灯" → LED 灯点亮 + 播放确认音频 - "帮我关灯" → LED 灯熄灭 + 播放确认音频 - "拜拜" → 播放再见音频 + 返回等待唤醒状态 3. **连续指令**:执行完一个指令后,可以继续说其他指令 - 每次执行指令后重新开始 5 秒倒计时 - 5 秒内无指令则自动播放再见音频并退出 ### 系统状态指示 - **等待唤醒**:串口显示"等待唤醒词 '你好小智'" - **命令模式**:串口显示"进入命令词识别模式" - **指令执行**:串口显示具体的指令执行情况 - **自动退出**:串口显示"命令词等待超时" ## ⚙️ 自定义配置 ### 更换 LED 控制引脚 打开 `main/main.cc` 文件,修改第 44 行: ```c // 原代码:接在GPIO21 #define LED_GPIO GPIO_NUM_21 // ← 把21改成你想要的引脚号 ``` ### 调整命令超时时间 修改 `main/main.cc` 第 62 行: ```c static const TickType_t COMMAND_TIMEOUT_MS = 5000; // 改成你想要的毫秒数 ``` ### 更换唤醒词 ```bash idf.py menuconfig ``` → `ESP Speech Recognition` → `Load Multiple Wake Words` → 选择你喜欢的唤醒词(如"小爱同学"、"嗨乐鑫"等) → 按 S 保存,按 Q 退出,重新编译烧录 ### 调整检测灵敏度 修改 `main/main.cc` 第 245 行: ```c model_iface_data_t *model_data = wakenet->create(model_name, DET_MODE_90); // DET_MODE_90 - 推荐值(平衡型) // DET_MODE_95 - 最严格(减少误触发) // DET_MODE_80 - 最宽松(提高检测率) ``` ## ❓ 新手常见问题 ### Q1:没有声音输出? 1. 检查 MAX98357A 接线是否正确 2. 确认喇叭连接到功放的+/-端子 3. 检查 3.3V 供电是否稳定 4. 用万用表测试功放 VIN 端是否有 3.3V 电压 ### Q2:语音识别不准确? 1. 确保在安静环境下测试 2. 距离麦克风 20-50 厘米清晰发音 3. 检查 INMP441 接线,特别是 SD 数据线 4. 降低检测灵敏度(DET_MODE_90→DET_MODE_80) ### Q3:LED 灯不亮? 1. 检查 LED 正负极(长脚接 GPIO,短脚接 GND) 2. 确认 GPIO21 引脚配置正确 3. 用万用表测试 GPIO21 是否有电压变化 4. 尝试换一个 LED 灯测试 ### Q4:系统重启或死机? 1. 检查开发板是否为 ESP32-S3 且带 PSRAM 2. 确认 USB 供电充足(建议用电脑 USB 3.0 口) 3. 查看串口日志中的错误信息 4. 检查内存使用情况 ## 📚 技术原理(进阶学习) ### 使用的 AI 模型 - **WakeNet9**:第 9 代唤醒词检测模型,支持多种唤醒词 - **MultiNet7**:第 7 代中文命令词识别模型,识别准确率高 ### 音频处理流程 1. **音频采集**:INMP441 以 16kHz 采样率采集音频 2. **预处理**:WebRTC 降噪、VAD 语音活动检测 3. **特征提取**:提取音频的 MFCC 特征 4. **模型推理**:AI 模型进行语音识别 5. **后处理**:置信度判断、结果输出 ### 内存管理策略 - **PSRAM 存储**:语音模型加载到外部 PSRAM - **内部 RAM**:音频缓冲区使用内部 RAM 确保实时性 - **动态分配**:根据模型需求动态分配内存 ## 🎁 项目结构 ```text main/ ├── main.cc # 主程序(核心逻辑) ├── bsp_board.cc # 硬件抽象层(麦克风/功放控制) ├── bsp_board.h # 硬件接口定义 └── mock_voices/ # 音频文件目录 ├── welcome.h # 欢迎音频 ├── light_on.h # 开灯确认音频 ├── light_off.h # 关灯确认音频 └── byebye.h # 再见音频 ``` ## 📜 开源协议 Apache 2.0 - 可自由用于个人/商业项目,**注明原作者即可** **🎥 完整视频教程将在 B 站发布** **觉得项目有帮助?给个 Star✨ 就是最大鼓励!** **遇到问题?可以在 B 站视频中评论或者私信我,我看到都会回复** ## main.cc 流程图 ```mermaid flowchart TD A[系统启动] --> B[初始化外接LED GPIO21] B --> C[初始化INMP441数字麦克风] C --> D[初始化MAX98357A音频功放] D --> E[加载唤醒词模型] E --> F[加载命令词模型
MultiNet7中文识别] F --> G[创建命令词模型数据] G --> H[配置自定义命令词
开灯/关灯/拜拜/自定义] H --> I[分配音频缓冲区内存] I --> K[系统初始化完成
进入主循环] ``` ## 命令词逻辑 ```mermaid flowchart TD A[系统系统] --> L[唤醒词检测] L --> M{检测到唤醒词
你好小智?} M -->|是| N[播放欢迎音频] N --> O[切换到命令词识别状态
STATE_WAITING_COMMAND] O --> P[启动5秒超时计时器] P --> AA[从麦克风获取音频数据] AA --> DD[命令词识别] DD --> EE{识别结果} EE -->|ESP_MN_STATE_DETECTED
检测到命令| FF[获取命令ID和置信度] FF --> GG{命令类型判断} GG -->|COMMAND_TURN_ON_LIGHT
309 帮我开灯| HH[执行开灯
GPIO21设为高电平] HH --> II[播放开灯确认音频
light_on.h] II --> JJ[重置5秒计时器
继续等待命令] GG -->|COMMAND_TURN_OFF_LIGHT
308 帮我关灯| KK[执行关灯
GPIO21设为低电平] KK --> LL[播放关灯确认音频
light_off.h] LL --> JJ GG -->|COMMAND_BYE_BYE
314 拜拜| OO[播放再见音频
byebye.h] OO --> PP[返回等待唤醒状态
STATE_WAITING_WAKEUP] PP --> L EE -->|ESP_MN_STATE_TIMEOUT
识别超时| RR[执行退出逻辑
播放再见音频] RR --> PP EE -->|其他状态| SS{检查手动超时
5秒计时器} SS -->|超时| RR SS -->|未超时| AA ```