2236 字
11 分钟
基于 ESP32 的情侣小电视

这是一个放在桌面上的小电视:能显示时间、天气、电量和纪念日,2.0 版本还能和另一台小电视互动,相关核心资料均已开源。

Commander-bao
/
MiniTV-for-couples
Waiting for api.github.com...
00K
0K
0K
Waiting...

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. 复刻流程#

下面是推荐的复刻流程:

  1. 采购元件:主控、屏幕、各芯片、电池和阻容。
  2. PCB 打样:使用仓库里的 Gerber 在嘉立创打样。
  3. 焊接与检查:焊接各部分元器件,检查无短路后上电测量各位置电压。
  4. 烧录固件:先烧预编译固件验证硬件,再编译自己的代码。
  5. 打印外壳:根据打印机类型选择普通版或高精度版。
  6. 组装与配网:组装各部分,合盖后连接网络完成配网。

3. 硬件设计#

3.1 原理图#

原理图 V2.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 3D 预览

PCB 使用嘉立创 EDA 绘制,下面几条是这块板子上比较重要的布线原则:

  1. 走线尽量走钝角,信号线避免直角和锐角。
  2. 旁路电容贴近对应芯片的电源引脚,距离越短越好。
  3. 电源线加粗,元器件 GND 引脚就近接地,多打地孔。
  4. ESP32 板载天线下方不要铺铜、走线或放金属件。
  5. USB D+ / D- 按差分线处理,尽量等长、少过孔。
  6. 打样前跑一遍 DRC,重点检查 Type-C、FPC 座和 ESP32 的封装方向。

5. 固件开发#

5.1 开发环境#

固件基于 VS Code + PlatformIO 开发,使用 Arduino 框架。新建 esp32dev 工程后,把源码压缩包解压到工程目录即可打开。

PlatformIO 工程

仓库中的 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_eSPILCD 驱动与绘图
JPEGDecoder解码 JPEG 动画帧
Button2按键单击、双击、长按识别
TimeLib时间管理与 NTP 对时
HTTPClient请求天气接口
WiFi / WiFiUdp联网与设备间通信
Animate动画切换
weatherNum天气图标与城市数据
Loving情侣日页面
message“想你啦”消息页面

5.4 配网流程#

  1. 第一次上电、长按右键,或者 WiFi 连接失败时,设备进入配网模式。
  2. 手机搜索并连接名为 “情侣小电视” 的热点。
  3. 在配网页面填写 WiFi 名称、密码和所在城市。
  4. 保存后设备自动重启并连接网络。

ESP32 只支持 2.4GHz WiFi,如果家中是双频合一的路由器,配网时尽量让手机连接 2.4GHz 频段,或者把两个频段拆开。

5.5 烧录注意事项#

  • V1.x 只能在关机状态充电,开机状态烧录;V2.x 插上线即可充电,开机也能烧录。
  • 烧录前确认串口选择了 CH340 对应的端口。
  • 如果一直停在 Connecting...,检查 USB 线、CH340 驱动和开发板是否进入下载模式。
  • V1.x 和 2.x 的固件不要混烧。

6. 外壳与组装#

SketchUp 外壳模型

外壳使用 SketchUp 2019 建模,设计成极简的圆角小电视造型。主体内部有四个螺丝孔,与 PCB 的四个定位孔对应,使用 M2×5 自攻螺丝固定;垫层用来压住屏幕,按钮和开关则单独打印后装入。

打印时注意:

  • FDM 打印机使用普通版模型,光固化打印机选择高精度版。
  • 2.0 硬件要搭配 2.0 版本外壳,不要混用 1.x 的外壳。
  • 打印完成后先清理螺丝孔和卡扣,试装没问题再装电路板。

组装测试教程:

7. 结语#

这个项目是我的第一个软硬件项目,前后断断续续做了两个多月,难免有些不足之处。如果遇到问题,欢迎在 GitHub 提 Issue。

基于 ESP32 的情侣小电视
https://cmder.xyz/posts/esp32-mini-tv/
作者
宝哥
发布于
2023-08-23
许可协议
CC BY-NC-SA 4.0