# ESP32多功能手表 **Repository Path**: P-blAcK/esp32-multifunctional-watch ## Basic Information - **Project Name**: ESP32多功能手表 - **Description**: 这是一个基于ESP32-S3-R8的多功能智能手表项目。 - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 10 - **Created**: 2026-07-07 - **Last Updated**: 2026-07-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ESP32多功能手表 * 这是一个基于 ESP32-S3-R8 的多功能智能手表开源项目,采用 ESP-IDF + LVGL 实现,配套 1.3 寸 ST7789V 彩屏,支持表盘、菜单、设置、番茄钟、飞机大战、Bilibili 电子名片、天气、指南针、Wi-Fi 联网、SNTP 校时、RTC 本地时钟、电量检测、充电检测、抬腕亮屏、低功耗息屏以及通过 USB Serial/JTAG 进行配置和图片下发。项目同时提供硬件原理图与完整固件源码,适合作为 ESP32 可穿戴设备开发、LVGL GUI 学习和嵌入式产品原型参考。 ![输入图片说明](05_README_Picture/image_ESP32_WATCH.png) ### 1.项目文件说明 #### 1.1 Hardware ![输入图片说明](05_README_Picture/hardware.png) Hardware文件夹内是手表电路的原理图和PCB文件,提供.epro格式的源文件以及Gerber格式的文件用于提供给厂家进行直接加工,提供BOM清单用于元器件采购。 #### 1.2 Firmware ![输入图片说明](05_README_Picture/firmware.png) ![乐鑫官方烧录工具配置](05_README_Picture/%E7%83%A7%E5%BD%95%E9%85%8D%E7%BD%AE.png) ![上位机配置](05_README_Picture/%E4%B8%8A%E4%BD%8D%E6%9C%BA%E9%85%8D%E7%BD%AE.png) Firmware文件夹内是固件及烧录工具。 * ESP32-S3-WATCH-V1.2_full.bin是合并了二级引导程序,分区表,手表主程序后的固件,可直接用于烧录。 * ESP-Watch-UpperComputer-Package.zip是我做的上位机,用于配置WiFi,经纬度(用于天气数据的准确获取,如果是用手机热点连接ESP32,很可能获取到的经纬度不准确),B站信息,表盘背景。 * flash_download_tool.zip是乐鑫官方的烧录工具,用于烧录固件,烧录完成后再用上位机进行信息配置。 #### 1.3 Software ![输入图片说明](05_README_Picture/image_software.png) * ESP32-S3-WATCH-Code是手表的源码,可以用VSCode打开。 * ESP-Watch-UpperComputerv1.1是上位机的代码,可以用QtCreator打开。 #### 1.4 SW-Model ![输入图片说明](05_README_Picture/image.png) 两个STEP文件是用来3D打印的文件,"ESP32手表.SLDPRT"是装配体文件。 ### 2.硬件架构说明 手表的硬件分为**电路**和**结构**。 #### 2.1 电路设计 ![输入图片说明](05_README_Picture/SCH_Schematic1_1-P1_2026-07-01.png) ![输入图片说明](05_README_Picture/PCB_PCB1_2026-07-01.png) * 硬件概况: * 主控:ESP32-S3R8,QFN-56 * 外置 Flash:W25Q128JVPIQ * 显示:1.3 英寸 TFT,CS 固定接地,背光由 TFT_BLK 控制 * 传感器:QMC5883P 磁力计、BMI270 六轴 IMU * 电源管理:TP4056-MS 充电、CW2015 电量计、ME6211C33 3.3V LDO * RTC:PCF85063TP/1Z,外接 32.768kHz 晶振 * 接口:USB Type-C、锂电池端口、拨轮/按键输入 * PCB:约 30 mm × 30 mm,4 层板,Top / GND / PWR / Bottom 主控芯片采用ESP32-S3-R8,由于这款芯片没有内置Flash,所以需要外接一个W25Q128提供16MB的外置Flash用于程序的存储。主控芯片直接通过GPIO19和20连接Type-c的UD-和UD+,所以这块板子可以直接通过USB下载和通信。ESP32-S3的射频引脚通过射频匹配电路,连接到这颗2.4G陶瓷贴片天线,用于这个项目中的Wifi功能。绘制PCB时,要保证这部分的电路全都在同一层,不能把天线或者这里的电阻电容放到背面去,也不能跨层走线,不然都可能导致通信失败。天线下面需要设置禁止铺铜区域。ESP32的XTAL_P和XTAL_N引脚需要连一颗40MH的晶振,这是 ESP32-S3 的主时钟,晶振下方也要记得放置禁止铺铜区域。复位电路,给EN引脚接100nF的电容,可以实现上电复位。EN按键按下时也会复位。BOOT按键是实现强制进入下载模式,这个在芯片第一次下载代码前要用到。 接下来看外设。这个工程里有一条系统 I2C 总线,网络名是 ESP_SCL 和 ESP_SDA。总线上有 4.7k 上拉电阻,拉到 3.3V。这条 I2C 总线挂了四个主要器件。第一个是 CW2015 电量计。它连接电池 VBAT+,通过 I2C 把电池电压、电量估算等信息反馈给 ESP32-S3。第二个是 QMC5883P 磁力计,用于指南针功能。第三个是 BMI270 六轴 IMU,它可以检测加速度和角速度,用于实现本项目中的抬腕亮屏功能。它的 INT1 中断脚接到了 ESP32-S3 的 BMI_INT,可以让传感器在有事件时主动唤醒或者通知主控。第四个是 PCF85063 RTC 实时时钟。它外接 32.768kHz 晶振,需要直接用电池的VBAT+给它供电,用于在系统休眠或者掉电时维持时间。 再看显示屏。TFT_BLK设为高电平,三极管导通,LEDK接地,背光打开,屏幕亮起。通过调节TFT_BLK引脚输出的PWM波的占空比来调节屏幕亮度。 最后再来看一下电源部分的电路。一共有两种供电方式,一种是通过type-c的VBUS引脚传入5V电压,经过一片LDO降压至3.3V,给主控芯片供电;还可以通过电池给芯片供电,电池的VBAT+引脚连接开关机电路,当KEY4按下时,栅极电平拉低,pmos管导通,VBAT+连通到VABT,VBAT经过降压芯片输出3V3给主控芯片供电,程序初始化拉高CTL引脚,这个三极管导通,pmos管的栅极保持低电平,VBAT+就能持续给电路供电了,这样就实现了在只有电池供电的情况下的开机功能。如果想要关机,只需要检测KEY4按键是否长按,如果长按,则主控芯片拉低CTL电平,手表就关机了。最后我用一颗TP4056芯片对电池进行充电管理,当R17为10kΩ时,充电电流大致为100mA。当电池处于充电状态时,CHRG引脚会拉低,单片机的IO36会读取到低电平,然后在屏幕上显示充电状态。 PCB采用四层板双面布局的结构,板子的大小是30*30mm.我把大部分体积小的元器件都放在顶层,方便大家用焊台焊接。底层的元器件只能用电烙铁或着热风枪焊接了。元器件还是比较多的,所以布局很关键,要根据布局灵活改变外设与单片机的通信引脚。 Wifi未连接时手表工作电流在58mA左右,待机电流在12mA左右。Wifi连接时手表工作电流在130mA左右,待机电流在25mA左右。 屏幕刷新一帧需要11ms。若一直连续刷新,帧率理论上可接近1000/11≈91FPS,但是我的页面约每75~80ms才产生一次需要提交到LCD的变化,因此稳定在约13FPS。 拨轮开关的三个引脚分别对应KEY1(上拨),KEY2(按下),KEY3(下拨)。KEY4用来进行开关机和息屏控制。按住KEY4开机,短按KEY4进行息屏和恢复亮屏,长按KEY4关机。 #### 2.2 结构设计 ![输入图片说明](05_README_Picture/image_SW-Model.png) ![输入图片说明](05_README_Picture/image_%E8%83%8C%E9%9D%A2%E8%9E%BA%E4%B8%9D.png) 采用四颗M1x6x1.8自攻螺丝固定 ### 3.软件架构说明 ![输入图片说明](05_README_Picture/ESP32-S3%20%E5%A4%9A%E5%8A%9F%E8%83%BD%E6%89%8B%E8%A1%A8%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84.png) 本项目基于 ESP32-S3 平台开发,采用 ESP-IDF v5.2.6 作为底层软件框架,以 FreeRTOS 提供多任务调度能力,并使用 LVGL v9.5.0 构建 240×240 分辨率的图形界面。整体软件采用分层、模块化设计,将硬件驱动、系统服务、数据存储、UI 框架与应用功能解耦,便于后续维护、移植和功能扩展。 系统入口由 main.c 负责,完成电源保持、显示屏、按键、RTC、电量计、BMI270 传感器及配置服务初始化,并创建 LVGL 主任务。该任务统一处理 LVGL 时基、页面刷新、实体按键事件分发,以及自动息屏、按键唤醒和抬腕唤醒等电源管理流程。页面切换由 watch_ui.c 集中调度,各业务页面仅提供创建、按键响应、状态查询和销毁等标准接口,从而避免页面之间直接耦合。 显示与图形层由 ST7789 驱动和 LVGL 端口组成。lcd_st7789_official.c 实现面板初始化、背光 PWM 调节、亮度保存及显示休眠控制;lvgl_port.c 负责将 LVGL 绘制缓冲通过 DMA 提交至 LCD,并采用双缓冲机制提升刷新效率。 系统服务层包括 Wi-Fi 自动重连、SNTP 网络校时、RTC 回写、串口 JSON 配置、Bilibili 数据获取及低功耗控制。配置数据如 Wi-Fi、账号、天气坐标和用户偏好保存于 NVS;二维码和表盘封面等 RGB565 图片则以固定槽位保存至 Flash 分区,并支持通过 USB Serial/JTAG 分片传输。 应用层提供主表盘、菜单、设置、番茄钟、飞机大战、电子名片、天气和指南针等功能。传感器模块负责 PCF85063 RTC、CW2015 电量计、BMI270 加速度计及 QMC5883P 磁力计的驱动与数据处理,为时间显示、电量管理、抬腕唤醒和航向计算提供硬件支撑。