企业项目管理、ORK、研发管理与敏捷开发工具平台

网站首页 > 精选文章 正文

基于ESP32的LED音乐频谱灯

wudianyun 2025-04-24 09:24:23 精选文章 14 ℃

最近看到头条网友HACKLABS做的LED频谱灯,很有意思,而且最重的他是开源的,只要懂点嵌入式的知识,都可以做来玩玩。从微信HACK实验室获得开源文件后就马上动手准备起来。先在嘉立创做PCB+SMT,(主要是那512个RGB灯珠,自己焊有点费劲,想省的钱的可以自己挑战一下)然后开始搭建固件开发环境。我没有采用原作者vsCode+PlatformIO的开发平台,因为这个比较专业,我只是业余玩玩,就采用了比较简单的arduino IDE开发环境。

图1 ardunio2.1.0

之前对ESP32的芯片和ardunio稍有了解,但从来没有用过。所以不知道怎么个开发流程,不过有某度,这些都不是问题。在网上搜索ESP32和ardunio关键词,就会出来一大堆相关的文章,照着一步步来就行了。安装好ardunio IDE开发软件和ESP32库,再把源代码迁移到ardunio开发环境,尝试编译了一下,果然不出所料,什么事情都不会这么简单顺利!

不过还好我对C语言和其他的嵌入式开发环境比较熟悉,通过错误提示信息一个一个都解决了。HACKLABS提供的源代码中i2s_pop_sample()这个函数,ESP32最新版本的库文件已经不提供这个函数了,所以导致编译不通过,替换为i2s_read()这个函数就可以了。现在编译通过了,但具体能不能实现功能还得板子到了再测试。

图2 音乐频谱等程序编译

几天后,在JLC做的印制板就好了,除了ICS-43434硅麦和PRO-OB-440射频天线外,其他元器件都装好了。这两个元器件LCSC没有,我是在ickey上买的,而且是从国外发货的,还没有到,等器件到了只能自己动手焊接了。现在可以先测试一下灯珠,这个还算顺利,512个灯珠顺利点亮!

图3 RGB灯珠点亮测试

等到ICS-43434硅麦到了,就开始自己动手焊接。这里不得不说这个硅麦的封装对手动焊接真的不友好,类似BGA的封装,焊盘全在芯片下面,焊接完都没办法测试焊接是否成功。我是先涂锡膏,涂的时候注意不要涂太多,然后把硅麦大概对准焊盘放上去,然后热风枪风速调到最小(风速高了硅麦会被吹飞),温度200度左右,慢慢加热,等到焊锡融化,硅麦自动拉正再稍微多加热一下就算焊接完成了。至于是不是焊接成功,我是真不知道,用万用表是没办法测试的,因为看不到焊盘!这也导致我后来调试遇阻的时候一直怀疑是我焊接有问题,实际上确实有焊接的问题,但最主要是还是程序的问题。因为我一共做了3块板,有2块焊接是没问题的,如果不是程序问题,我很快就能测试出来了。

图4 U2硅麦克风

这里主要说一下程序的问题,这也是我本次自己动手制作过程中花费时间和精力最多的一个环节。在自己动手焊接完硅麦和天线,通过ardunio上传程序后本以为应该顺利的出现那个炫酷的灯随乐动的频谱界面,但实际上却事与愿违,除了LED正常显示,功能按键切换正常外,麦克风似乎没有任何响应。之前那种期待的心情,被一脸盆冷水浇的哇凉!不过作为一名电子爱好者,也不会轻易放弃的。通过串口打印了读取的麦克风数据,输出确实都是0。现在也没办法判断到底是程序问题还是硬件问题,不过当时我还是偏向于是我焊接有问题,因为程序是原作者测试过的,应该是没问题的,我唯一做的就是把i2s_pop_sample()这个函数替换为i2s_read()函数。

现在只能一个个排除了,用示波器和逻辑分析仪观察了I2S引引脚的波形和数据分析,能确认的是确实有1块板子的焊接是有问题的,不过也有2块是没有问题的。用逻辑分析仪进一步测试,通过敲击麦克风,发现捕捉到的数据是有变化的。好了!可以确认麦克风焊接没有问题,也没有被我的热风枪烫坏。

图5 麦克风测试

接下来就把精力放在程序上,好好看代码吧。Ardunio确实是只是适合业余玩玩,相对于其他商业类的编译器像keil和IAR,提供的功能真的太少了,分析代码都很不方便。不过人家是免费的,而且针对的用户群体也不一样,咱也不能期望太高,慢慢看,办法总比困难多,自己克服吧!各种修改程序,各种测试,网上查资料,可是就是不给面子啊,无论怎么折腾,读到的数据始终是0,折腾了好几天还是没有结果。期间也在头条向原作者进行了咨询,估计人家也忙没时间看,也没有收到回复。这是最难的时候,差点就要放弃了!我这人是个急性子,遇到解决不了事情总会放在心上,那几天真的是吃饭睡觉都在想为什么。

某一天,快要下班的时候,还是没有任何结果,就在我准备关电脑下班的时候,心里想再改一下试试吧,要不然晚上又睡不好觉了。我就把I2S接口参数结构体中的一个用于配置左右声道格式的一个参数由原来的仅左声道输出改为仅右声道输出,神奇的事情出现了,问题解决了,串口打印出了麦克风数据,而且LED灯也会随着声音有节凑的变化,这就好了?!之前我无论如何也没想到要改这个参数,因为我查阅过ICS-43434的手册,也核对过原理图甚至是PCB,ICS-43434的LR引脚是接地的,数据应该出现在左声道,所以原作者的配置是没有问题的。我想起了稻盛和夫在《活法》中的话:“工作现场有神灵,在你一直努力一直努力之后,你就能突破自我,灵光一闪,仿佛神灵附体,有老天出手相助一般。” 真的是有神灵相助,要不然我怎么会突然想起要改这个参数了?


图6 I2S接口配置函数

图7 音乐频谱灯效果

终于,问题解决了,虽然还留有疑问,但是已经达到了我想要的目标。现在要探讨的是为什么会这样?明明硬件上的配置是数据应该出现在左声道的,逻辑分析仪的数据也显示数据是出现在左声道的(WS低电平时左声道数据),为什么选择左声道不行,要选择右声道才可以?难道是ESP32提供I2S驱动有问题吗?还是我焊接有问题,三块板子的硅麦的LR都虚焊了,难道这么巧吗?实在想不通了,有感兴趣的朋友一起探讨一下。

图8 ICS-43434局部电路

图9 I2S数据时序

图10 逻辑分析仪捕捉的I2S数据

最后,再次感谢HACKLABS提供的开源文件!我也会本着开源的精神向大家分享和探讨技术。

Tags:

最近发表
标签列表