这是一个放在桌面上的小电视:能显示时间、天气、电量和纪念日,2.0 版本还能和另一台小电视互动,相关核心资料均已开源。
1. 项目速览
1.1 主要信息
| 项目 | 内容 |
|---|---|
| 主控 | ESP32-WROOM-32E,集成 2.4GHz Wi-Fi / BLE |
| 显示 | 1.3 寸 IPS LCD |
| 电源 | TP4056 充电管理 + 602530 锂电池 + BL9110 3.3V LDO |
| 开发工具 | 嘉立创 EDA、PlatformIO、SketchUp |
| 开源协议 | GPL-3.0 |
1.2 功能说明
| 功能 | 说明 |
|---|---|
| 天气时钟 | 时间、日期、城市天气、温度、湿度和空气质量 |
| 电量显示 | 显示电池电量与充电状态 |
| 纪念日 | 显示在一起的天数 |
| 情侣互动 | 2.0 支持两台设备互动 |
| 动画切换 | 多套桌面动画轮换 |
| 亮度调节 | 2.1 支持按键调节屏幕亮度 |
| 快速配网 | 手机连接设备热点,在网页里填写 WiFi 和城市 |
1.3 版本演进
| 版本 | 主要改动 |
|---|---|
| V1.0 | 第一代,具备天气时钟等基础功能 |
| V1.1 | 改进电源充放电控制,重新定义 GPIO,增加自动下载电路,优化布线 |
| V1.2 | 去掉烧录按钮,优化定位孔布局 |
| V2.0 | 改进电源电路,实现 USB / 电池供电自动切换 |
| V2.1 | 增加屏幕亮度调节,改进电路板与元器件布局 |
2. 复刻流程
下面是推荐的复刻流程:
- 采购元件:主控、屏幕、各芯片、电池和阻容。
- PCB 打样:使用仓库里的 Gerber 在嘉立创打样。
- 焊接与检查:焊接各部分元器件,检查无短路后上电测量各位置电压。
- 烧录固件:先烧预编译固件验证硬件,再编译自己的代码。
- 打印外壳:根据打印机类型选择普通版或高精度版。
- 组装与配网:组装各部分,合盖后连接网络完成配网。
3. 硬件设计
3.1 原理图

3.1.1 主控部分
本项目使用 ESP32-WROOM-32E-N16 作为主控。它集成了 2.4GHz Wi-Fi 和 BLE,拥有 16MB 的 Flash 容量,软硬件生态成熟,非常适合小白上手。
主控外围主要是 3.3V 供电、EN 复位、BOOT 下载和去耦电容。下面是主控的官方文档资料:
3.1.2 USB 输入部分
USB 接口同时承担供电和串口通信:VBUS 提供 5V,D+ / D- 连接 USB 转串口芯片。V2.1.1 使用 Type-C 16Pin 母座,CC1 / CC2 各接一颗 5.1kΩ 下拉电阻,告诉充电器设备是受电端。V1.x 使用的是 Micro USB。
3.1.3 USB 转串口部分
使用 CH340K 完成 USB 转串口,配合内部集成两个 NPN 三极管和电阻的 UMH3NTN 实现自动下载。烧录时自动控制 ESP32 的 EN 和 GPIO0,不需要手动按 BOOT 键。
如果电脑识别不到串口,先安装 CH340 驱动,再换一根确定能传数据的 USB 线;有些线只有供电线芯,没有 D+ / D-。
3.1.4 输入按钮
两个 TS24CA 轻触开关作为输入,按下后把 GPIO 拉到 GND。按钮并联 100nF 电容做硬件消抖;由于没有设计外部上拉,固件中必须把对应 GPIO 配置为内部上拉模式。
软件使用 Button2 库区分单击、双击和长按,因此 2.x 能用两个按键完成页面切换、亮度调节、发送消息和配网。
3.1.5 电源管理
充电部分使用 TP4056。PROG 引脚上的 R9 为 4.7kΩ,充电电流约为:
I = 1200 / RPROG = 1200 / 4700 ≈ 0.255A也就是约 255mA。TP4056 的最小 PROG 电阻为 1.2kΩ,对应约 1A;实际取值要结合电池容量、散热和充电速度调整。
电池选用 602530 锂聚合物电池。SI2305 PMOS 负责 USB 与电池之间的供电自动切换,拨动开关控制整机电源,LED 作为充电指示。V2.x 支持边充边用,V1.x 只能在关机状态充电。
锂电池请务必注意极性和绝缘,避免短路、挤压和过充。建议使用带保护板的电池,充电时不要无人值守。
3.1.6 LCD 屏
屏幕是中景园的 1.3 寸 IPS LCD,通过 24Pin、0.5mm 间距的 FPC 排线连接。相关规格书、源码、原理图和取模教程如下:
FPC 排线有方向,插入前确认金手指朝向和锁扣位置;屏幕白屏但背光亮,通常优先检查排线是否插到底、方向是否正确。
3.1.7 电压检测
电池电压通过两颗 300kΩ 电阻分压后送入 ADC。4.2V 的满电电压经过 1:2 分压变成 2.1V,低于 ESP32 ADC 的 3.3V 上限;分压点并联电容可以滤掉采样毛刺。
固件按分压比把 ADC 读数还原成电池电压,再换算成百分比。电阻精度和 ESP32 ADC 的线性度都会影响结果,实际使用时可以做一次两点校准。
3.1.8 降压稳压
系统使用 BL9110FB-330 把电池电压稳到 3.3V,供给 ESP32、LCD 和其他外设。
注意:原理图和 BOM 中可能仍标着 AMS1117-3.3,实际焊接时要换成 BL9110。AMS1117 的压差约 1.1V,电池电压降到 3.7V 左右时余量已经很小;BL9110 压差更低,更适合锂电池供电的场景。
4. PCB 设计与打样

PCB 使用嘉立创 EDA 绘制,下面几条是这块板子上比较重要的布线原则:
- 走线尽量走钝角,信号线避免直角和锐角。
- 旁路电容贴近对应芯片的电源引脚,距离越短越好。
- 电源线加粗,元器件 GND 引脚就近接地,多打地孔。
- ESP32 板载天线下方不要铺铜、走线或放金属件。
- USB D+ / D- 按差分线处理,尽量等长、少过孔。
- 打样前跑一遍 DRC,重点检查 Type-C、FPC 座和 ESP32 的封装方向。
5. 固件开发
5.1 开发环境
固件基于 VS Code + PlatformIO 开发,使用 Arduino 框架。新建 esp32dev 工程后,把源码压缩包解压到工程目录即可打开。

仓库中的 Software/LoveTV2.0.zip 是 2.0 源码,Firmware 目录则提供了编译好的 firmware.bin 和 firmware2.0.bin。如果只想验证硬件,可以使用乐鑫官方的 Flash Download Tool 烧录预编译固件;如需改动功能再编译源码。
5.2 工程结构
src/main.cpp:程序入口。config.h:WiFi、城市、引脚等配置。lib/:自己加入的库文件。.pio/libdeps/esp32dev/:PlatformIO 自动下载的第三方库。partition.csv:ESP32 分区表。
5.3 主要模块
| 模块 | 作用 |
|---|---|
| TFT_eSPI | LCD 驱动与绘图 |
| JPEGDecoder | 解码 JPEG 动画帧 |
| Button2 | 按键单击、双击、长按识别 |
| TimeLib | 时间管理与 NTP 对时 |
| HTTPClient | 请求天气接口 |
| WiFi / WiFiUdp | 联网与设备间通信 |
| Animate | 动画切换 |
| weatherNum | 天气图标与城市数据 |
| Loving | 情侣日页面 |
| message | “想你啦”消息页面 |
5.4 配网流程
- 第一次上电、长按右键,或者 WiFi 连接失败时,设备进入配网模式。
- 手机搜索并连接名为 “情侣小电视” 的热点。
- 在配网页面填写 WiFi 名称、密码和所在城市。
- 保存后设备自动重启并连接网络。
ESP32 只支持 2.4GHz WiFi,如果家中是双频合一的路由器,配网时尽量让手机连接 2.4GHz 频段,或者把两个频段拆开。
5.5 烧录注意事项
- V1.x 只能在关机状态充电,开机状态烧录;V2.x 插上线即可充电,开机也能烧录。
- 烧录前确认串口选择了 CH340 对应的端口。
- 如果一直停在
Connecting...,检查 USB 线、CH340 驱动和开发板是否进入下载模式。 - V1.x 和 2.x 的固件不要混烧。
6. 外壳与组装

外壳使用 SketchUp 2019 建模,设计成极简的圆角小电视造型。主体内部有四个螺丝孔,与 PCB 的四个定位孔对应,使用 M2×5 自攻螺丝固定;垫层用来压住屏幕,按钮和开关则单独打印后装入。
打印时注意:
- FDM 打印机使用普通版模型,光固化打印机选择高精度版。
- 2.0 硬件要搭配 2.0 版本外壳,不要混用 1.x 的外壳。
- 打印完成后先清理螺丝孔和卡扣,试装没问题再装电路板。
组装测试教程:
7. 结语
这个项目是我的第一个软硬件项目,前后断断续续做了两个多月,难免有些不足之处。如果遇到问题,欢迎在 GitHub 提 Issue。