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固件开发环境,主要功能模块包括:
- WebSocket通信:基于aiohttp库实现与豆包API的双向数据交互
- 音频采集:通过I2S接口获取麦克风输入
- 音频播放:通过I2S接口输出语音内容
- 语音活动检测(VAD):本地实时识别用户语音状态
- 消息队列管理:协调系统与服务端的数据交互
- gc9a01模块:用于支持gc9a01显示器进行中、英文、图片显示
- 固件下载地址: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框架实现多任务并发处理:
- 音频采集线程持续监听用户语音
- WebSocket线程处理服务端消息
- 消息队列线程负责数据发送
这种架构确保了系统的高效运行,避免了任务阻塞。
豆包API交互流程
- 建立会话:初始化WebSocket连接
- 采集音频:检测到有效语音后编码传输
- 提交处理:语音段结束后请求响应
- 接收响应:解析并播放返回的音频
关键代码实现:
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的资源限制,采用以下优化策略:
- 主动垃圾回收:在关键节点调用
gc.collect()
- 数据分块处理:将音频数据分段传输
- 资源释放:及时关闭不再使用的I2S设备
- 高效队列管理:使用deque避免内存泄漏
容错设计
系统具备完善的容错机制:
- 自动重连:WebSocket断开后自动恢复
- 异常捕获:全面处理各类运行异常
- 设备重初始化: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:图片和演示文件
应用场景
本系统适用于多种场景:
- 智能家居控制:自定义设备控制指令
- 便携助手:随身携带的语音交互设备
- 教育机器人:儿童知识问答与学习
- 陪护助手:提供情感抚慰和各种情绪价值
硬件成本
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+豆包语音智能体实时语音对话智能助手