一个零基础、预算约 400 元的 8 周项目。 这是第一篇,只写已经真实做完的部分:怎么选硬件、怎么把开发环境搭起来, 以及那个卡了我三次、网上教程几乎没讲清楚的报错。 下一篇(结构组装 + 语音对话跑通)等板子到货后继续。
最终成品:一只巴掌大的鸭子立在桌上,喊它名字,它转头看你、扇两下翅膀、用鸭子的语气回答你。眼睛是一块小屏幕,会眨眼。
听起来很难,因为语音对话链路(唤醒 → 录音 → 语音识别 → 大模型 → 语音合成 → 播放)本来是件挺复杂的事。
好消息是:这条链路已经有人做好了,我只需要把它跑起来。
环节 | 谁来做 |
|---|---|
唤醒词识别 | ESP32 本地(离线,不依赖网络) |
录音与音频采集 | 现成固件 + I2S 数字麦克风 |
语音转文字 / 大模型 / 语音合成 | 云端(DeepSeek、通义千问等) |
所以这个项目的真实难度,比大多数人以为的低。前提是选对硬件。
一开始我的计划是"从零造一个"——自己写语音链路、自己设计结构。调研后改成:
层次 | 做法 | 时间占比 |
|---|---|---|
借 | 直接用小智 AI 固件跑通对话,参考开源结构做外壳 | 约 60% |
改 | 改人设提示词、改动作序列、改外观 | 约 30% |
造 | 只在现有方案搞不定时才自己写 | 约 10% |
零基础做项目,知道什么时候该"绕过去",比硬啃更重要。
这是整个项目里唯一不能妥协的规格。
能买 | 别买(会出什么问题) |
|---|---|
ESP32-S3-DevKitC-1 N16R8 ★首选 | 普通 ESP32(无 PSRAM,音频必卡) |
立创·实战派 ESP32-S3 | ESP32-C3(资源过低) |
乐鑫 ESP32-S3-BOX3 | ESP8266 |
微雪 ESP32-S3-AUDIO-Board | Arduino Uno/Nano(无 WiFi) |
关键参数:
参数 | 规格 |
|---|---|
模组丝印 | ESP32-S3-WROOM-1-N16R8 |
Flash / PSRAM | 16 MB / 8 MB(OPI) |
引脚 | 44 个(两侧各 22 针) |
无线 | WiFi 仅 2.4 GHz + 蓝牙 5 LE |
板子尺寸 | 约 70 × 28 mm |
排针 | 必须买「已焊接排针」版 |
买错的症状:无声、收音底噪大、音频卡顿、频繁重启。
⚠️ N8R2 / N8R8 / 任何不带 R 的,都是没有 PSRAM 或 PSRAM 不足,直接退货。 这是唯一一条我建议"收到就退"的硬指标。
我纠结过这个问题,结论没有悬念:
商品页有个容易踩的坑——「不焊接」有两个完全不同的东西:
商品页写法 | 实际是什么 | 买吗 |
|---|---|---|
已焊接 / 焊好排针 / 带排针 | 排针已焊在板上,到手即用 | ✅ |
未焊接 / 散件 / 需自焊 | 板子 + 排针都给你,排针要自己焊 | ❌ |
裸模组 / 核心板(无底板) | 只有那颗模组,要 SMT 焊到自制 PCB | ❌❌ |
第三种是给产品化设计用的,有些商家标成「未焊版」,价格便宜,看着像同一个东西,其实完全不是一回事。下单前问客服一句:是焊好排针的成品板吗?不是裸模组吧?
有人实测对比过同一位置的两块 ESP32-S3 板:-54 dBm vs -77 dBm,差了 23 dBm。
而这个项目 100% 依赖 WiFi 联网对话,信号差会表现成配网失败、频繁掉线——而且你前期一定会以为是代码问题。
那些"为能插面包板而压缩天线面积"的窄版要特别小心。 收货当天连上 WiFi 测信号,低于 -70 dBm 就退。
板子 70 × 28 mm,插进 830 孔面包板会横跨大半宽度,两侧就没地方插麦克风、功放、OLED 了。
正确做法:板子放在面包板旁边,用母对母杜邦线把 GPIO 引过去,面包板空间全部留给外设。
这个我纠结了很久,结论很有意思:它们本来就是同一款。
标注 | 实际含义 |
|---|---|
"9g" | 沿用 SG90 时代的尺寸级别叫法("9g 级微型舵机"),不是精确重量 |
"14g" | 实测重量(金属齿比塑料齿重,实测 13.4–13.6 g) |
查了多家供应商规格书,标 14g 的那些尺寸写的全是 22.8 × 12.2 × 28.5 mm,扭矩 1.8–2.2 kg·cm,电压 4.8–6 V——和标 9g 的一字不差。
反过来想:14 g 反而说明它是真金属齿。塑料齿的 SG90 做不出这个重量。
真正要防的是买成 SG90——SG90 才是真约 9 g,而且是塑料齿,摔几次就扫齿(表现为抖动、无力、异响)。
收货 10 秒确认法:
量尺寸没用:SG90 是 23 × 12.2 × 29 mm,和 MG90S 只差 0.2–0.5 mm,普通尺子量不出来。
这两颗是数字器件,走 I2S 总线,ESP32-S3 原生支持,不需要额外的 ADC/DAC。
模块 | 关键参数 |
|---|---|
INMP441 麦克风 | 全向 MEMS 数字麦,I2S 24-bit,1.8–3.3 V(绝不能接 5 V),信噪比 61 dBA,6 针,L/R 脚不能悬空 |
MAX98357A 功放 | 单声道 D 类,内置 DAC,I2S 输入,2.5–5.5 V,3.2 W(4 Ω)/ 约 1.4 W(8 Ω) |
常见的买错:
⚠️ INMP441 的 VDD 和 GND 反接会直接烧坏,这颗芯片很脆弱。 另外一定要买已焊排针的版本——它的焊盘极小,没焊台根本焊不了。
喇叭选 8Ω 2–3W 腔体喇叭(带共鸣腔,音质明显好于裸喇叭)。桌面玩具 8Ω 的 1.4 W 完全够用,而且电流小、供电压力低。
原计划直接上圆形 LCD 做眼睛,后来改成:先 OLED(7 元)→ 后面再升级圆形 LCD(40 元)。
原因:OLED(SSD1306)是现成固件原生支持的,能直接跑通;圆形 LCD(GC9A01)要自己写 TFT_eSPI 驱动配置,这是新手最容易卡的一步。
一上来就上 LCD,很容易卡死在屏幕驱动上—— 而"听到它第一次说话"是关键节点,不该被屏幕拖住。
OLED 参数:0.96 寸 / 128×64 / SSD1306 / I2C 四针 / 地址 0x3C。
买的时候直接问客服:「是 SSD1306 驱动的 I2C 四针版吗?」——避开 7 针 SPI 版和 SH1106(外观一样但驱动不同,要换库)。
# | 物品 | 关键参数 | 数量 | 参考价 |
|---|---|---|---|---|
1 | ESP32-S3-DevKitC-1 N16R8 | 44 引脚、已焊排针、乐鑫原装模组 | 1 | ~40 |
2 | MG90S 舵机 | 金属齿,22.8×12.2×28.5 mm,M2 螺丝 | 4 | ~56 |
3 | 面包板 830 孔 | 中间横向连通,两侧电源轨 | 1 | ~6 |
4 | 杜邦线 | 公公/公母/母母 各 20 根 | 1 套 | ~7 |
5 | Type-C 数据线 | 必须能传数据(插电脑出 COM 口) | 1 | ~5 |
6 | 5mm LED + 220Ω 电阻 | 电阻色环红红棕金 | 1 包 | ~5 |
7 | 5V 2A 以上电源 | 4 个舵机建议 3A | 1 | ~15 |
# | 物品 | 关键参数 | 数量 | 参考价 |
|---|---|---|---|---|
8 | INMP441 麦克风 | I2S,6 针,带排针 | 1 | ~6 |
9 | MAX98357A 功放 | I2S,7 针,内置 DAC | 1 | ~6 |
10 | 喇叭 | 8Ω 2–3W 腔体喇叭 | 1 | ~5 |
11 | OLED 0.96 寸 | SSD1306 + I2C 四针 | 1 | ~7 |
12 | 18650 电池 + 降压模块 | 电池必须带保护板;降压选 MP1584(≥3A) | 1 | ~50 |
档位 | 预算 | 效果 |
|---|---|---|
最小可跑通 | 约 245 元 | 会说话 + 会动 |
入门成品 | 约 320–440 元 | 加外壳和圆形屏 |
建议分开买,不要买"一站式套件"。 我最初看中过一款专为这个项目做的面包板套件,后来它停产了。 把整套方案押在一个 SKU 上,它一停你就被卡住,而这类创客套件生命周期通常很短。 分开买的好处:任何一家断货随时换、缺哪样补哪样,合计反而更便宜。
装 Arduino IDE 2.3.10(2026-06 发布,约 151 MB)。
双版本 2.3.10 原生支持简体中文,不需要第三方汉化补丁——这点很重要,网上那些"绿色汉化版"是解包改了 app.asar 的魔改包,实测约 87% 概率启动报错,自动更新一覆盖就失效。
汉化两种方式,任选:
方式一(推荐,GUI):文件 → 首选项 → Language 下拉选「中文(简体)」→ 点 OK → 重启
方式二(配置文件):编辑 %USERPROFILE%\.arduinoIDE\settings.json
{
"arduino.language": "zh-CN",
"editor.preferredLanguage": "zh-CN"
}⚠️ 必须完全退出 IDE 再启动,仅点关闭窗口不够。 我第一次改完配置只关了窗口,重开后菜单还是英文,一度以为方法不对; 彻底退出进程再启动,中文就出来了。
这是全文最值得看的部分,因为网上教程基本没讲清楚。
先说结论:别直接点安装。
配好国内镜像后,安装依然失败:
esp32:esp-rv32@2601 Download failed: performing HEAD request:
Head "https://github.com/espressif/crosstool-NG/releases/download/...
read tcp ...: wsarecv: An existing connection was forcibly closed我换了镜像、清过缓存,还是同一个错。
镜像只把「索引」搬到了国内,「包体」仍在 GitHub。
更隐蔽的一点:就算换对了镜像,直接点"安装"会去装最新的 3.3.12,而 3.3.12 依赖的工具链指向 GitHub;这个镜像里只有带 -cn 后缀的版本才是全套走乐鑫国内 CDN(dl.espressif.cn)。
现象 | 真正的原因 |
|---|---|
填了国内镜像仍报 GitHub 下载失败 | 镜像只解决索引,包体仍从 GitHub 拉 |
换了镜像还是失败 | 最新版 3.3.12 的依赖指向 GitHub;只有 -cn 版本是全国内 CDN |
3.2.1-cn,不要选最上面那个装完验证:
Board name: ESP32S3 Dev Module
FQBN: esp32:esp32:esp32s3
Board version: 3.2.1-cn
PSRAM 选项: Disabled / QSPI PSRAM / OPI PSRAM ← 必须选 OPI⚠️ 装好后 IDE 可能提示"可更新到 3.3.12"。别点升级——升级会重新去 GitHub 拉工具链,又得卡死。 3.2.1 完全支持 ESP32-S3,不影响后续所有实验。 顺带排掉一个错误选项:国内另一个常见镜像
jihulab.com/.../package_esp32_index_cn.json是同样的问题(乐鑫自己的镜像,也只镜像索引)。别绕回去。
症状 | 原因 / 解决 |
|---|---|
ESP32 包下载失败 | 见 5.2——选 3.2.1-cn,别选最新版 |
汉化不生效 | 要完全退出进程再启动,仅关窗口不够 |
设备管理器没有 COM 口 | 换数据线(纯充电线不行);装 CH340/CP210x 驱动 |
症状 | 原因 / 解决 |
|---|---|
舵机不动 | 没接 5V 电源;或 GND 没共地 |
舵机抖动、吱吱响 | 供电不足,必须独立供电 |
舵机乱转、完全不受控 | 三地没共地(舵机电源地、主控地、信号地) |
一直重启 | PSRAM 没开启,或供电不足 |
按键读数乱跳 | 用 pinMode(pin, INPUT_PULLUP) |
WiFi 连不上 | ESP32 只支持 2.4 GHz;别用中文 SSID |
1. 供电够吗? → 舵机独立供电了吗?三地共地了吗?
2. 线接对了吗? → 对照引脚表一根一根数,别凭记忆
3. 线松了吗? → 杜邦线接触不良极常见,重新插一遍
4. 代码引脚改了吗? → 改了接线就要改代码,两边必须一致
5. 模块坏了吗? → 换一个试试
6. 拆到最小单元 → 只留一个模块,看它能不能工作第 6 条最有效。 问题常出在"多个模块互相干扰",拆到最小逐一验证是最快的定位方法。
硬件已经下单(发往新疆,路上要几天)。到货后按这个顺序推进:
阶段 | 内容 |
|---|---|
第 1 周 | 环境与第一个程序:点亮 LED、按键、PWM 呼吸灯 |
第 2 周 | 舵机:4 个舵机协同、动作库 |
第 3 周 | 烧入现成语音固件,跑通第一次对话 |
第 4 周起 | 纸板结构组装、表情屏幕、语音控制动作 |
下一篇会写纸板原型的具体尺寸和组装过程(含实物照片),以及跑通对话时又踩了哪些坑。
1. 先借后造,别从零开始。 最难的部分通常已经有人做好了。判断"什么时候该绕过去",比硬啃重要得多。
2. 唯一不能让步的规格,写死在清单里。 主控必须 N16R8 + PSRAM——这属于"买错了整个项目就做不成"的级别。其他都可以将就,这个不行。
3. 选经过验证的组合,而不是理论上最新的那个。 这次两个坑(ESP32 包、舵机型号混淆)本质上是同一个错误:想用"最新/最标准"的,而忽略了实际可用性。3.3.12 是最新,但装不上;能用的是 3.2.1-cn。
本文所有参数均来自实际采购与实测。如遇镜像失效或型号更新,以官方最新文档为准,欢迎指正。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。