百元以内,用 ESP32-C3 从零搭一台会说话会走路的机器狗
【免费下载链接】xiaozhi-esp32An MCP-based chatbot | 一个基于MCP的聊天机器人项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32
你不需要一块专用音频板,也不需要任何带音频芯片的开发套件。拾音靠 ESP32-C3 内置的 ADC,发声靠 PDM 直推小喇叭,两块"零成本"的外设就把语音链路搭起来了。这套方案出自小智固件仓库里的 ESP-Hi 机器狗(main/boards/espressif/esp-hi/),整台机器狗 BOM 压在百元以内,能唤醒、能对话、能走能跳,表情还能在 0.96 寸彩屏上动。
硬件清单与选型思路
| 模块 | 型号 | 数量 | 用途 | 大致价位 |
|---|---|---|---|---|
| 主控 | ESP32-C3 模块 | 1 | RISC-V 主控,跑唤醒+音频+舵机 | 约 15 元 |
| 舵机 | 标准 5V 舵机(SG90 级别) | 4 | 四条腿的步态驱动 | 约 30 元 |
| 屏幕 | 0.96 寸 SPI 彩屏(ILI9341) | 1 | 表情动画显示 | 约 10 元 |
| 拾音 | 普通驻极体麦克风(接 ADC) | 1 | 语音采集 | 约 2 元 |
| 发声 | PDM 小喇叭 | 1 | 语音播报 | 约 3 元 |
| 状态灯 | WS2812 灯珠 | 4 | 状态指示 | 约 2 元 |
| 电源 | 锂电池 + 升降压模块 | 1 套 | 整机供电 | 约 10 元 |
选型逻辑就一条:能复用芯片内置外设的就不外加器件。音频走 ADC+PDM 后,硬件成本比传统专用音频方案降了约 80%;屏幕 SPI 直驱省掉驱动 IC,整机显示链路成本降约 75%;舵机用标准 PWM 控制,运动控制部分比专用驱动电路省约 70%。
环境与代码获取
需要:ESP-IDF 开发环境(含 Python 3)、一个 USB 转串口工具(或 USB 直连)、一台能连 Wi-Fi 的路由器。
git clone https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32 cd xiaozhi-esp32 python ./scripts/build.py espressif/esp-hi idf.py flashESP-Hi 涉及较多 sdkconfig 选项,所以仓库板级 README 建议直接用上面的编译脚本,它会自动带上 main/boards/espressif/esp-hi/config.json 里的配置。
组装与点亮
按从核心到外围的顺序来,出问题也好定位。
- 核心板:把 ESP32-C3 固定在头部结构件上,先不接身体,单独给头通电,确认 USB 能识别、串口有日志。
- 电源:电池加升降压模块给整机供电,注意舵机动作瞬间电流较大,供电不稳会先表现为复位。
- 拾音与发声:麦克风接 ADC 引脚,PDM 喇叭接 I2S PDM 通道,对着喊唤醒词验证拾音。
- 舵机:四路 PWM 依次接入,先逐个打角度做初始校准,再上步态程序。
- 屏幕:0.96 寸屏走 SPI 接到 C3 的 SPI 口,点亮后表情动画会随对话状态切换。
头身之间用排线连接。接线关系可以参考下面的原理图,重点是确认 USB 口在舵机使能后的去向(见下文故障一节)。
几个关键模块怎么实现的
音频:软件定义的低成本方案。采集端不用 I2S 麦克风,直接用 ESP32-C3 的 ADC(12bit 量化、单通道连续采集)读麦克风;发声端把 I2S 配成 PDM TX 模式,SINC 滤波器过采样后驱动喇叭。编解码全部在软件里做,代价是内存占用被优化过——唤醒词检测、外设驱动和这套音频链路要在 C3 的小 RAM 里同时跑,这是这套方案里最吃调优的地方。对应实现在 main/boards/espressif/esp-hi/adc_pdm_audio_codec.cc。
运动:四路 PWM 按相位差排表。所谓步态就是四路舵机角度的时间序列:两条腿交替,每步一个角度增量,循环推进即可。
// 前进:对角腿交替,伪代码示意 void dog_walk_forward() { for (int t = 0; t < steps; t++) { set_servo_sequence(walk_pattern[t]); // 四路角度 delay(step_interval); // 步频 } }动作库由 servo_dog_ctrl 组件管理,仓库 README 里提到已实现数十种动作,连上了同一个 Wi-Fi 的手机访问http://esp-hi.local/还能通过内置 WebUI 遥控身体。
显示:SPI 直驱 ILI9341。屏是标准 SPI 接口,初始化序列就是 esp-hi 源码里那张vendor_specific_init命令表(0x11 唤醒、0xB1~0xC5 设伽马、0x29 点亮)。表情显示复用通用的 anim/EmojiWidget,不需要任何显示专用芯片,整条链路比"驱动 IC+TFT"的方案便宜且省口。
高频故障排查
- 舵机使能后无法烧录/看日志→ 舵机信号占用了 USB Type-C 口,电脑识别不到板子 → 断电后只留头部不接身体,按住板上按钮再插电脑进入烧录模式;烧完重新上电。
- 想看串口日志又不想丢舵机→ 默认 console 走 USB Serial/JTAG 与舵机互斥 → 在 menuconfig 的 ESP System Settings 里切换 console 通道(两者只能二选一,README 已注明)。
- 上电就复位或随机重启→ 舵机动作瞬间拉低供电 → 电池容量或升压功率不足,换更大电池或加储能电容。
- 拾音底噪大/唤醒率低→ ADC 增益与量化位数配置(默认 12bit、12dB 衰减)与麦克风位置有关 → 检查 mic 走线长度,缩短到主控 1cm 以内效果差异明显。
- Wi-Fi 频繁掉线后设备无响应→ 断线重连参数未配 → 在 sdkconfig 里调连接重试参数,仓库自带重连机制,别自己裸重连。
还能怎么玩
- 传感器扩展:接温湿度、光线、距离模块,把读数挂到 MCP 工具上,让"机器狗"能回答环境问题。
- 云端 AI:固件本身就是 MCP-based 的,接上大模型后端即可加知识检索和更自然的对话。
- 新动作:往 servo_dog_ctrl 的动作表里加序列,用 WebUI 或语音命令触发。
仓库还带了音频工具链,本地播报音效可以批量转 P3 格式再打进固件,界面和用法在 scripts/p3_tools/ 的 README 里。
你现在手里应该有:一台能唤醒、能对话、能做出数十种动作、百元以内造出来的 ESP32 机器狗,以及一套可复用的 ADC+PDM 音频链路代码。下一步最自然的是加传感器或改步态参数——这两处都不用动音频链路,改完重刷固件就能看到效果。
资源入口
git clone https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32- 板级说明与 WebUI 用法:main/boards/espressif/esp-hi/README.md
- 板级默认配置:main/boards/espressif/esp-hi/config.json
- MCP 协议与用法:docs/mcp-protocol_zh.md、docs/mcp-usage_zh.md
- 自定义开发板指南:docs/custom-board_zh.md
- 音频转换工具:scripts/p3_tools/
【免费下载链接】xiaozhi-esp32An MCP-based chatbot | 一个基于MCP的聊天机器人项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考