IoT-For-Beginners 实战:Raspberry Pi 麦克风与扬声器配置完整指南(基于 ALSA 与 ReSpeaker)
2026/9/15 18:01:08 网站建设 项目流程

IoT-For-Beginners 实战:Raspberry Pi 麦克风与扬声器配置完整指南(基于 ALSA 与 ReSpeaker)

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

本篇技术指南以 IoT-For-Beginners 项目第 6 个项目(消费类 IoT 语音识别)中的 Raspberry Pi 硬件配置章节为核心,讲解如何为树莓派外接并配置麦克风与扬声器,使其具备音频采集与回放能力。读者学完本篇后,将掌握arecordaplay、ALSA 默认声卡配置以及alsamixer调音工具的使用方法,为后续的语音采集、语音转文字(Speech to Text)实验打下硬件基础。

硬件需求:Pi 没有内置麦克风

Raspberry Pi 板载没有麦克风,因此必须外接一个录音设备。可供选择的方案包括:

  • USB 麦克风:即插即用,是成本最低、最稳妥的方案;
  • USB 耳机:麦克风与耳机一体,兼顾录音与回放;
  • USB 一体式会议通话设备(all in one speakerphone):通常内置麦克风阵列与扬声器;
  • USB 音频适配器 + 3.5mm 麦克风:通过适配器将模拟麦克风接入 USB;
  • ReSpeaker 2-Mics Pi HAT:Seeed 出品的树莓派扩展板,板载双麦克风(详见 ReSpeaker 2-Mics Pi HAT 产品页)。

💁 注意:Raspberry Pi 对 Bluetooth 麦克风的支持并不完整。如果你使用蓝牙麦克风或蓝牙耳机,可能会在配对或音频采集环节遇到问题,建议优先使用 USB 方案。

输出设备方面,Raspberry Pi 自带 3.5mm 耳机插孔,可连接耳机、耳麦或外置音箱;也可以通过以下方式扩展音频输出:

  • HDMI 音频:经由显示器或电视输出;
  • USB 扬声器
  • USB 耳机
  • USB 一体式会议通话设备
  • ReSpeaker 2-Mics Pi HAT:在其 3.5mm 插孔或 JST 端口上外接扬声器。

在本项目的后续课程中,Pi 需要一块 Grove 按钮来控制录音(详见 pi-audio.md),而 ReSpeaker HAT 板载了一个按钮,因此使用该 HAT 时不再需要 Grove Base Hat 底板。

连接并配置麦克风

检查录音设备:arecord -l

将麦克风通过合适的方式接入 Pi(例如插入 USB 端口)后,在 Pi 终端(或通过 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

如果只接了一个麦克风,列表中应只有一条记录。Linux 下多麦克风配置较复杂,因此建议只保留一个麦克风,拔掉其余设备,降低配置难度。

请务必记下声卡编号(card number),后续代码中会用到。以上例而言,card 1表示该 USB 麦克风的声卡编号为1

使用 ReSpeaker 2-Mics Pi HAT

如果选用 ReSpeaker 2-Mics Pi HAT:

  1. 取下 Grove Base Hat 底板,将 ReSpeaker HAT 安装到原位置:

  1. 安装完成后需要安装驱动,请参考 Seeed 官方《ReSpeaker 2-Mics Pi HAT 入门指南》中的驱动安装说明。

⚠️ 官方驱动说明使用git克隆仓库。若 Pi 上尚未安装git,先执行:

sudo apt install git --yes

连接并配置扬声器

检查回放设备:aplay -l

连接扬声器后,执行以下命令查看所有可用的回放(PLAYBACK)硬件设备

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 Subdevice #1: subdevice #1 Subdevice #2: subdevice #2 Subdevice #3: subdevice #3 Subdevice #4: subdevice #4 Subdevice #5: subdevice #5 Subdevice #6: subdevice #6 Subdevice #7: subdevice #7 card 1: M0 [eMeet M0], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0

card 0: Headphones对应的是板载 3.5mm 耳机插孔,总是会出现;额外添加的 USB 扬声器等设备会作为独立条目列出。

设置默认输出声卡:编辑/usr/share/alsa/alsa.conf

如果你使用的是额外的扬声器(而非插在板载耳机孔上的耳机/音箱),需要将其设为系统默认输出设备:

sudo nano /usr/share/alsa/alsa.conf

该命令会用nano终端文本编辑器打开 ALSA 全局配置文件。用键盘方向键滚动,找到如下行:

defaults.pcm.card 0

将其中的0改成aplay -l输出中你希望使用的声卡编号。例如上面输出中第二块声卡为card 1: M0 [eMeet M0], device 0: USB Audio [USB Audio],要使用它就把该行改为:

defaults.pcm.card 1

修改完成后按Ctrl+x保存并退出:按y确认保存,再按Enter确认文件名。之后默认回放将路由到指定声卡。

该配置会全局影响 ALSA 的默认 PCM 回放设备。若后续播放出错,第一排查点就是这里设置的defaults.pcm.card是否与真实声卡编号一致。

测试麦克风与扬声器

录制 5 秒音频

执行以下命令,通过麦克风录制 5 秒 WAV 音频:

arecord --format=S16_LE --duration=5 --rate=16000 --file-type=wav out.wav

参数含义:

参数含义
--format=S16_LE采样格式为 16 位有符号小端整数(PCM)
--duration=5录制 5 秒
--rate=16000采样率 16KHz,足够供语音识别模型使用
--file-type=wav输出 WAV 容器格式

命令运行期间,请对着麦克风发出声音——说话、唱歌、beatbox、弹奏乐器皆可。

回放录音

5 秒后录制自动停止,执行:

aplay --format=S16_LE --rate=16000 out.wav

即可通过扬声器听到刚才的录音,必要时调节扬声器音量。

调节音量与麦克风增益:alsamixer

如果需要调节板载麦克风端口音量或调整麦克风增益,可使用alsamixer交互工具(参见 Linux alsamixer 手册页)。

若回放出现错误,请再次核对alsa.confdefaults.pcm.card是否指向了正确的声卡编号。

与课程代码的衔接:声卡编号与采样率如何影响代码

完成硬件配置后,下一步是编写 Python 录音代码(完整代码见 code-record/pi/smart-timer/app.py)。在 pi-audio.md 的录音程序中,声卡编号直接决定音频流的输入输出设备:

microphone_card_number = <microphone card number> speaker_card_number = <speaker card number>

其中<microphone card number>来自本节arecord -l的输出,<speaker card number>则是你在alsa.conf中设置的同一个编号。采样率也在代码中声明:

rate = 48000 #48KHz

如果运行时出现OSError: [Errno -9997] Invalid sample rate之类的采样率错误,把rate改为4410016000即可——采样率越高音质越好,但对硬件支持要求也越高。

到了语音转文字阶段(完整代码见 code-speech-to-text/pi/smart-timer/app.py),录音缓冲区会以Content-Type: audio/wav; codecs=audio/pcm; samplerate={rate}的请求头发送给云端语音服务,因此本节确定的采样率会直接影响后续识别请求的格式声明,录制与识别两端必须保持一致。整个实验的课程背景、麦克风原理与语音识别概念见 课程 README。

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

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

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

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

立即咨询