事情起因:

最近在我使用PCM5102和MAX98357制作播放器的时候,发现播放的时候总是有噪音,无论我怎么检查硬件,噪音依旧还是有。

检查过程:

我从这几个方面检查了问题:

  • 硬件接触不良

  • PCM5102配置有误

  • 电源噪音

  • ……

很遗憾的是,我把上面的部分检查后还是这样子的。

更诡异的是,当我将PCM5102A替换为之前能正常工作的MAX98357A,神奇的事情发生了:

MAX98357A也跟着有噪音了!!!

这让我意识到,这根本不是硬件的问题!

于是我把目光转向了代码,但是怎么看都看不出来是哪里的问题。

无奈我只能寻求Gemini的帮助,在其指导下,我发现了代码里不起眼的两处:

// 优化WiFi连接
WiFi.setSleep(true);
#define I2S_DATA      4
#define I2S_BCK       5
#define I2S_WS        6

Gemini 告诉我,I2S信号可能会因为WiFi和引脚配置不当导致输出的音频有噪音

在Gemini的建议下,我将代码修改为如下样子:

#define I2S_DATA      16   // GPIO16
#define I2S_BCK       17   // GPIO17 
#define I2S_WS        18   // GPIO18
// 优化WiFi连接
WiFi.setSleep(false); // 禁用WiFi睡眠以提高稳定性

在禁用了WiFi睡眠和更换I2S引脚配置后,问题迎刃而解了,播放的音频再也没有了噪音。

结论:

我也不清楚这两个坑是怎么回事 (感觉很有可能是我经常vibe coding导致的),反正我因为这个我查了快一个下午。

不过最后问题还是顺利解决了awa。