构建 BlueBox,一个 ESP32 供电的蓝牙扬声器
构建 BlueBox,一个 ESP32 供电的蓝牙扬声器
有什么比在精心设计的蓝牙扬声器上聆听您最喜欢的音乐更令人心旷神怡的呢?好吧,对于大多数人来说,花费无数小时,花费太多金钱并沮丧地拔出自己的头发只是为了听到一些比从自己的蓝牙扬声器发出的声音稍微好一点的音乐听起来并不愉快。这就是我如何做到这一点的故事。
一切开始的地方
一段时间以来,我一直对构建自己的蓝牙扬声器感兴趣。我一直对与音频相关的电路非常感兴趣,尤其是放大器。这种兴趣很可能源于我最后一年的工程实践。我们所有人的任务是构建一个可以提供至少 1W 功率的多级音频放大器,根据第一原理设计,我们必须设计自己的 PCB。男孩,我玩得开心吗?最后,我设计了一个不错的声音放大器,它确实提供了 1W 的功率,而仅消耗了大约 3W 的功率(电阻器应该会发光,对吧?)。我认为我在实践中的亮点是观察其他学生第一次打开扩音器时的脸。看着他们脸上的表情从兴奋变成沮丧,因为他们的 PCB 上的痕迹真的蒸发了,这是无价的。我们上了一堂关于走线宽度与电流额定值的课程,以及为什么它很重要。有些人显然跳过了这门课,最终以艰难的方式学习。
从那时起,我参与了一些电子项目,取得了不同程度的成功,但我无能为力。在移居国外并在封锁中度过了 2 年之后,我发现自己没有任何工具,并且渴望从事与电子相关的工作。我最后看了看我带来的一盒好东西,发现我仍然有一个 ESP32、2 个面包板和一个 I2S DAC 芯片,几年前我已经焊接到 DIP 适配器上。那天晚上,我订购了一个面包板跳线套件、一个 SparkFun LCD 模块和一个放大器芯片。
山上充满生机...... Wtf那是声音吗?
快递员一按我的门铃,我就像一个为冰淇淋而兴奋的小孩一样跑到门口。我很兴奋能拿到组件并开始修修补补,所以我下午请了假。嗯,当时我还在家里工作,所以将鼠标放在模拟手表上以保持我的 Teams 状态活跃就像起飞一样。我开始在我的桌面上安装 ESP-IDF SDK 并将所有东西连接起来,这样当我将运行我的蓝牙扬声器的光荣代码闪烁到 ESP32 时,电路就准备好了。当我的妻子来到我的办公室告诉我现在是凌晨 3 点并建议该睡觉时,我已经修补了大约 10 个小时。你知道钢铁侠托尼·斯塔克开始在他的实验室工作,场景是他的编码和修补场景的蒙太奇,以一些很酷的新小工具的工作原型结束吗?嗯……这不是那个!经过 10 个小时的努力,我的电线和代码乱七八糟,没有任何用处。 LCD 屏幕除了一些随机模式外不会显示任何内容,并且放大器实际上不输出任何声音,甚至不输出任何声音。
接下来的日子都遵循同样的模式。稍早“起飞”,然后在傍晚或清晨进行修补,每天都在接近工作原型。在发现我一直在初始化显示全部错误之后,我最终让 LCD 显示一些文本。我花了将近一周的时间才发现我多年前焊接到适配器上的 I2S 芯片没有正确焊接。事实证明,没有烙铁有点挑战性,但我发现在燃气灶上加热黄油刀会使其足够热以熔化焊料。我还了解到,这通常会引起妻子愤怒的注视。总而言之,我花了大约 2 周的深夜修修补补,在面包板上获得了一个功能性电路,我可以使用蓝牙连接到该电路并播放一些音乐。
The first working prototype of my speaker, stuffed into a cardboard box
我应该直截了当地说,第一个版本发出的声音不是你愿意长时间自愿听的。虽然,是的,我正在流式传输的音乐是从扬声器中传出来的,但听起来并不是很好。事实证明,面包板不太适合 I2S 和 SPI 等高速数字应用。快速切换的数字信号以电容方式耦合到任何事物。我可以从字面上听到液晶显示屏上的文字变化。
Psst...嘿孩子,想要一些PCB吗?
我正在接近可以放入外壳中并调用我自己的蓝牙扬声器的东西的想法让我非常兴奋。深夜修修补补的时间让我兴奋不已。在过去的两周里,我学到了很多新东西,从 I2S 和 SPI 的工作原理到实现用 C 编写的 RTOS 事件系统。最重要的是,我有一些我可以握在手中的东西,并自豪地说我有做了这个。这种感觉促使我更进一步,尝试将整个东西放在 PCB 上,因为你知道,为什么不呢?按照与以前相同的模式,我尽可能多地修补和学习 PCB 设计。我将电路设计转移到 CircuitMaker 上的示意图中,并添加了一些额外的电路。不久之后,我就拥有了有史以来最漂亮的 PCB 设计!对于那些真正设计 PCB 的人,我很抱歉你将要看到的。
The PCB layout for my Bluetooth speaker, note this screenshot is from revision 2 of my design so it’s slightly different from the manufactured PCB
在弄清楚 Gerber 文件到底是什么以及如何导出它们之后,我将设计送去制造。 PCB 和模板需
The most beautiful PCB ever, complete with matte-black solder mask
Placing the components after applying the solder paste
当 PCB 最终到达时,我已经准备好开始使用所有组件和工具。在整个晚上的过程中,我煞费苦心地放置了每个小部件,并使用热风枪进行回流。在这个过程中,我绝对不优雅。我从来没有使用过 SMD 组件,但只有一个返工站,我最终需要做很多返工。我什至在移动其中一个芯片时设法将焊盘从 PCB 上拉下来。这导致我不得不拆焊所有东西并开始使用新电路板,幸运的是我订购了 10 个。
它活着!
经过数小时的焊接、返工和至少 47 公斤的助焊剂,我得到了一块完全填充的 PCB。当我插入 USB-C 电缆时,我无法形容我的兴奋,蓝色 LED 灯亮起,我的桌面发出 ping 信号,表明它检测到了新设备!这是确认电源电路和 USB 转串口转换器芯片工作正常。我赶紧打开 ESP-IDF 监控工具,看看它是否能检测到 ESP32 并正常通信。片刻之后,引导加载程序文本在我的终端上闪烁,表明串行通信正在工作并且 ESP32 能够启动!我现在需要做的就是刷写 ESP32,一切都会好起来的……对吧?在几次尝试刷新 ESP32 之后,我发现我在 PCB 上布线有问题,并且它无法按预期自动进入下载模式。幸运的是,将其中一个引脚短接到地的适时操作使 ESP32 进入下载模式,因此我最终能够对其进行闪存。我刷新了原始固件的修改版本,主要区别在于确保它可以与更改后的 LCD 驱动程序和 IO 映射一起使用。令我惊喜的是,它听起来并没有我预期的那么糟糕。有了合适的外壳,我相信它听起来足够好,可以在房子周围使用。
它有什么?
- ESP32-WROOM
- 通过 I2S DAC 提供 16 位立体声输出 @ 44.1kHz
- 双通道、3W D 类放大器
- 240x240液晶显示器
- 6个按钮输入
- Li-Po 充电和电源电路,即可以充电或耗尽 Li-Po
- 支持 5V/1A 的 USB-C
它有什么作用?
- 用于显示时间、歌曲详情和状态的 UI
- 蓝牙音频流
- 用于与 NTP 同步的 WiFi(由于 RAM 限制,在启用蓝牙的情况下效果不佳)
- 通过 BLE 公开配置/状态
- 5 段图形均衡器
这是一个永无止境的故事,但没关系
我还需要几天时间才能弄清楚,这并不是我的项目变得痴迷的道路的尽头。自从将第一个版本的固件刷写到 PCB 上以来,我花费了无数个小时来修补、学习和改进。每当我有机会时,我都会尝试优化固件或在代码中再添加一项功能。但就目前而言,我给你留下的是 UI 在撰写本文时的样子。
Testing the UI while playing some music in the background, very happy with the result!
我希望能抽出时间清理代码,以便在 GitHub 上分享,并在我这样做时使用链接更新文章。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明