news 2026/9/15 1:52:15

IoT-For-Beginners 实战:在 Raspberry Pi 上配置麦克风与扬声器(语音识别硬件环境搭建指南)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
IoT-For-Beginners 实战:在 Raspberry Pi 上配置麦克风与扬声器(语音识别硬件环境搭建指南)

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》消费者物联网(Consumer IoT)项目"语音识别"课程中的 pi-microphone.md 为核心,系统讲解如何在树莓派(Raspberry Pi)上为智能语音设备(本课中的"智能厨房定时器")搭建音频输入/输出硬件环境。你将掌握麦克风与扬声器的连接方式、基于 ALSA 的声卡枚举与默认设备配置、arecord/aplay录音与回放测试,以及如何将这些声卡编号对接进后续的 PyAudio 采集代码,为"语音转文字"功能铺平道路。

硬件需求:树莓派没有内置麦克风

树莓派主板没有内置麦克风,这是它与手机、笔记本电脑等消费设备最大的不同。要在树莓派上做语音识别,必须外接一个麦克风。课程文档给出的可行方案包括:

  • USB 麦克风:即插即用,最常见的入门选择;
  • USB 耳机(含麦克风的一体式耳机);
  • USB 全向会议扬声器(speakerphone,同时具备麦克风与扬声器);
  • USB 音频适配器 + 3.5mm 接口麦克风:适合手头已有模拟麦克风的场景;
  • ReSpeaker 2-Mics Pi HAT:Seeed 出品的树莓派扩展板,板载双麦克风阵列和一颗 Grove 按钮,是官方推荐搭配。

💁 需要注意:蓝牙麦克风在树莓派上的支持并不完整。如果你的蓝牙麦克风或蓝牙耳机,可能会出现配对失败或无法采集音频的问题,因此课程明确建议优先使用 USB 设备。

扬声器的接入方式

与麦克风不同,树莓派自带 3.5mm 耳机接口(HDMI 音频也原生支持)。你可以通过以下任意一种方式输出声音:

  • 直接插入 3.5mm 耳机/耳麦/有源音箱(内置bcm2835 Headphones声卡);
  • 通过HDMI将音频输出到显示器或电视;
  • USB 音箱USB 耳机
  • USB 全向会议扬声器
  • ReSpeaker 2-Mics Pi HAT上外接扬声器——既可接在板载 3.5mm 插孔,也可接在板载JST 端口上。

背景:为什么采样率与声卡编号如此重要

在动手配置之前,先理解两个贯穿本课的概念,它们直接决定了后面命令参数的选择:

  1. 数字音频与 PCM:麦克风采集到的是连续变化的模拟电信号,必须通过脉冲编码调制(PCM)以固定时间间隔"采样"成离散数值。本课录音命令中的--rate=16000(16KHz)与--format=S16_LE(16-bit 有符号小端整数)就是采样率与采样位深。16KHz/16-bit 是语音识别模型常用的入门配置——1 秒未压缩音频约需16000 × 2 = 32000字节,即 32KB。

  2. 声卡编号(card number):Linux 下 ALSA 为每个音频设备分配card N(从 0 开始)与device M编号。后续所有录音、播放、乃至 Python 代码里的input_device_index/output_device_index,都依赖你手动查到的这个编号。这也是本课配置工作的核心产出之一。

关于麦克风类型(动圈、铝带、电容、MEMS)与数字音频采样原理的完整理论讲解,可参阅本课总览 README.md 的 "Microphones" 与 "Digital audio" 小节。

连接并配置麦克风

步骤一:物理连接

根据你选择的方案,把麦克风插到树莓派的 USB 口或 GPIO 扩展板上。如果使用的是ReSpeaker 2-Mics Pi HAT

  1. 先取下原有的 Grove Base hat(如果之前装过);
  2. 将 ReSpeaker hat 对准 GPIO 40 针排座压装到位,替换 Grove Base hat 的位置。

注意:本课稍后还需要一个 Grove 按钮来控制录音,而ReSpeaker hat 上已经集成了一颗按钮,因此无需再保留 Grove Base hat。

  1. ReSpeaker hat 需要安装驱动才能工作,请参照 Seeed 官方的 Getting Started 说明完成驱动安装。

    ⚠️ 驱动安装过程会用到git克隆仓库。如果树莓派上尚未安装 git,先执行:

    sudo apt install git --yes

步骤二:用arecord -l枚举录音设备

在树莓派本机终端,或通过 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 编号(上面示例中为1),后面配置默认设备、以及编写录音代码时都要用到它。

💡 实操建议:Linux 的声卡配置比较敏感,尽量只保留一个麦克风,把多余的拔掉,可以避免默认设备指向错误导致的各种诡异问题。

连接并配置扬声器

步骤一:物理连接并按需枚举播放设备

接好扬声器后,用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 ... card 1: M0 [eMeet M0], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0

注意:输出中总会存在card 0: Headphones,这是树莓派板载的 3.5mm 耳机插孔。如果你额外接了 USB 音箱等设备,它也会出现在列表中。

步骤二:将外部扬声器设为默认设备

如果你使用的是外接扬声器(而不是插在板载耳机孔上的耳机/音箱),需要把它配置为 ALSA 的默认播放设备,否则系统仍然会往耳机孔输出:

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确认保存,最后按return(回车)确认文件名。

📌 参数说明:defaults.pcm.card是 ALSA 的默认 PCM 播放声卡编号。除了这里修改的播放默认值,也可以关注defaults.ctl.card(控制接口)等关联配置,但对于本课场景,只需保证播放指向正确的声卡即可。

测试麦克风与扬声器

录制 5 秒测试音频

执行以下命令,通过麦克风录制 5 秒音频并保存为 WAV 文件:

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

录制期间对着麦克风制造声音——说话、唱歌、beatbox、弹奏乐器都可以,目的是验证麦克风确实采到了信号。各参数含义:

参数含义本课取值
--format=S16_LE16-bit 有符号小端(PCM 位深)与语音识别服务兼容
--duration=5录制时长(秒)5
--rate=16000采样率 16KHz语音识别常用入门采样率
--file-type=wav输出容器格式WAV(未压缩)
out.wav输出文件名可自定义

回放刚才的录音

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

播放参数要与录制时的采样率、位深保持一致,否则可能出现变调或报错。播放时注意调节扬声器音量。

调整增益与音量:alsamixer

如果麦克风音量太小(需要提高增益)或太大,可以使用alsamixer交互式工具调整。这是一个终端界面的混音器,方向键调节、Esc退出,具体按键操作可查阅 Linux 上alsamixer的 man page。

播放报错排查

如果回放报错,优先检查alsa.conf中设置的defaults.pcm.card是否与aplay -l列出的实际声卡编号一致——这是最常见的错误来源。

从配置到代码:声卡编号如何在 Python 采集程序中使用

硬件配置完成后,这些信息会被直接写进后续的音频采集程序(详见本课配套实操文档 pi-audio.md)。以仓库中完整的示例代码 code-record/pi/smart-timer/app.py 为例:

import io import pyaudio import time import wave from grove.factory import Factory button = Factory.getButton('GPIO-HIGH', 5) audio = pyaudio.PyAudio() microphone_card_number = 1 speaker_card_number = 1 rate = 48000

代码中microphone_card_number正是你在arecord -l中查到的编号,speaker_card_number则是你在alsa.conf中设置的播放声卡编号,二者都填入PyAudio.open()的设备索引:

stream = audio.open(format = pyaudio.paInt16, rate = rate, channels = 1, input_device_index = microphone_card_number, input = True, frames_per_buffer = 4096)
  • 采集音频时通过input_device_index指定麦克风声卡;
  • 回放时通过output_device_index指定扬声器声卡;
  • rate默认 48000(48KHz),如果运行时报OSError: [Errno -9997] Invalid sample rate,需要把它降到4410016000——这也与你在arecord测试命令里选择的采样率策略一致。

从源码可以看出,本课的硬件配置流程(查编号 → 设默认卡)与软件采集流程(PyAudio 指定device_index)是严格一一对应的,硬件配置的好坏会直接决定软件能否正确拾音。更完整的"按钮控制录音 → 转文字"链路,可继续阅读 pi-speech-to-text.md 与对应完整代码 code-speech-to-text/pi/smart-timer/app.py。

本课的其他设备路径与下一步

这份配置指南是"语音识别"课程三路硬件分支之一,同一小节还有:

  • Arduino 分支:wio-terminal-microphone.md(Wio Terminal 麦克风配置);
  • 虚拟设备分支:virtual-device-microphone.md(直接使用电脑自带麦克风/扬声器,无需额外硬件)。

配置完成后,下一步就是编写代码采集音频并调用 Azure 语音服务完成"语音转文字",这部分的整体流程与理论知识(唤醒词、隐私、RNN 语音模型等)见 README.md。

总结

本篇完成了树莓派语音设备的"最后一公里"硬件准备:

  1. 选型:优先 USB 麦克风/耳机,蓝牙设备存在兼容性风险;ReSpeaker 2-Mics Pi HAT 可同时提供双麦克风与 Grove 按钮;
  2. 枚举:用arecord -l/aplay -l获取声卡编号,并确认板载card 0: Headphones始终存在;
  3. 配置默认卡:外接扬声器需在/usr/share/alsa/alsa.conf中修改defaults.pcm.card
  4. 验证:用arecord录制 5 秒 16KHz WAV 并用aplay回放,必要时用alsamixer调增益;
  5. 对接代码:将查到的声卡编号填入 PyAudio 的input_device_index/output_device_index,即可进入语音识别开发。

这套"查编号 → 配默认卡 → 测试录音 → 对接代码"的方法论,适用于任意基于 ALSA 的 Linux 音频环境,是后续所有语音功能开发的可靠地基。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 1:52:09

JavaWeb在线翻译全实现:Servlet、Redis缓存与翻译API整合

简介:一份面向JavaWeb课程设计的完整翻译功能实现源码包,适合正在学习Servlet、JSP与MVC架构的开发者用来打通前端交互、后端API调用与缓存优化的完整链路。资源围绕在线翻译场景,覆盖Cookie缓存、Redis缓存、限流与错误处理等关键实践&#…

作者头像 李华
网站建设 2026/9/15 1:50:44

搞定wordpress域名空间,这5个建站报价陷阱别踩

搞定wordpress域名空间,这5个建站报价陷阱别踩 模板网站太丑不够用,这是很多老板找我们做开发时的第一句吐槽。别急着甩锅给设计师,很多时候问题出在底层架构没理顺,尤其是 wordpress域名空间 没配对,导致后续优化处处受限。我干这行十年,见过太多团队为了省那点 建站报价…

作者头像 李华
网站建设 2026/9/15 1:50:30

Python+OpenCV人脸识别考勤系统:LBPH训练与打卡逻辑

简介:基于Python与OpenCV打造的人脸识别员工考勤系统,是面向计算机专业毕业设计、课程设计及期末大作业的高分完整项目。其核心价值在于利用人脸识别技术替代传统打卡方式,有效解决代打卡、忘打卡等考勤管理痛点,适合需要快速搭建…

作者头像 李华
网站建设 2026/9/15 1:49:03

STM32单片机计算器设计:LCD1602显示与矩阵键盘驱动全解析

基于STM32单片机计算器(LCD1602显示)项目从零拆解最近后台有不少读者在问基于STM32的计算器该怎么做,正好手头有一个典型的课题:基于STM32单片机计算器,配LCD1602显示,项目编号S014A。这个项目是很多学校的…

作者头像 李华
网站建设 2026/9/15 1:47:29

Shapefile文件家族完全解读:从长江经济带shp包看矢量数据读取与处理

简介:长江经济带地级市shp图.zip是一份覆盖长江经济带范围内全部地级市行政边界的Shapefile地理数据包,面向GIS使用者、城市规划与区域研究人员,可直接用于地图绘制、空间分析和基础底图搭建,省去自行矢量化的时间。压缩包共9个文…

作者头像 李华
网站建设 2026/9/15 1:46:37

STM32F407硬件实战:从正点原子开发板直击寄存器、时序与堆栈真相

1. 这不是“又一本STM32教程”,而是你第一次真正摸清F407硬件脉络的起点正点原子的STM32F407-M4系列教程,在嵌入式初学者圈子里几乎成了“默认入门路径”。但很多人学完发现:能跑通LED闪烁、串口打印,一到自己画板子、调I2C传感器…

作者头像 李华