基于ESP32-C3与Qi无线充电的Mochi数字伴侣DIY全攻略
1. 项目概述:打造一个会“呼吸”的电子伙伴
几年前,我第一次接触到那些小巧的“电子宠物”时,就被它们简单的交互背后所蕴含的复杂情感连接所吸引。但市面上的产品要么功能封闭,要么就是纯粹的屏幕应用,总感觉少了点亲手创造的灵魂和硬件的实在感。直到我看到了将无线充电、开源硬件和可编程微控制器结合起来的可能性,一个想法逐渐成型:为什么不自己做一个既有“血肉”(硬件),又有“灵魂”(软件),还能摆脱线缆束缚的实体虚拟宠物呢?
这就是“Mochi数字伴侣”项目的由来。它不仅仅是一个玩具,更是一个融合了无线充电(Qi标准)、嵌入式开发(ESP32-C3)和交互设计的综合性DIY电子项目。你可以把它想象成一个电子时代的“拓麻歌子”,但它的身体是由四块PCB板拼接而成,心脏是一颗支持Wi-Fi和蓝牙的RISC-V芯片,而它的“食物”则是通过电磁场无形传递的能量。通过这个项目,你不仅能获得一个可爱的桌面伙伴,更能深入理解电感耦合的能量传输原理、掌握锂聚合物电池的管理与充电电路设计,并亲手为它编写行为逻辑,实现一个真正属于你自己的、可无线“续航”的智能硬件。
无论你是刚接触Arduino的硬件新手,想找一个有成就感的综合项目练手;还是经验丰富的开发者,想寻找一个有趣的载体来实验无线供电或低功耗交互;甚至是电子爱好者,单纯想体验从零组装一个会“动”、会“响”、能触摸交互的电子装置的乐趣,这个指南都将为你提供一条清晰的路径。我们将从最基础的电磁感应实验开始,逐步深入到电路焊接、固件烧写和最终的功能整合,整个过程就像在组装并唤醒一个电子生命体。
2. 核心思路与方案选型解析
在动手之前,理清整个项目的设计思路和为什么选择这些组件至关重要。这能帮助你在遇到问题时,快速定位是原理性障碍还是实操性失误。
2.1 为什么是“无线充电” + “虚拟宠物”?
这个组合看似新奇,实则有着坚实的工程逻辑和用户体验考量。传统的桌面电子装置要么依赖USB线供电,显得杂乱;要么使用电池,需要频繁更换或插线充电,中断了设备的“常驻”状态。而虚拟宠物的核心体验在于陪伴感和持续的生命感,频繁的“断电”会彻底破坏这种沉浸感。
无线充电,特别是基于Qi标准的解决方案,完美地解决了这个问题。它让能量传输变得无感且自动。当Mochi被放置在一个无线充电座上时,它就仿佛在“进食”或“休息”,无需人工干预即可补充能量,实现了“永不断线”的陪伴体验。从技术实现角度看,这引入了电感耦合和电源管理两个关键模块,增加了项目的技术深度。
2.2 主控芯片:为何选择ESP32-C3 SuperMini?
市面上微控制器众多,Arduino Uno、ESP8266、STM32都是常见选择。本项目选择ESP32-C3,是基于功能、功耗、生态和成本的综合权衡:
- 性能与接口足够:作为一款基于RISC-V架构的芯片,ESP32-C3主频高达160MHz,内存足够驱动OLED图形界面、处理触摸输入、播放简单音频并运行虚拟宠物的状态机逻辑。它提供了必需的I2C(连接OLED)、GPIO(连接触摸传感器)、PWM(驱动扬声器)等外设。
- 低功耗特性:虚拟宠物在无人交互时,应进入睡眠模式以节省电量。ESP32-C3具有丰富的低功耗模式,可以极大地延长锂聚合物电池的续航时间,这对一个旨在“常开”的设备至关重要。
- 开发环境友好:完美支持Arduino IDE,意味着有海量的库和社区支持。对于虚拟宠物需要的图形显示、音频生成等功能,可以轻松找到开源库,大幅降低开发门槛。
- 尺寸与成本:SuperMini开发板体积小巧,非常适合嵌入到这个紧凑的拼装结构中,且价格相对低廉。
注意:ESP32-C3的GPIO8在开发板上常连接一颗LED,这在初期程序测试时非常方便,但在最终产品中,需要确认它是否与其它功能冲突(在本项目中,它被用作状态指示,是合理的)。
2.3 无线充电方案:Qi接收模块的集成
我们没有从零开始制作无线充电电路,而是采用了一个现成的无线功率接收器模块。这是一个明智的“站在巨人肩膀上”的选择。该模块已经集成了接收线圈、谐振电容、整流桥和稳压电路,可以直接输出稳定的5V直流电。我们的工作就是将它输出的电能,引导至TP4056锂电池充电管理芯片。
这里的关键在于理解能量流向:无线充电座(发射端)->接收线圈(耦合磁场)->无线接收模块(AC/DC转换)->TP4056(充电管理)->锂聚合物电池(储能)->ESP32-C3及外围设备(耗电)。TP4056在这里扮演了“守门人”的角色,它确保电池以恒流-恒压方式安全充电,并在电池电压过低时切断输出以保护电池。
2.4 结构设计:四板拼装的优势
将整个装置设计成左(L)、右(R)、上(T)、下(B)四块独立的PCB,通过排针插座连接,这种设计带来了多重好处:
- 模块化调试:你可以先单独测试每一块板子的功能。例如,先确保“下板”的充电和供电正常,再测试“左板”的ESP32程序,最后组装,便于问题隔离。
- 降低焊接难度:将元件分布到四块板上,避免了在单块高密度板上的复杂焊接,对新手更友好。
- 赋予产品个性:这种裸露的、结构化的设计本身就有一种极客的美感,清晰地展示了内部构造,符合DIY精神。
3. 硬件组装与焊接实战详解
这是将想法变为实体的关键一步,需要耐心和细致。请务必准备好安全眼镜,并在通风良好的环境下操作。
3.1 工具与材料清点
除了套件内的所有元件,你还需要准备:
- 焊接工具:一把可调温电烙铁(建议温度320-350°C)、焊锡丝(0.8mm含松香芯)、烙铁架、清洁海绵。
- 辅助工具:尖头镊子、斜口钳、吸锡器或吸锡带(备用,用于修正错误)、万用表(极其重要!用于通电前检查)。
- 耗材:高温胶带或蓝丁胶(固定元件)、异丙醇和棉签(清洁焊盘)。
- 电源与调试:USB-C数据线(用于ESP32编程和供电)、5V USB充电器、无线充电座(支持Qi标准)。
3.2 分板焊接步骤与核心技巧
我们将严格按照PCB上的字母标识(L, R, T, B)顺序进行焊接。一个黄金法则:在给任何模块通电前,先进行细致的目视检查和万用表通断测试。
3.2.1 “左板”(L板)—— 大脑的安装
这块板承载着项目的核心——ESP32-C3开发板。
- 焊接母座:找到标有“L”的PCB。板上会有两个6Pin母座(排针插座)的焊盘。先将母座放好,用一点高温胶带固定背面,防止移动。焊接时,先固定对角两个引脚,检查是否与白色丝印框完全对齐、是否贴平板子,确认无误后再焊接其余引脚。母座的开口方向应朝向板子外侧,以便后续插入排针。
- 安装ESP32:将ESP32-C3开发板的长排针(通常是板子自带或需要你焊接的)插入刚才焊好的两个母座中。务必确保USB-C接口朝向板子边缘并略微伸出,这是后续编程和调试的入口。插入后,从背面将排针焊接到PCB上。
- 初步上电测试:这是极其重要的一步,不要跳过!焊接完成后,先不要组装,单独用USB线给ESP32-C3上电。观察红色电源LED(PWR)是否亮起,蓝色用户LED(连接GPIO8)是否闪烁(如果之前烧录过Blink程序)。用万用表测量板上为其他模块供电的3.3V或5V焊盘电压是否正常。这能第一时间验证ESP32本身和焊接是否有短路或虚焊。
3.2.2 “右板”(R板)—— 声音的出口
这块板用于安装扬声器。
- 焊接母座:同L板,焊接两个6Pin母座。
- 固定扬声器:将微型扬声器放入PCB中央的圆形丝印圈内,发音孔对准板上的开孔。在扬声器边缘涂抹少量热熔胶或强力双面胶,将其固定。注意扬声器的极性,通常“+”极会有标记或引脚更长。板上的“SPKR”焊盘也会标有“+”和“-”。
- 连接导线:剪两小段导线(可以用电池或线圈上剪下的多余线材),将扬声器的两个引脚分别连接到PCB对应的“SPKR+”和“SPKR-”焊盘上。焊接要牢固,避免后续因声音振动导致脱落。
3.2.3 “上板”(T板)—— 交互的触角
这块板集成电容触摸传感器,是Mochi的“感觉器官”。
- 焊接母座:焊接唯一的一个6Pin母座。
- 安装排针:剪下两段6Pin的排针(公头),从PCB的背面(即有HackerBoxlogo的一面)插入,使排针的短针穿过板子,长针留在logo面。在背面(元件面)将短针焊牢。这构成了与其它板连接的结构支柱。
- 安装触摸传感器:
- 将TTP223触摸模块贴放在PCB正面(有母座的一面),元件朝外。
- 剪一段3Pin的排针,穿过触摸模块的孔,使塑料底座紧贴模块。
- 将排针穿过PCB上对应的三个孔,在PCB背面将露出的针脚剪至几乎与板面齐平,然后焊牢。
- 翻回正面,小心地取下3Pin排针的塑料底座,再将过长的针脚剪短,最后将针脚焊接到触摸模块的焊盘上。
- 技巧:可以先在PCB背面的焊盘上上一点锡,然后用烙铁加热焊盘,同时将剪短的排针按压进去,这样焊接更美观牢固。
3.2.4 “下板”(B板)—— 能量的心脏
这是最复杂也最重要的一块板,负责能量接收、存储与分配。
- 安装TP4056充电模块:
- 将TP4056模块贴放在标有“B”的区域。剪两小段排针,穿过模块两个角落的固定孔和PCB,在PCB背面焊接固定。这起到了机械固定作用。
- 关键焊接:模块上有“OUT+”和“OUT-”两个通孔(输出正负极),PCB上对应位置有焊盘。用烙铁头抵住通孔,加热并送入焊锡,让锡流过孔洞,在背面的焊盘上形成饱满的焊点。这实现了电气连接。务必确保焊点牢固,这是主供电通道。
- 集成无线接收模块:
- 先将无线充电接收线圈的引线从模块上拆下,记住正负极位置(通常有标记)。
- 将接收模块本体贴在TP4056旁边,同样将其输出端的“+”和“-”通孔焊接到PCB对应的焊盘上。
- 线圈安装技巧:将线圈背面的离型纸撕掉,粘贴到PCB背面(B板的另一面)。一个提升充电效率的秘诀:不要将线圈直接贴平在PCB上,可以用1-2毫米厚的双面泡沫胶垫高,使线圈更靠近外壳,从而在最终组装后更贴近无线充电器表面,耦合效率更高。
- 将线圈引线穿过PCB上的预留孔,修剪长度后,焊回接收模块对应的正负极。此处极性绝对不能接反!
- 焊接滑动开关:开关没有极性,可以任意方向焊接,确保按动顺畅即可。
- 安装结构排针:同T板,在背面焊接两排6Pin公头排针,长针朝外。
- 连接电池(可选但推荐):如果你有503035规格的锂聚合物电池,将其红(正)、黑(负)线剪至约4厘米,分别焊接到TP4056模块上标有“B+”和“B-”的焊盘。焊接电池时,烙铁温度不宜过高,且动作要快,避免高温损坏电芯。
3.3 整体组装与方位确认
将四块板子像立方体的四个面一样,通过排针插座拼装起来。此时需要格外注意方向:
- 前面:带有HackerBox logo和单独一个母座的T板是前面,因为那个母座是用来插OLED屏幕(Mochi的脸)的。
- 后面:你会看到两个USB-C口,一个是ESP32的(编程口),一个是TP4056的(有线充电口)。
- 左右:字母“L”和“R”是相对于Mochi自身的左右。所以当你面对它的屏幕时,你右手边的是它的“左板”(L)。
- 插入OLED:将OLED显示屏的排针插入T板的母座中。为了让它更贴合,可以将其排针的黑色塑料底座取下。屏幕应该能平整地靠在板子上。
组装完成后,先不要急于上电。拿出万用表,调到蜂鸣通断档或电阻档,进行以下关键检查:
- 检查电源短路:测量TP4056模块的“B+”和“B-”之间是否有短路(电阻极低)。测量无线接收模块输出端焊盘之间是否有短路。
- 检查连接:粗略检查各板之间通过排针连接的关键电源点(如VCC, GND)是否导通。
4. 软件环境配置与固件烧录
硬件是身体,软件是灵魂。我们将为ESP32-C3注入Mochi的生命程序。
4.1 Arduino IDE环境搭建
- 安装Arduino IDE:从Arduino官网下载并安装最新版IDE。
- 添加ESP32开发板支持:
- 打开IDE,进入“文件”->“首选项”,在“附加开发板管理器网址”中输入:
https://espressif.github.io/arduino-esp32/package_esp32_index.json - 打开“工具”->“开发板”->“开发板管理器”,搜索“esp32”,找到由“Espressif Systems”提供的包,点击安装。
- 打开IDE,进入“文件”->“首选项”,在“附加开发板管理器网址”中输入:
- 选择开发板与端口:
- “工具”->“开发板”->“ESP32 Arduino”->“Nologo ESP32C3 Super Mini”
- 用USB线连接Mochi的ESP32端口(L板)到电脑。在“工具”->“端口”中选择新出现的串口(如COMx或/dev/cu.usbmodemxxx)。
4.2 基础测试与Bootloader模式
在烧录复杂固件前,先用最简单的Blink程序测试开发板和连接。
- 打开“文件”->“示例”->“01.Basics”->“Blink”。
- 点击上传按钮。如果一切顺利,程序将编译并上传,Mochi左板上的蓝色LED开始闪烁。
- 如果上传失败,最常见的原因是ESP32没有进入下载模式。你需要手动操作:
- 按住L板上的“BOOT”按钮不放。
- 再按一下“RST”按钮。
- 松开“RST”按钮。
- 松开“BOOT”按钮。
- 此时ESP32进入下载模式,立即点击Arduino IDE的上传按钮。这个操作在后续开发中会经常用到。
4.3 获取并烧录Mochi固件
原项目基于开源的“huykhong mochi”项目。
- 获取固件:访问该项目的GitHub页面(可通过搜索“huykhong mochi github”找到),下载整个代码仓库。
- 在Arduino IDE中打开:解压下载的文件,用Arduino IDE打开其中的主
.ino文件。 - 安装依赖库:根据代码开头的
#include提示,你通常需要安装以下库(通过“工具”->“管理库”搜索安装):Adafruit_GFX(图形库)Adafruit_SH1106或Adafruit_SSD1306(OLED驱动库,具体根据屏幕型号)- 可能需要
ESP32Tone或类似的音频库。
- 关键配置修改:在代码中,找到屏幕初始化部分。常见的OLED驱动芯片是SSD1306或SH1106。如果烧录后屏幕不亮或花屏,很可能是驱动型号选错。尝试将
Adafruit_SSD1306改为Adafruit_SH1106,或者修改初始化参数。原教程也明确指出需要将“Screen type”改为SH1106。 - 编译与上传:确认开发板和端口选择正确后,点击上传。由于程序较大,上传可能需要几十秒。上传成功后,Mochi可能会自动重启,屏幕上应该出现初始画面。
5. 功能调试与无线充电测试
当硬件组装完毕且软件成功运行后,就进入了最后的联调阶段。
5.1 有线供电与基本功能验证
- 供电测试:将滑动开关拨到“ON”。通过USB线给TP4056模块(B板USB口)供电。此时,TP4056上的红色LED应亮起,表示正在充电(如果接了电池)。ESP32应该启动,屏幕亮起。
- 交互测试:触摸T板上的触摸传感器,Mochi应该做出反应,如改变表情、发出声音。检查扬声器是否正常工作。
- 电池测试(如果已安装):拔掉USB线,仅靠电池供电。Mochi应能继续工作。用万用表测量电池电压,通过TP4056的LED状态(蓝灯常亮表示充满,红灯表示充电中,灯灭表示无输入或故障)了解电池状态。
5.2 无线充电功能验证
这是项目的点睛之笔。
- 将无线充电座(充电板)接通电源。
- 将组装好的Mochi放置在充电座中心区域。缓慢地前后左右移动Mochi,寻找充电效率最高的“甜点”位置。你会听到充电座可能发出“嘀”的一声,同时TP4056上的红色充电指示灯亮起。
- 成功现象:当Mochi屏幕显示充电图标(如果固件有此功能),且TP4056红灯亮起时,表示无线充电成功。此时即使拔掉所有有线连接,Mochi也能依靠无线传输的能量运行(或为电池充电)。
5.3 常见问题与排查实录
即使按照步骤操作,也可能会遇到一些问题。以下是我在制作和帮助他人过程中总结的“避坑指南”:
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| ESP32无法上传程序 | 1. 端口选择错误。 2. 驱动未安装(CH340/CP2102)。 3. 未进入下载模式。 4. USB线仅供电无数据。 | 1. 检查设备管理器中的端口号。 2. 安装对应的USB转串口驱动。 3. 严格按照“BOOT”->“RST”->“松RST”->“松BOOT”顺序操作。 4. 换一条确认可传输数据的USB线。 |
| 上电后无任何反应 | 1. 电源开关未打开。 2. 电池没电且无外部供电。 3. 电源路径存在短路或断路。 | 1. 确认开关在“ON”。 2. 用USB线连接TP4056或ESP32口供电尝试。 3.立即断电!用万用表蜂鸣档检查: - B板VCC到GND是否短路? - 电池正负极是否接反? - 排针连接处是否虚焊? |
| OLED屏幕不显示或花屏 | 1. 屏幕排针接触不良。 2. I2C地址不对(通常0x3C)。 3. 屏幕驱动库型号选错(SSD1306 vs SH1106)。 4. 供电不足。 | 1. 重新插拔屏幕,确保接触牢固。 2. 在代码中检查 Wire.begin()和屏幕初始化地址。3.这是最常见原因:在代码中将 Adafruit_SSD1306改为Adafruit_SH1106试试。4. 测量屏幕VCC引脚电压是否为3.3V。 |
| 触摸传感器无反应 | 1. 触摸模块焊接不良。 2. GPIO引脚定义错误。 3. 传感器灵敏度问题。 | 1. 检查T板上触摸模块的三个焊点是否牢固、无桥接。 2. 核对代码中触摸传感器连接的GPIO引脚号与实际焊接是否一致。 3. TTP223模块上可能有灵敏度选择焊点,尝试短接不同的选项。 |
| 扬声器无声 | 1. 扬声器极性接反。 2. 连接线断路。 3. 代码中音频输出引脚错误或库未正确初始化。 4. 音量设置过低或音频文件格式问题。 | 1. 交换扬声器两根引线的焊接位置试试。 2. 用万用表通断档检查导线。 3. 确认代码中 tone()或相应音频函数输出的引脚号。4. 检查固件中是否有音量设置,或尝试播放不同的频率测试。 |
| 无线充电不工作 | 1. 线圈极性接反。 2. 线圈距离充电座太远。 3. 充电座功率不足或不兼容Qi。 4. TP4056模块损坏或焊接问题。 | 1.重点检查:将无线接收模块线圈的两根线交换后重新焊接。这是线圈类元件接反的典型症状。 2. 尝试用泡沫胶垫高线圈,或移除Mochi底壳(如果有)再测试。 3. 确保使用支持Qi标准、输出功率≥5W的充电座。用手机测试充电座是否正常。 4. 用万用表测量无线接收模块输出端在充电时是否有5V左右电压。若无,则接收模块可能故障。 |
| 电池无法充电或耗电极快 | 1. TP4056芯片损坏。 2. 电池本身老化或损坏。 3. ESP32未进入低功耗模式。 | 1. 观察TP4056指示灯:接电源红灯应亮。不亮则可能芯片或输入线路问题。 2. 单独测量电池电压,过低(<3.0V)的电池TP4056可能拒充(保护)。 3. 检查固件是否在闲置时调用了 esp_deep_sleep_start()等低功耗函数。 |
一个关键的实操心得:无线充电的效率非常依赖于线圈的对准和距离。在最终封装外壳时,一定要将接收线圈尽可能贴近外壳内侧。我个人的做法是,在B板内侧对应线圈的位置,用CNC或手工挖一个浅槽,将线圈嵌入,使其表面与PCB板面基本持平,这样外壳就可以做得很薄,极大提升了充电的便利性和成功率。
完成所有调试后,你的Mochi数字伴侣就正式“活”过来了。你可以把它放在办公桌的无线充电板上,它就像一个小生命,安静地待在那里,偶尔需要你的触摸互动,而能量则在无形中自动补充。这种将前沿的无线供电技术与充满温情的交互设计相结合的过程,正是DIY电子制作最迷人的地方。
