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。
按以下步骤操作:
- 摆放方向:将 ReSpeaker 与 Wio Terminal 的 GPIO 插槽朝上,并置于左手侧。
- 连接左侧引脚:从 ReSpeaker GPIO 插槽的左上角开始,用一根 pin-to-pin 跳线将 ReSpeaker 左上插槽与 Wio Terminal 左上插槽相连;随后沿左侧 GPIO 插槽一路向下重复该过程,确保每根引脚都插紧。
- 参考实物:左侧接线完成后效果见 images/wio-respeaker-wiring-1.png 与 images/wio-respeaker-wiring-2.png。
- 连接右侧引脚:对 ReSpeaker 与 Wio Terminal 的右侧 GPIO 插槽重复同样的过程。由于左侧已接好线,右侧跳线需要绕开已连接的线缆走线。
- 参考实物:右侧接线效果见 images/wio-respeaker-wiring-3.png 与 images/wio-respeaker-wiring-4.png。
- 排线处理技巧:若跳线以排线形式捆扎,将其分成两组,分别从已有线缆的两侧绕过(左侧一组、右侧一组)。
- 防松脱技巧:可用胶带将一组引脚固定成块,避免在连接其余引脚时个别针脚松动脱出(效果见 images/wio-respeaker-wiring-5.png)。
- 连接扬声器:
- JST 线扬声器 → 接入 ReSpeaker 的 JST 端口;
- 3.5mm 扬声器/耳机 → 插入 3.5mm 音频插孔。
⚠️ 注意:务必在断电状态下完成所有 GPIO 接线,并反复确认 40 根引脚一一对应、插接牢固,避免短路或错位损坏硬件。
任务二:设置 SD 卡
语音识别场景中,Wio Terminal 需要将采集到的音频下载/暂存并回放,因此还需要一张 SD 卡。原文档给出了明确约束:
| 项目 | 要求 |
|---|---|
| 最大容量 | 仅支持 16GB 及以下 |
| 文件系统 | FAT32 或 exFAT |
设置步骤:
- 将 SD 卡接入电脑(电脑无 SD 卡槽时使用外置读卡器)。
- 用电脑上合适的工具将 SD 卡格式化为FAT32 或 exFAT文件系统。
- 将 SD 卡插入 Wio Terminal 的 SD 卡槽——卡槽位于机身左侧、电源按钮正下方。插入时需用力推到底直至"咔哒"卡入;必要时可用薄工具或另一张 SD 卡辅助推入。
- 插入位置示意见 images/wio-sd-card.png。
- 取出 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_QSPIboard = seeed_wio_terminal与framework = arduino明确了这是基于 ATSAMD51 的 Arduino 框架工程;Seeed Arduino FS与Seeed 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设计中,采样参数以宏定义给出:
| 常量 | 值 | 含义 |
|---|---|---|
RATE | 16000 | 采样率,16KHz |
SAMPLE_LENGTH_SECONDS | 4 | 采集时长 4 秒,可调大以录更长时间 |
SAMPLES | 64000 | 采样总数 = 采样率 × 秒数 |
BUFFER_SIZE | 128044 | 音频缓冲大小:44 字节 WAV 头 + 128000 字节音频数据(每样本 2 字节) |
ADC_BUF_LEN | 1600 | DMAC 采集缓冲长度 |
工程入口 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 卡设置后,你可以:
- 用 PlatformIO 打开 code-record/wio-terminal/smart-timer 工程,编译并烧录到 Wio Terminal;
- 打开串口监视器(波特率 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.h、flash_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),仅供参考