IoT-For-Beginners 实战:在 Raspberry Pi 上配置麦克风与扬声器,为语音识别智能定时器铺路
【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners
本篇技术指南基于微软开源课程项目IoT-For-Beginners中"消费者物联网 · 语音识别"一课(课程主页)的 Raspberry Pi 硬件配置环节,系统讲解如何为树莓派连接并配置麦克风与扬声器:包括硬件选型、ALSA 声卡枚举(arecord -l/aplay -l)、默认声卡切换(alsa.conf)以及录制/回放验证。完成本文后,你将能搭建一套可用的树莓派音频输入输出环境,为后续"按下按钮录音 → 语音转文字"的智能厨房定时器项目打好硬件基础。
背景:为什么要给树莓派配麦克风与扬声器
在6-consumer/lessons/1-speech-recognition这一课中,你将构建一个支持语音控制的智能厨房定时器:按下按钮说话,树莓派采集音频,再借助 Azure Speech Service(认知服务)把语音转成文字并打印到控制台。整条链路的第一步,就是让树莓派"能听"(麦克风)与"能说"(扬声器,用于在测试阶段回放验证录音)。
树莓派本身没有内置麦克风,必须外接;但它带有 3.5mm 耳机输出口,可连接耳机、耳麦或音箱。本文档(translations/cs/6-consumer/lessons/1-speech-recognition/pi-microphone.md,英文原版见 6-consumer/lessons/1-speech-recognition/pi-microphone.md)正是该课程中针对"单板计算机(Raspberry Pi)"的硬件配置子章节。
硬件选型:麦克风的五种接法
树莓派没有板载麦克风,需要外接,常见方案有:
- USB 麦克风:即插即用,最常见;
- USB 耳麦:带麦克风的 USB 耳机;
- USB 一体式会议扬声器(speakerphone):同时具备麦克风与扬声器;
- USB 音频适配器 + 3.5mm 接口麦克风:适合手头有传统模拟麦克风的情况;
- ReSpeaker 2-Mics Pi HAT(Seeed 出品):直接以 HAT 形式插在树莓派 GPIO 上,自带双麦克风、一个 Grove 按钮和 3.5mm/JST 音频输出。
💁蓝牙麦克风不推荐:树莓派对蓝牙麦克风支持并不完整,若使用蓝牙麦克风或蓝牙耳麦,可能遇到配对困难或无法录音的问题。
扬声器的五种接法
树莓派自带 3.5mm 耳机输出口,可直接接耳机、耳麦或音箱;此外还可通过以下方式外接扬声器:
- HDMI 音频:通过显示器或电视输出声音;
- USB 音箱;
- USB 耳麦;
- USB 一体式会议扬声器;
- ReSpeaker 2-Mics Pi HAT:将扬声器接到其 3.5mm 接口或 JST 端口。
连接并配置麦克风
第 1 步:物理连接
用合适的方式连接麦克风,例如插入任意一个 USB 口。
第 2 步(可选):使用 ReSpeaker 2-Mics Pi HAT
如果你选用 ReSpeaker HAT,可以取下原来的 Grove Base HAT,换上 ReSpeaker HAT:
本课后续录音需要用到 Grove 按钮,而该 HAT 上已内置一个按钮,因此可以不再需要 Grove Base HAT。装好 HAT 后,还需要按 Seeed 官方入门说明安装驱动。
⚠️ Seeed 的安装说明依赖
git克隆仓库。若你的树莓派未安装 git,可先执行:sudo apt install git --yes
第 3 步:枚举已连接的麦克风
在树莓派本机终端,或通过 VS Code Remote-SSH 连接后的终端中执行:
arecord -l该命令会列出所有可用的录音(Capture)硬件设备,输出形如:
pi@raspberrypi:~ $ arecord -l **** List of CAPTURE Hardware Devices **** card 1: M0 [eMeet M0], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0记下卡片号(card number),后续 Python 录音代码需要用到。以上输出中卡片号为1。
💡 建议只保留一个麦克风:Linux 下多麦克风配置较繁琐,只插一个、拔掉其余是最省事的做法。
连接并配置扬声器
第 1 步:物理连接
用合适的方式连接扬声器(3.5mm 耳机口、USB 或 HDMI)。
第 2 步:枚举已连接的扬声器
执行:
aplay -l输出形如:
pi@raspberrypi:~ $ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: Headphones [bcm2835 Headphones], device 0: bcm2835 Headphones [bcm2835 Headphones] Subdevices: 8/8 Subdevice #0: subdevice #0 ... card 1: M0 [eMeet M0], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0其中card 0: Headphones总是存在,它是树莓派内置的 3.5mm 耳机输出口;若你还接了 USB 音箱等额外设备,它们也会出现在列表中。
第 3 步:把外接扬声器设为默认
如果你使用的是外接扬声器(而非接在内置耳机口上的音箱/耳机),需要把它设为 ALSA 的默认播放设备:
sudo nano /usr/share/alsa/alsa.conf用方向键向下滚动,找到:
defaults.pcm.card 0把0改为上一步aplay -l输出中对应声卡的卡片号。例如输出中有card 1: M0 [eMeet M0], device 0: USB Audio [USB Audio],要使用它则改为:
defaults.pcm.card 1用方向键定位到数字,删除后输入新数字即可。
第 4 步:保存并退出
按Ctrl+x,按y确认保存,再按Enter确认文件名。
这一
defaults.pcm.card值非常重要——课程后续录音代码 code-record/pi/smart-timer/app.py 中的speaker_card_number(扬声器卡片号)就与该配置保持一致;若回放报错,首先检查这里。
测试麦克风与扬声器
录制 5 秒音频
arecord --format=S16_LE --duration=5 --rate=16000 --file-type=wav out.wav命令运行期间对着麦克风说话、唱歌或制造任何声音。参数说明:
| 参数 | 含义 | 本课取值 |
|---|---|---|
--format=S16_LE | 16-bit 小端序 PCM 采样(有符号整数) | S16_LE |
--duration=5 | 录制时长(秒) | 5 |
--rate=16000 | 采样率 16KHz,对语音转文字足够 | 16000 |
--file-type=wav | 输出未压缩 WAV 文件 | wav |
16KHz、16-bit 单声道音频每秒约 32KB(16,000 样本/秒 × 2 字节/样本),这也是语音识别模型常用的输入规格。
回放验证
5 秒后录制自动结束,执行:
aplay --format=S16_LE --rate=16000 out.wav声音应通过扬声器播放出来,必要时调节扬声器音量。
调节音量与增益
如需调节内置麦克风口音量或麦克风增益,可使用alsamixer工具(其用法详见 Linux 的 alsamixer man 手册)。若回放时出现错误,请再次检查alsa.conf中defaults.pcm.card是否指向了正确的卡片。
与项目代码的衔接:从录音到语音转文字
完成本文的硬件配置后,接下来课程会引导你完成两步:
采集音频(pi-audio.md):安装
pyaudio依赖(sudo apt install libportaudio0 libportaudio2 libportaudiocpp0 portaudio19-dev libasound2-plugins --yes,再pip3 install pyaudio),用代码把本文记录到的microphone_card_number/speaker_card_number填入 app.py:microphone_card_number = 1 # arecord -l 查到的卡片号 speaker_card_number = 1 # alsa.conf 中 defaults.pcm.card 的卡片号 rate = 48000 # 采样率;报 Invalid sample rate 时可改 44100 或 16000语音转文字(pi-speech-to-text.md):用
requests先向 Azure Speech Service 获取访问令牌(令牌约 10 分钟过期),再把 WAV 音频缓冲区 POST 到语音识别 REST API,将识别文本打印到控制台。完整实现见 code-speech-to-text/pi/smart-timer/app.py,其中录音回调逻辑与本文配置的采样率rate严格对应(请求头Content-Type中的samplerate={rate})。
由此可见,本文中的arecord -l/aplay -l卡片号、alsa.conf默认声卡设置以及 16KHz 采样率,是整个智能定时器"按下按钮说话 → 云端识别"链路正确运行的地基。
常见问题排查
- 回放报错:优先检查
/usr/share/alsa/alsa.conf中defaults.pcm.card是否与aplay -l输出一致。 OSError: [Errno -9997] Invalid sample rate:运行课程代码时若出现该错误,把rate改为44100或16000。- 创建 PyAudio 实例时的 ALSA 警告:类似
Unknown PCM cards.pcm.front的报错来自树莓派上未连接的音频设备配置,可忽略。 - 蓝牙设备无法录音:换用 USB 或有线方案。
小结
通过本文,你已完成树莓派语音识别的硬件准备:选型并连接麦克风/扬声器、用arecord -l与aplay -l确认声卡、在alsa.conf中指定默认播放设备、并用arecord/aplay完成录制回放自检。这套环境接下来将直接服务于 IoT-For-Beginners 消费者项目中的智能定时器——按下按钮采集语音,交给云端 AI 转为文字,构建一个属于自己的语音交互设备。
【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考