IoT-For-Beginners 实战:Wio Terminal 语音硬件配置指南——内置麦克风、ReSpeaker 扬声器扩展与 SD 卡设置
2026/9/16 9:04:50 网站建设 项目流程

IoT-For-Beginners 实战:Wio Terminal 语音硬件配置指南——内置麦克风、ReSpeaker 扬声器扩展与 SD 卡设置

【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners

导读:本文是微软开源课程 IoT-For-Beginners 中《语音识别》一课(6-consumer/lessons/1-speech-recognition)的 Wio Terminal 硬件配置篇。你将掌握如何在 Wio Terminal 上利用内置麦克风采集语音、通过 ReSpeaker 2-Mics Pi Hat 扩展扬声器、完成 GPIO 引脚对接与 SD 卡初始化,并借助仓库内的音频采集源码(DMAC/ADC + 片内 Flash 存储)理解其底层工作原理,为后续"语音转文字"(Speech-to-Text)应用打好硬件基础。

硬件背景:Wio Terminal 的语音输入能力

Wio Terminal 出厂即内置一颗麦克风(mic),这颗麦克风可以直接用于捕获语音,是语音识别项目中最基础、也最容易忽略的输入设备。在课程对应的英文原文档 wio-terminal-microphone.md 中,第一步就是确认这颗内置麦克风的存在——它不需要任何额外接线,即可为后续的音频采集与语音识别提供信号源。

Wio Terminal 内置麦克风的位置与形态可参考仓库图片 images/wio-mic.png。它采集的是模拟信号,后续需经 ADC(模数转换器)转为数字信号,这一点在音频采集实现文档 wio-terminal-audio.md 中有详细说明(下文"源码印证"一节会展开)。

语音输出扩展:ReSpeaker 2-Mics Pi Hat

虽然麦克风是内置的,但 Wio Terminal 自身没有扬声器输出。要完成"语音交互"的闭环(例如让设备朗读识别结果),需要外接音频输出设备。课程的推荐方案是ReSpeaker 2-Mics Pi Hat

  • 这是一块外部扩展板,板载2 颗 MEMS 麦克风(可作语音输入的增强/替代);
  • 提供一个扬声器连接器(JST 端口);
  • 提供一个3.5mm 耳机/音频插孔

扩展板实物可参考仓库图片 images/respeaker.png。

音频输出设备选型

需要额外准备以下任一种音频输出设备:

类型说明
3.5mm 插头扬声器直接插入 ReSpeaker 的 3.5mm 音频插孔
耳机(3.5mm)同样插入 3.5mm 音频插孔
JST 接口扬声器接入 ReSpeaker 的 JST 端口,例如 Seeed 的 Mono Enclosed Speaker(2W、6Ω)

两种接法的实物图可对照 images/respeaker-jst-speaker.png(JST 线连接)与 images/respeaker-35mm-speaker.png(3.5mm 插孔连接)。

连接线材与可选适配板

  • 连接 ReSpeaker 与 Wio Terminal 需要40 根 pin-to-pin(公对公)杜邦跳线
  • 如果你擅长焊接,也可以选用40 Pin Raspberry Pi Hat Adapter Board For Wio Terminal适配板来连接 ReSpeaker,省去逐根跳线的繁琐。

💁 提示:跳线若以排线(ribbon)形式捆扎,连接时不要拆散,保持整体有助于按序对齐引脚。

任务一:连接 ReSpeaker Pi Hat

连接过程要求Wio Terminal 处于关机(断电)状态,通过 Wio Terminal 背面的 GPIO 插槽与 ReSpeaker 的 GPIO 插槽用跳线对接。接线图见 images/wio-respeaker-wiring-0.png。

按以下步骤操作:

  1. 摆放方向:将 ReSpeaker 与 Wio Terminal 的 GPIO 插槽朝上,并置于左手侧。
  2. 连接左侧引脚:从 ReSpeaker GPIO 插槽的左上角开始,用一根 pin-to-pin 跳线将 ReSpeaker 左上插槽与 Wio Terminal 左上插槽相连;随后沿左侧 GPIO 插槽一路向下重复该过程,确保每根引脚都插紧。
    • 参考实物:左侧接线完成后效果见 images/wio-respeaker-wiring-1.png 与 images/wio-respeaker-wiring-2.png。
  3. 连接右侧引脚:对 ReSpeaker 与 Wio Terminal 的右侧 GPIO 插槽重复同样的过程。由于左侧已接好线,右侧跳线需要绕开已连接的线缆走线。
    • 参考实物:右侧接线效果见 images/wio-respeaker-wiring-3.png 与 images/wio-respeaker-wiring-4.png。
  4. 排线处理技巧:若跳线以排线形式捆扎,将其分成两组,分别从已有线缆的两侧绕过(左侧一组、右侧一组)。
  5. 防松脱技巧:可用胶带将一组引脚固定成块,避免在连接其余引脚时个别针脚松动脱出(效果见 images/wio-respeaker-wiring-5.png)。
  6. 连接扬声器
    • JST 线扬声器 → 接入 ReSpeaker 的 JST 端口;
    • 3.5mm 扬声器/耳机 → 插入 3.5mm 音频插孔。

⚠️ 注意:务必在断电状态下完成所有 GPIO 接线,并反复确认 40 根引脚一一对应、插接牢固,避免短路或错位损坏硬件。

任务二:设置 SD 卡

语音识别场景中,Wio Terminal 需要将采集到的音频下载/暂存并回放,因此还需要一张 SD 卡。原文档给出了明确约束:

项目要求
最大容量仅支持 16GB 及以下
文件系统FAT32 或 exFAT

设置步骤:

  1. 将 SD 卡接入电脑(电脑无 SD 卡槽时使用外置读卡器)。
  2. 用电脑上合适的工具将 SD 卡格式化为FAT32 或 exFAT文件系统。
  3. 将 SD 卡插入 Wio Terminal 的 SD 卡槽——卡槽位于机身左侧、电源按钮正下方。插入时需用力推到底直至"咔哒"卡入;必要时可用薄工具或另一张 SD 卡辅助推入。
    • 插入位置示意见 images/wio-sd-card.png。
  4. 取出 SD 卡时,先轻轻向内按压,卡片会自动弹出;同样可借助一字螺丝刀等薄工具或另一张 SD 卡完成。

源码印证:从"接好线"到"采到音"的底层实现

硬件就绪只是第一步。为了让读者理解这些外设为何如此设计(麦克风→ADC→DMA→Flash、SD 卡为何要 FAT32),可以对照本课仓库中的实际代码:

1. PlatformIO 工程配置

仓库内的录音示例工程 code-record/wio-terminal/smart-timer 的 platformio.ini 声明了目标板与 Flash 依赖:

[env:seeed_wio_terminal] platform = atmelsam board = seeed_wio_terminal framework = arduino lib_deps = seeed-studio/Seeed Arduino FS @ 2.1.1 seeed-studio/Seeed Arduino SFUD @ 2.0.2 build_flags = -DSFUD_USING_QSPI
  • board = seeed_wio_terminalframework = arduino明确了这是基于 ATSAMD51 的 Arduino 框架工程;
  • Seeed Arduino FSSeeed Arduino SFUD用于访问片内 Flash;
  • -DSFUD_USING_QSPI启用 QSPI 快速读写模式——这与 wio-terminal-audio.md 中"片内 Flash 可通过 QSPI 以队列方式连续访问、降低处理器占用"的描述相互印证。

2. 为什么音频要写进 Flash 而不是 RAM

音频采集文档 wio-terminal-audio.md 解释了 Wio Terminal 的硬件约束:

  • Wio Terminal 仅有192KB RAM,不足以缓存超过几秒钟的音频;
  • 但它拥有4MB 片内 Flash,因此将采集到的音频写入 Flash 是可行方案;
  • 内置麦克风的模拟信号经ADC转为数字信号,再由DMAC(直接内存访问控制器)按固定间隔(如 16KHz 即每秒 16000 次)采样并写入内存缓冲区,缓冲区满后交由代码处理。DMAC 采用双缓冲区交替机制:写满缓冲区 1 后通知代码处理,同时继续写缓冲区 2,只要处理速度不超过缓冲区填满速度就不会丢数据。

3. 采集参数与工程入口

在 mic.h 对应的config.h设计中,采样参数以宏定义给出:

常量含义
RATE16000采样率,16KHz
SAMPLE_LENGTH_SECONDS4采集时长 4 秒,可调大以录更长时间
SAMPLES64000采样总数 = 采样率 × 秒数
BUFFER_SIZE128044音频缓冲大小:44 字节 WAV 头 + 128000 字节音频数据(每样本 2 字节)
ADC_BUF_LEN1600DMAC 采集缓冲长度

工程入口 main.cpp 展示了完整的录音流程:初始化串口 →sfud_init()初始化 Flash → 启用 QSPI 快速读 → 将C 键(左侧靠近电源开关的按键)配置为INPUT_PULLUP录音触发键 →mic.init()初始化麦克风 → 在loop()中检测按键按下即开始录音,录满 4 秒后调用processAudio()(本阶段为空实现,后续语音转文字章节会填充),随后mic.reset()复位。

pinMode(WIO_KEY_C, INPUT_PULLUP); mic.init(); Serial.println("Ready.");

串口输出预期如下:

Ready. Starting recording... Finished recording

验证与下一步

完成上述硬件接线与 SD 卡设置后,你可以:

  1. 用 PlatformIO 打开 code-record/wio-terminal/smart-timer 工程,编译并烧录到 Wio Terminal;
  2. 打开串口监视器(波特率 9600),看到Ready.后按下 C 键并说话,串口会依次输出Starting recording...Finished recording,表示 4 秒音频已成功采集并写入片内 Flash。

后续课程会在此基础上添加 WiFi 连接与 Azure Speech 服务调用,把这段音频发送到云端完成语音转文字,完整实现见 wio-terminal-speech-to-text.md 与配套工程 code-speech-to-text/wio-terminal/smart-timer(其中包含speech_to_text.hflash_stream.h等基于FlashStream流式上传音频的实现)。至此,Wio Terminal 已经具备了"听得见、说得出、存得下"的完整语音硬件基础。

【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询