首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >从零做一只会说话的机器鸭(一)

从零做一只会说话的机器鸭(一)

原创
作者头像
用户12830917
发布于 2026-10-20 14:45:05
发布于 2026-10-20 14:45:05
920
举报

硬件选型与开发环境踩坑实录

一个零基础、预算约 400 元的 8 周项目。 这是第一篇,只写已经真实做完的部分:怎么选硬件、怎么把开发环境搭起来, 以及那个卡了我三次、网上教程几乎没讲清楚的报错。 下一篇(结构组装 + 语音对话跑通)等板子到货后继续。


一、要做的是什么

最终成品:一只巴掌大的鸭子立在桌上,喊它名字,它转头看你、扇两下翅膀、用鸭子的语气回答你。眼睛是一块小屏幕,会眨眼。

听起来很难,因为语音对话链路(唤醒 → 录音 → 语音识别 → 大模型 → 语音合成 → 播放)本来是件挺复杂的事。

好消息是:这条链路已经有人做好了,我只需要把它跑起来。

环节

谁来做

唤醒词识别

ESP32 本地(离线,不依赖网络)

录音与音频采集

现成固件 + I2S 数字麦克风

语音转文字 / 大模型 / 语音合成

云端(DeepSeek、通义千问等)

所以这个项目的真实难度,比大多数人以为的低。前提是选对硬件。


二、核心策略:先借后造

一开始我的计划是"从零造一个"——自己写语音链路、自己设计结构。调研后改成:

层次

做法

时间占比

借

直接用小智 AI 固件跑通对话,参考开源结构做外壳

约 60%

改

改人设提示词、改动作序列、改外观

约 30%

造

只在现有方案搞不定时才自己写

约 10%

零基础做项目,知道什么时候该"绕过去",比硬啃更重要。


三、四个选型决策

3.1 主控:唯一不能让步的一条

这是整个项目里唯一不能妥协的规格。

能买

别买(会出什么问题)

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 不足,直接退货。 这是唯一一条我建议"收到就退"的硬指标。

排针必须已焊接

我纠结过这个问题,结论没有悬念:

  • 零基础没有焊台,44 个脚、间距 2.54 mm,极易虚焊、连锡,焊坏就是板子报废
  • 已焊接版通常只贵 3–5 元

商品页有个容易踩的坑——「不焊接」有两个完全不同的东西:

商品页写法

实际是什么

买吗

已焊接 / 焊好排针 / 带排针

排针已焊在板上,到手即用

✅

未焊接 / 散件 / 需自焊

板子 + 排针都给你,排针要自己焊

❌

裸模组 / 核心板(无底板)

只有那颗模组,要 SMT 焊到自制 PCB

❌❌

第三种是给产品化设计用的,有些商家标成「未焊版」,价格便宜,看着像同一个东西,其实完全不是一回事。下单前问客服一句:是焊好排针的成品板吗?不是裸模组吧?

一个容易被忽略的坑:WiFi 信号

有人实测对比过同一位置的两块 ESP32-S3 板:-54 dBm vs -77 dBm,差了 23 dBm。

而这个项目 100% 依赖 WiFi 联网对话,信号差会表现成配网失败、频繁掉线——而且你前期一定会以为是代码问题。

那些"为能插面包板而压缩天线面积"的窄版要特别小心。 收货当天连上 WiFi 测信号,低于 -70 dBm 就退。

板子要不要插面包板?不建议

板子 70 × 28 mm,插进 830 孔面包板会横跨大半宽度,两侧就没地方插麦克风、功放、OLED 了。

正确做法:板子放在面包板旁边,用母对母杜邦线把 GPIO 引过去,面包板空间全部留给外设。


3.2 舵机:9g 还是 14g?

这个我纠结了很久,结论很有意思:它们本来就是同一款。

标注

实际含义

"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 秒确认法:

  • 称重:13–14 g = 金属齿 MG90S(对);9 g = 塑料齿 SG90(错)
  • 看齿轮颜色:从外壳缝隙看,银色/铜色 = 金属齿,白色 = 塑料齿

量尺寸没用:SG90 是 23 × 12.2 × 29 mm,和 MG90S 只差 0.2–0.5 mm,普通尺子量不出来。


3.3 音频:为什么必须是"数字"麦克风和功放

这两颗是数字器件,走 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 Ω)

常见的买错:

  • 麦克风买成 MAX9814 / MAX4466 — 这是模拟麦克风,接法完全不同
  • 功放买成 PAM8403 / MAX9744 — 模拟输入,ESP32 没有 DAC 输出,推不动

⚠️ INMP441 的 VDD 和 GND 反接会直接烧坏,这颗芯片很脆弱。 另外一定要买已焊排针的版本——它的焊盘极小,没焊台根本焊不了。

喇叭选 8Ω 2–3W 腔体喇叭(带共鸣腔,音质明显好于裸喇叭)。桌面玩具 8Ω 的 1.4 W 完全够用,而且电流小、供电压力低。


3.4 屏幕:分两步,别一上来就上圆形屏

原计划直接上圆形 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(外观一样但驱动不同,要换库)。


四、采购清单

第一批:核心(约 140–165 元)

#

物品

关键参数

数量

参考价

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

第二批:语音与表情(约 80 元)

#

物品

关键参数

数量

参考价

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 上,它一停你就被卡住,而这类创客套件生命周期通常很短。 分开买的好处:任何一家断货随时换、缺哪样补哪样,合计反而更便宜。


五、环境搭建

5.1 装 Arduino IDE 并汉化

装 Arduino IDE 2.3.10(2026-06 发布,约 151 MB)。

双版本 2.3.10 原生支持简体中文,不需要第三方汉化补丁——这点很重要,网上那些"绿色汉化版"是解包改了 app.asar 的魔改包,实测约 87% 概率启动报错,自动更新一覆盖就失效。

汉化两种方式,任选:

方式一(推荐,GUI):文件 → 首选项 → Language 下拉选「中文(简体)」→ 点 OK → 重启

方式二(配置文件):编辑 %USERPROFILE%\.arduinoIDE\settings.json

代码语言:javascript
复制
{
  "arduino.language": "zh-CN",
  "editor.preferredLanguage": "zh-CN"
}

⚠️ 必须完全退出 IDE 再启动,仅点关闭窗口不够。 我第一次改完配置只关了窗口,重开后菜单还是英文,一度以为方法不对; 彻底退出进程再启动,中文就出来了。

5.2 ESP32 支持包:卡了我三次的报错

这是全文最值得看的部分,因为网上教程基本没讲清楚。

先说结论:别直接点安装。

现象

配好国内镜像后,安装依然失败:

代码语言:javascript
复制
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

正确做法
  1. 附加开发板管理器网址填: https://arduino.me/packages/esp32.json
  2. 在版本下拉框里明确选 3.2.1-cn,不要选最上面那个

装完验证:

代码语言:javascript
复制
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

通用排查顺序

代码语言:javascript
复制
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 删除。

目录
  • 硬件选型与开发环境踩坑实录
    • 一、要做的是什么
    • 二、核心策略:先借后造
    • 三、四个选型决策
      • 3.1 主控:唯一不能让步的一条
      • 3.2 舵机:9g 还是 14g?
      • 3.3 音频:为什么必须是"数字"麦克风和功放
      • 3.4 屏幕:分两步,别一上来就上圆形屏
    • 四、采购清单
      • 第一批:核心(约 140–165 元)
      • 第二批:语音与表情(约 80 元)
      • 预算
    • 五、环境搭建
      • 5.1 装 Arduino IDE 并汉化
      • 5.2 ESP32 支持包:卡了我三次的报错
    • 六、踩坑清单
      • 环境
      • 硬件
      • 通用排查顺序
    • 七、下一步
    • 八、这次的三条经验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档