> 技术文档 > ESP32-S3打造豆包实时语音助手:基于Micropython开发_esp32实时语音

ESP32-S3打造豆包实时语音助手:基于Micropython开发_esp32实时语音


基于ESP32-S3的豆包语音智能助手实现

Tips:文末源码自取

对话效果

豆包语音智能体+gc9a01显示

项目概述

本项目基于ESP32-S3微控制器,构建了一个实时响应的AI语音助手系统。通过WebSocket协议与豆包大模型对接,具备强大的对话能力和高度可定制性。

硬件准备

  • ESP32-S3SuperMini开发板:搭载双核处理器,主频240MHz,集成WiFi和蓝牙模块
  • I2S麦克风INMP441:用于语音信号采集
  • I2S扬声器MAX98357:用于语音输出
  • SPI显示器GC9A01:用于显示文字或图片
  • 接线示意图:

软件架构

系统采用MicroPython-esp32-1.25.0-4M固件开发环境,主要功能模块包括:

  1. WebSocket通信:基于aiohttp库实现与豆包API的双向数据交互
  2. 音频采集:通过I2S接口获取麦克风输入
  3. 音频播放:通过I2S接口输出语音内容
  4. 语音活动检测(VAD):本地实时识别用户语音状态
  5. 消息队列管理:协调系统与服务端的数据交互
  6. gc9a01模块:用于支持gc9a01显示器进行中、英文、图片显示
  7. 固件下载地址:doubao_ai_agent_esp32/micropython固件/firmware.bin at main · zhou19830318/doubao_ai_agent_esp32

 豆包音频智能体协议

语音对话智能体--边缘智能-火山引擎

核心技术实现

语音活动检测(VAD)

采用高效的能量检测算法实现语音识别:

volume = 0for i in range(0, bytes_read, 2): if i + 1 < bytes_read: sample = (audio_buffer[i+1] < 0 else 0is_currently_silent_chunk = avg_volume <= SILENCE_THRESHOLD

通过设置语音时长和静音阈值,有效过滤背景噪音:

MIN_VALID_SPEECH_DURATION_S = 0.4POST_SPEECH_SILENCE_THRESHOLD_S = 1.5

异步通信架构

基于asyncio框架实现多任务并发处理:

  1. 音频采集线程持续监听用户语音
  2. WebSocket线程处理服务端消息
  3. 消息队列线程负责数据发送

这种架构确保了系统的高效运行,避免了任务阻塞。

豆包API交互流程

  1. 建立会话:初始化WebSocket连接
  2. 采集音频:检测到有效语音后编码传输
  3. 提交处理:语音段结束后请求响应
  4. 接收响应:解析并播放返回的音频

关键代码实现:

elif event_type == \'input_audio_buffer.committed\': item_id = data.get(\'item_id\') print(f\"✅ 服务端已确认音频提交 (Item ID: {item_id})\") waiting_for_response_creation = True response_create_msg = { \"type\": \"response.create\", \"response\": { \"modalities\": [\"audio\"], \"voice\": VOICE_ID } } add_to_message_queue(response_create_msg)

内存优化

针对ESP32-S3的资源限制,采用以下优化策略:

  1. 主动垃圾回收:在关键节点调用gc.collect()
  2. 数据分块处理:将音频数据分段传输
  3. 资源释放:及时关闭不再使用的I2S设备
  4. 高效队列管理:使用deque避免内存泄漏

容错设计

系统具备完善的容错机制:

  1. 自动重连:WebSocket断开后自动恢复
  2. 异常捕获:全面处理各类运行异常
  3. 设备重初始化:I2S设备故障时自动恢复
if not audio_in: print(\"🎤 麦克风未初始化,尝试重新初始化...\") audio_in = init_i2s_mic() if not audio_in: print(\"❌ 麦克风重初始化失败,暂停录音\") time.sleep(1) continue

代码结构

  • README.md:项目说明文档
  • boot.py:启动脚本
  • config.py:配置参数(如WiFi等)
  • doubao_chat.py:核心聊天功能模块
  • main_ai.py:主程序入口(连接WiFi,启动聊天)
  • mix_display.py:gc9a01显示相关代码
  • tft_config.py:TFT 屏配置
  • inconsolata_16.py、proverbs_20.py:中英文字体/数据相关
  • aiohttp/:第三方库目录(aiohttp相关,websocket模块)
  • micropython固件/:esp32s3Supermini固件
  • 1.png、2.png、3.png、4.jpg、ezgif-257beaf8d11884.gif、db025aaab6f59258f7ebf01e7ddf62ab.mp4:图片和演示文件

应用场景

本系统适用于多种场景:

  1. 智能家居控制:自定义设备控制指令
  2. 便携助手:随身携带的语音交互设备
  3. 教育机器人:儿童知识问答与学习
  4. 陪护助手:提供情感抚慰和各种情绪价值

硬件成本

Esp32s3SuperMini开发板        x1(20元)

max98357音频模块                  x1(5元)

inmp441麦克风模块                 x1(5元)

8R/3W喇叭                               x1(3元)

线材                                          x1(2元)

gc9a01显示屏                           x1 (13元)

合计                                          48元(不含外壳等其它配件)

运行截图及视频

总结

本项目成功将ESP32-S3的计算能力与豆包AI的语言理解能力相结合,构建了一个功能完善、响应迅速的语音智能助手。该方案为资源受限的嵌入式设备开发复杂AI应用提供了实践参考。未来我们将持续优化系统性能,拓展应用场景,为用户带来更智能的语音交互体验。
源码地址:

github:
​​​​​​zhou19830318/doubao_ai_agent_esp32: 基于micropython的esp32s3+豆包语音智能体实时语音对话智能助手