为3岁孩子打造的离线音频播放器:Boxie DIY 项目
{ Mario Zechner } developer • coach • speaker
Boxie - 为3岁孩子打造的永远离线的音频播放器
2025-04-26
致敬 Gameboy 的精神
目录
- 过去几个月的学习心得
- 像 Game Boy,但用于播放有声读物
- 卡带
- 卡带槽连接器
- 选择 DAC、功放和扬声器
- 带有电源管理和电池充电的 ESP32-S3 开发板
- 按钮、旋钮和外壳
- 软件
- Mario,我该如何自己制作这个?
- 未来的工作
- 额外内容:USB 卡带读取器
- 额外内容:改装 Andonstar AD249S-M 数字显微镜
在 2024 年 7 月底,我开始学习电子技术,以便为我的儿子制作一些小玩意。在我的介绍性文章中,我描述了他经常使用的一些电子玩具,包括 Tonie Box,这是一款播放有声读物的设备,并且拥有一个巨大的内容库。Tonie Box 很棒,但也有不足之处。正如我在之前的文章中提到的,它存在一些缺陷。当时,我并不认为我能够自己制作一个替代品。 几个月过去了,我已经学到了足够的电子技术来为我的儿子制作自己的音频播放器。以下是初步结果: 自 2025 年 1 月以来,它一直处于“生产”状态。无论是早餐桌上还是在婴儿车中散步时,它都是他的日常用品。是的,音量控制是反向的。这在软件中很容易修复。
过去几个月的学习心得
事实证明这比我想象的要容易。我不得不掌握以下技能:
- 学习如何焊接各种元件,包括表面贴装元件
- 放弃 Arduino,拥抱 ESP32 系列微控制器,它们的功能更加多样、强大且便宜。
- 学习如何阅读集成电路 (IC) 数据手册,以及如何在不发生爆炸的情况下组合多个 IC
- 学习如何使用电子设计自动化软件,如 KiCad 或者我使用的 EasyEDA Pro,来创建我自己的 PCB 设计
- 学习如何使用 CAD 软件来设计可以用我的 3D 打印机打印的外壳。由于我来自游戏开发领域,所以之前接触过 3D 建模软件,这对我帮助很大。我最终使用了 Fusion 360,它有一个免费层级。
我还不得不为自己购买一些工具。这是我的战斗站。
我所有工具的清单(附带购买链接):
- ERSA RDS80 焊接台。它是价格较高的业余焊接台之一,但它是一个可靠的工具。我几乎只使用 832KDLF 2.2mm 凿子头。另外购买干式清洁金属丝绒。它比随附的海绵更适合清洁烙铁头。
- armack typ32-3 0.5mm 焊锡丝,它适用于几乎所有东西,包括手工焊接 SMD 元件。我在焊接台上使用 350C°。无铅。
- Yihua 85D 热风焊接台,一种廉价且有效的热风“枪”,用于回流或拆焊元件。
- Miniware MHP50 加热板,一个用于焊接 SMD 元件的绝妙的小东西。由于我的大多数 PCB 设计都很小,我现在主要用它来焊接。稍后会详细介绍。
- Sn42 Bi58 焊锡膏 与加热板结合使用以焊接 SMD 元件。焊锡膏通常通过模板 (EEVblog Tutorial) 应用。对于某些元件,或者如果我忘记在订购 PCB 时订购模板,我会使用牙签将焊锡膏涂到焊盘上。这是一种低温焊锡膏。我通常将加热板设置为 165C°,而不使用制造商推荐的温度曲线。对我来说效果很好。
- 免清洗无铅助焊剂。我通常不需要它,因为焊锡和焊锡膏中的助焊剂通常效果很好。可能存在更好的助焊剂。它绝对不是“免清洗”的。购买一些异丙醇和棉签以清洁 PCB 上的助焊剂残留物。
- 焊锡丝。我用它来在焊接后清洁加热板(如果需要)。从未成功使用它们进行拆焊。热风枪更适合用于此目的。
- 磁性第三只手。用于在焊接时固定元件。我很少使用它们。
- 硅胶焊接垫。必不可少,除非你讨厌你的桌子。我特意选择了这种没有任何隔间的。我发现带有隔间的垫子很难清洁,而且隔间经常碍事。
- ATTEN ST1101D 烟雾提取器,带 HEPA 过滤器,如果你想保持肺部完好无损,这是必备的。我在家里一间带大窗户的小房间里焊接。它有一个 3 层 HEPA 过滤器。通常推荐给业余爱好者的烟雾提取器只不过是一个风扇加上一个活性炭过滤器,这根本无效。这包括 Weller ZeroSmog Shield Pro,这是一个极其昂贵且无效的笑话。
- Andonstar AD249S-M 数字显微镜。我老了,这对我来说是 SMD 焊接必不可少的。我已经对其进行了改装,使其更易于使用,我设计了一个 3D 打印的装置,允许我将显微镜安装到 Rode PSA1 铰接臂上,该臂安装在我的桌子上。超级容易定位显微镜。稍后会详细介绍。
- Jubor 10x LED 放大灯。我几乎不再使用它了,因为我的改装显微镜非常好。你可能只需要这一件设备就可以完成工作。
- Alientek DP100 数字电源。非常适合为面包板或单个元件上的测试设置供电。超级紧凑。你不一定需要这个,但我喜欢它。
- 数字万用表。同样,可能有很多更好的选择,但这个便宜的选择对我来说效果很好。你绝对需要一个万用表进行调试。
- YJOCK 360W USB C 万用表。我的大多数设计都可以通过 USB-C 供电。这个小工具让我可以轻松测量我设计的电流消耗。
- Saleae Logic Pro 8 逻辑分析仪。你绝对不需要这个。在本项目之前,我正在开发自己的嵌入式编程框架来处理各种协议,以驱动显示器、音频等。因此,这对于确定是我的劣质代码、糟糕的连接、错误的接线还是不良元件非常有用。
- KLEIN TOOLs TI290 热像仪。帮助我识别 PCB 上的热点,这可能是由于不良焊接、不良元件或不良设计造成的。触摸通常足以找出问题,因此你也不需要这个。可能。
- 斜口钳, (ESD) 镊子, 长嘴钳, 电子维修螺丝刀套装,
- 压接钳套装。能够将连接器压接到电线上是必不可少的,尤其是在自定义外壳内部进行接线时。许多人会告诉你购买一些超级昂贵的压接钳。也许它们更好,但在观看了一些 YouTube 教程并进行了一些练习后,我可以压接几乎任何类型的连接器。
- 剥线钳。与压接钳的情况相同。我发现这种超级简单且便宜的钳子比专用的剥线钳更有效。也可以用作电线切割器。
- 硅胶电线,22 AWG。我喜欢这些。它们很灵活,如果你用烙铁触摸它们,它们不会烧坏。对于某些应用,你可能需要更细的硅胶线。到目前为止,这些对于我所有的用例都适用。重要的是硅胶。你需要在家里准备很多电线!
- 热缩管。因为你不希望有任何裸露的电线。
- M1-M1.7 螺丝, M2-M3 螺丝。只需购买大量螺丝即可。你永远不会有足够的螺丝。如果你想拧入用 PLA 3D 打印的零件,自攻螺钉非常好(样本量:我)。
- 面包板。原型设计必不可少。我使用 BusBoard 的板子。关注最后一个链接以了解质量的重要性。
- 0805 SMD 电阻和电容样本书。当我为我的 PCB 设计订购错误的元件时,这为我节省了数天的等待邮递员的时间。这些元件的质量不是很高,但在你的下一个订单到达之前可以避免眼泪。
- 任何旧的电子学习套件。你需要 LED、按钮、通孔电阻和电容、开关等。基本上你可以插入面包板的任何东西。这有助于原型设计。在我学习和构建时,我得到了几个不同的套件,并以这种方式建立了一个小元件库。
- 3D 打印机。我理解 BambuLab 在过去几个月中名声不好。我确实也拥有一台 Prusa 打印机。但是,我老了,时间很宝贵。而且 X1 Carbon“开箱即用”。它实际上是即插即用,无需任何修改即可产生出色的效果。我很抱歉。
现在,我最近的博客条目可能让你认为我会教你达到这个阶段所需的一切。恐怕事实并非如此。这将需要相当多的资源,我宁愿花在我的家人和个人项目上。 但是,一旦你完成了“用 Arduino 让 LED 闪烁”的阶段,上面的工具和技能列表就是一个很好的起点。许多才华横溢的人已经在书籍或视频中深入描述了 (SMD) 焊接、PCB 设计和 3D 建模,这比我能做到的要好得多。有关建议,请参阅我之前的文章。 与软件一样,研究现有设计也是一种极好的学习方式。例如,所有 [Adafruit 产品]都是开源的,让你研究它们的原理图和 PCB 设计。想要设计一个电源管理电路?查看他们的 PowerBoost 1000 原理图和 PCB 布局文件。同样,在创建基于 ESP32 的开发板时,我从 Unexpected Maker 和 Waveshare 的设计中汲取了灵感。例如,查看 [Waveshare ESP32-S3 Mini 原理图] (https://www.waveshare.com/wiki/ESP32-S3-Tiny)。 我最后的建议是尽快远离 Arduino。它是学习的好方法,但最终你需要更深入一层。这将开启一个全新的可能性世界。比如将 DOOM 移植到 ESP32-S3 并以 44FPS 的速度运行它。 最终,你将编写自己的类似 Arduino 的框架来处理所有底层内容,例如与 SPI 显示器通信、驱动音频或 neopixels 等。我进入此领域的入口是 mcugdx,这是一个基于 ESP-IDF 的简单 C-API,它已经可以做很多事情(至少在 ESP32-S3 上)。你也可以在 mcugdx 示例中找到上述 DOOM 移植。我目前不提供支持或文档。如果你熟悉 ESP-IDF,你应该能够根据示例和存储库中的 sdkconfig 文件来弄清楚。 在本帖的剩余部分中,我将介绍 Boxie 的设计过程,带你了解原理图和 PCB 布局,向你展示我如何提出 3D 打印外壳设计,并概述我编写的使所有这些工作的软件。
像 Game Boy,但用于播放有声读物
我首先考虑的是我希望我的孩子如何与该设备互动。我喜欢 Game Boy 的外形,所以我想要一些尺寸和形状相似的东西。它需要用电池供电以便于携带。 我想要一个简单的旋钮,而不是 Tonie Box 用于控制音量的耳朵。Tonie Box 需要用力敲击才能更改章节或歌曲,这很少有效,并且经常会把 Tonie 人偶从上面敲下来。我选择了简单的导航按钮。 至于内容存储,Tonie Box 将音频保存在 SD 卡上,Tonie 人偶充当 RFID 标签,触发特定的音频文件。这需要互联网连接才能下载文件,并且可能会让该公司获取使用数据。 我不想要这些。该设备应完全离线,内容以“物理”方式提供,就像我年轻时的盒式磁带一样。Game Boy 卡带外形非常完美,但带有一些曲折。与 Game Boy 不同,Game Boy 卡带的标签会部分消失在卡槽中,我希望卡带标签始终完全可见。 这个决定来自我在车里观察我的孩子。当我们通过 Android Auto 和 Spotify 听有声读物时,他会全神贯注地观看仪表板上显示的封面图。这些封面显示了故事中的角色,每本书都不同。让卡带可见让他可以在听的时候看到艺术作品。 是的,突出的卡带有潜在的断裂点,但我会使设计足够坚固以应对它。 为了可靠性,我希望该设备尽可能地安全可靠。无需电源按钮,插入卡带即可打开,取出卡带即可关闭。它应该能够承受不可避免的跌落,这意味着使用耐用的 NiMH 电池而不是 LiPo 电池。 总而言之,该设备需要:
- 便携式,并通过安全的电池类型 (NiMH) 供电
- 从插入设备顶部的卡带中播放内容,并且卡带标签始终完全可见
- 具有音量控制旋钮和用于导航的按钮
- 插入卡带时打开,取出卡带时关闭,从而节省电池
- 永远不要连接到互联网
卡带
由于我使用 ESP32-S3 作为大脑,因此我选择了 micro SD 卡作为存储音频文件的介质。通过 ESP-IDF 访问 SD 卡上的 FAT 文件系统非常容易。只需将 SD 卡的引脚连接到 ESP32-S3 的 GPIO,然后使用 SD 卡 API 即可。
为了引发 Game Boy 卡带的感觉,并使插入和取出卡带变得容易和坚固,我设计了一个自定义 PCB,该 PCB 可以固定并暴露 micro SD 卡的引脚,以及一个 3D 打印的盖子,我可以将标签贴在上面。你可以在这个给 SO 的教学视频中查看最终结果,以便她也可以组装卡带:
PCB 是一个简单的 2 层板。micro SD 卡插座可以固定卡。每个引脚都暴露于 PCB 底部相应的较大焊盘上。四个 M2 螺丝孔允许我拧上 3D 打印的盖子。
为了确定尺寸,我在毫米网格纸上绘制了一堆矩形,然后选择了看起来合适的矩形。在了解尺寸时,网格纸是你最好的朋友!
我在 Fusion 360 中设计了盖子。我将 PCB 设计从 EasyEDA 导出为 STEP 文件并导入它。我在 PCB 顶部创建了一个草图,将 PCB 轮廓投影到它上面,然后将其拉伸到看起来不错的深度。最后,我添加了 SD 卡插座的切口、螺丝孔以及标签的缩进区域。这花了 5 分钟。
我将 PCB 设计发送给 JLCPCB 并订购了 100 个 PCB,以及来自 LCSC 的 100 个 SD 卡插座。我还在我的 3D 打印机上打印了 30 个盖子。
然后我开始手工将 100 个 SD 卡插座焊接到 100 个 PCB 上,诅咒自己没有订购模板,也没有使用 JLCPCB 的组装服务。这花了 2 个晚上。我用牙签将焊锡膏涂到焊盘上。
是的,我真蠢。你可能已经注意到上面 PCB 布局上的 2 个电容器焊盘。我最终没有填充这些,这节省了一些时间。
卡带槽连接器
如何将卡带焊盘连接到 ESP32-S3?Game Boy 使用传统的边缘连接器,卡带上带有镀金触点,插槽中带有相应的连接器。
由于我不知道如何在 EasyEDA 中创建“倒角的金手指”或让 JLCPCB 制造此类 PCB,因此我尝试了不同的方法。但在此之前先失败了。
卡带设计灵感来自 Abe 的项目,该项目在卡带阅读器上使用 pogo 引脚来接触卡带焊盘:
这根本不起作用。正确设置垂直间距非常困难,即使有合适的间距,插入卡带对于 3 岁儿童来说也太难了。焊接的 pogo 引脚也很容易弯曲。
在思考了“3 岁儿童友好型”的要求后,我想出了这个:
我使用了电池弹簧,它足够坚固以应对 3 岁儿童的热情。我没有焊接,而是使用压接到电线上的环形端子,并用螺丝固定在 3D 外壳中的电池弹簧上。
结果易于组装、易于维修,并且(到目前为止)坚不可摧。这是第一次插入卡带的测试:
此时,该设备的内部仍然在面包板上,因为我还没有弄清楚外壳的设计。
选择 DAC、功放和扬声器
对于来自 SD 卡的单声道音乐播放,我需要一个数模转换器 (DAC) 来转换和放大来自 ESP32-S3 的数字音频以驱动扬声器。
我选择了流行的 MAX98357A。Adafruit 出售 分线板,并且有许多克隆版本可用。
MAX98357A 是一种单声道放大器,可在 5V 电压下向 4 欧姆扬声器提供高达 3W 的功率。非常适合本项目。它使用 I2S 协议,我的 mcugdx 框架已经支持该协议。
鉴于放大器的规格,我开始寻找一个好的扬声器。我从亚马逊订购了一些符合规格的扬声器,并发现了扬声器外壳设计的艺术。
我选择了 Visaton FR 7/4,它提供良好的带宽,并且音质比 Tonie Box 扬声器更好。
带有电源管理和电池充电的 ESP32-S3 开发板
在开始本项目之前,我实际上涉足了设计自己的 ESP32-S3 开发板。市场上有许多很棒的开发板,其中 Waveshare 和 Unexpected Maker 的开发板是我最喜欢的。但我想学习如何设计这样的开发板,以防我需要市场上没有的东西。
事实证明,我需要的就是这个。现有的开发板都不支持 NiMH 电池充电。它们通常没有内置的欠压保护,而是依赖于通过 GPIO 测量电压,然后将 ESP32-S3 切换到深度睡眠。我想避免这种情况。有些也不能很好地同时连接 USB-C 和电池。这是我的设备的要求,因为我不想仅仅为了连接 USB-C 电缆来刷新新软件或调试而拔掉电池。
我经历了几次迭代,最终得到了这个:
该开发板是我所有项目设计的基础。它的功能并非特定于本项目,而是包括我在所有项目中发现有用的功能:
- 通过 USB-C 以 0.5A 的电流为 3 节 AAA NiMH 电池或单节 3.7V LiPo 电池充电。电池化学性质通过拨动开关选择。可选的过热保护通过热敏电阻。
- 在电池充电和设备的其余部分之间共享通过 USB-C 输入的功率
- 暴露所有可用的 GPIO
- 欠压锁定 IC,如果电压低于 3.08V,则切断电源
- 低压差稳压器 160mA @ 1A,固定在 3.3V 输出
- USB-C 闪存和调试(如果将正确的 USB-C 引脚连接到 ESP32-S3,则 ESP32-S3 附带此功能)
这是完整的原理图:
让我快速带你了解原理图。
USB-C
![](https://mariozechner.