← 返回文章库

小智没声音、听不见你说话:按链路分段查,别乱换硬件

最后更新 2026-07-28
⏱ 约 12 分钟 🟡 涉接线/强电
你将学到
  • 把音频问题拆成「听不见你」和「你听不见它」两类分别处理
  • 用串口日志定位问题卡在采集、上云、合成还是播放哪一段
  • 知道自定义板子上音频不工作最常见的三个配置原因
  • 明白什么时候该怀疑硬件、什么时候纯属配置
⎇ 基于开源项目(学习解读,非搬运)
作者:78 等开源贡献者
协议:MIT

本文讲解原理与流程、引用关键片段并注明出处,版权归原作者,遵循其开源协议;一切以上游仓库最新版本为准。

板子开机了,网也连上了,控制台里设备显示在线——然后你对它说话,它一动不动。

或者更气人的:它明显有反应(灯变了、屏幕动了),但你什么都听不见

音频问题最难受的地方在于它只有一个症状:没声音。而背后可能的原因分散在一整条链路上。见过太多人在这里开始换硬件——换麦克风、换喇叭、换板子,换了一圈还是老样子,因为问题压根不在硬件上。

📌 说明

本篇讲排查方法,具体配置以上游仓库当前文档为准。代码版权归原作者 78 及社区贡献者,遵循 MIT 协议。不同板子的音频硬件设计差异很大,本文给的是定位思路,不是某块板的具体参数。

先把问题劈成两半

这一步不做,后面全是乱猜。"没声音"其实是两个完全不同的问题:

A. 它听不见你(麦克风侧 / 输入链路)—— 你说话它毫无反应,唤醒不了。 B. 你听不见它(喇叭侧 / 输出链路)—— 它明显在工作,但没有声音出来。

怎么区分:看它有没有"被唤醒"的迹象。 多数板子唤醒时会有灯效、屏幕变化或者日志输出。如果喊唤醒词后这些迹象,那输入链路是通的,问题在 B;完全没有,问题在 A。

这一刀切下去,排查范围直接减半。别跳过这一步。

完整链路长什么样

理解链路,才知道日志该看哪一段。一次完整对话大致是:

麦克风采集 → 本地唤醒词识别 → 音频编码 → 传到服务端 → 语音识别(ASR)→ 大模型(LLM)→ 语音合成(TTS)→ 传回设备 → 解码 → 喇叭播放

看清楚这条链的一个重要事实:中间有一大段在云上,不在你的板子里。 所以"没声音"完全可能是网络或服务端的问题,跟你的硬件毫无关系——这也是为什么盲目换硬件常常无效。

用日志定位卡在哪一段

接串口看日志,这是唯一靠谱的定位手段,比任何猜测都快。

看不到音频相关的初始化日志 → 音频硬件层就没起来。查 codec 型号、I2C 地址、引脚定义。这是自定义板子最常见的情况。

能初始化,但说话没有任何识别反应 → 采集这段有问题:麦克风接线、采样率、或者根本没采到数据。

能唤醒,但之后卡住 → 输入链路是通的,问题在编码或上云这段。查网络。

服务端明显有回应,但设备不出声 → 输出链路的问题:解码、功放使能、喇叭接线。

日志一切正常就是没声音 → 重点怀疑功放使能引脚和音量设置。

最后这条值得单说:很多板子的功放有独立的使能(EN/SD)引脚,不拉高就完全没有输出,而这在日志里通常什么都看不出来——一切正常,就是不响。自定义板子漏配这个引脚的情况相当多。

自定义板子上,三个最常见的配置原因

如果你的板子不是上游现成适配的,音频不工作的原因大概率在这三处,全都在 config.h 里:

一、codec 型号或 I2C 地址不对。 音频 codec 通常通过 I2C 配置。地址填错,codec 根本没被正确初始化——症状是彻底没声音,且日志里可能有 I2C 通信失败的痕迹。抄参考板时,如果你的 codec 型号和它不同,这里必须改。

二、I2S 引脚接错或写错。 音频数据走 I2S,涉及时钟、数据、片选好几根线。任何一根错了都是没声音,而且不会报错。这也是最需要拿着原理图逐根核对的地方。

三、采样率和硬件对不上。 参考配置里会有类似 AUDIO_INPUT_SAMPLE_RATE 这样的定义。这个值和你的硬件对不上,轻则音质异常、变调,重则完全不工作。

顺带提醒一个和版本有关的坑:上游的 ESP-IDF 6 迁移文档点名了 I2S 端口编号LCD 的 I2C 配置UHCI 的 DMA 依赖 这几处改动。I2S 正好就在音频链路上——如果你是从旧版本升上来、升完音频就坏了,八成落在这里,详见小智固件现在要 ESP-IDF 6.0 了

什么时候才该怀疑硬件

在你把上面这些查完之前,基本不该怀疑硬件。判断硬件有嫌疑的信号是这几个:

  • 换了好几组不同的配置,症状一模一样——说明变的东西没起作用,那问题在不变的那部分,也就是硬件;
  • 同一份固件在别人的同款板子上是好的
  • 能看到明显的物理问题:虚焊、接触不良、器件发烫、供电电压不对。

尤其提一下供电:功放推喇叭是要电流的,用一根质量一般的 USB 线从电脑取电,很容易在放音瞬间掉压导致重启或者杂音。如果你的症状是"平时好好的,一说话就重启",几乎可以断定是供电问题,换个像样的电源试试,别去查代码。

有声音但不对劲,各是什么毛病

比"完全没声音"更常见的其实是"有声音但很难听"。这类问题的指向性很强,基本能一一对应:

声音变调、像快放或慢放 —— 采样率对不上。播放端和数据实际的采样率不一致,就会整体变调。查 config.h 里的采样率定义。

破音、爆音,音量大时尤其明显 —— 优先怀疑供电。功放推喇叭的瞬间电流不小,供电跟不上就会破音,严重时直接重启。其次才是音量设太大导致削顶。

持续的电流声、底噪 —— 硬件层面的干扰。音频线走线离电源或高频信号太近、地线处理不好都会这样。这类问题改代码解决不了,得从布线和硬件下手。

断断续续、卡顿 —— 数据供应跟不上。可能是网络不稳(音频流从云端来),也可能是设备资源紧张。先看是不是只在联网差的时候出现,能区分开这两类。

有回声、它把自己的声音又听进去了 —— 麦克风和喇叭离得太近,或者缺少回声消除。这在结构设计上有讲究,把麦克风和喇叭分开、加隔离,比软件层折腾有效。

看清楚这个规律:这几类里有一半以上的根因在硬件和结构,不在代码。这也是为什么做 AI 硬件不能只当软件项目做——音频体验的上限,很大程度上在你把喇叭和麦克风摆在哪里的时候就定了。

一个建议的验证顺序

如果你正在做自定义板子,别等全部做完再一起测。按这个顺序,一段一段验:

先开机 → 确认没踩到危险引脚; 再麦克风 → 确认能唤醒; 再喇叭 → 确认有输出; 最后屏幕和其他外设

每一步只引入一小段新配置,坏了立刻知道是刚加的那段。反过来,全接好了一次上电,出问题时你面对的是十几个变量,只能靠猜。

分段验证不是麻烦,是省时间。 做硬件的人越早养成这个习惯越好。

相关:小智接线和默认不一样讲引脚定义怎么改,小智自定义开发板怎么加讲板级配置的全貌,小智的音频之心讲 I2S 采集和编码的原理。

📄 来源 / 自校链接

本文为公开资料整理,非亲测。关键参数与代码请结合实物与下列官方来源验证。

内容有错、看不懂、或想看下一期?告诉我们 →

本文为公开资料的学习整理,非亲测。涉接线/花钱/合规的步骤请结合实物与官方最新资料验证,风险自负。见免责声明