图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供应的开源文件!
我也会本着开源的精神向大家分享和磋商技能。