
智能手表/多功能终端
简介
本项目是一个基于 ESP32 S3微控制器和 LVGL*图形库的智能手表/多功能终端 拥有时间显示、图片浏览、视频播放、音乐播放、小说,漫画、计算器、2048游戏,日历、天气预报
简介:本项目是一个基于 ESP32 S3微控制器和 LVGL*图形库的智能手表/多功能终端 拥有时间显示、图片浏览、视频播放、音乐播放、小说,漫画、计算器、2048游戏,日历、天气预报开源协议
:GPL 3.0
描述
智能手表/多功能终端项目介绍
项目概述
https://b23.tv/LfuoGkj
本项目是一个基于 ESP32 S3 微控制器和 LVGL 图形库的智能手表/多功能桌面终端。它集成了丰富的应用程序,包括时间显示、图片浏览、视频播放、音乐播放、小说阅读、计算器、2048游戏、秒表/倒计时、日历、天气预报、WiFi配置、时间同步、壁纸设置等。系统采用 FreeRTOS 实现多任务并发,通过 SdFat 库管理SD卡文件系统,利用 PSRAM 进行大内存缓冲,实现了流畅的UI交互和多媒体处理。

硬件平台
- 主控芯片: ESP32 S3(双核,240MHz,520KB SRAM,8MB PSRAM)
- 显示屏: 1.69英寸 240×280 RGB LCD (ST7789驱动,SPI接口)
- 触摸屏: CST816S 电容触摸 (I2C接口)
- 外部存储: MicroSD卡 (SPI接口,使用SdFat库)
- 音频输出: I2S接口,外接MAX98357等音频功放
- 外部RTC: RX8130CE (I2C接口,提供精确时间)
- 电池: 锂电池,通过ADC监测电压,支持深度睡眠
- 按键: GPIO6用作电源/唤醒键
软件架构
项目采用模块化设计,主要分为以下几层:
- 硬件抽象层: LovyanGFX库提供显示屏和触摸驱动,SdFat库提供SD卡文件系统访问,Audio库提供音频播放支持。
- 系统层: FreeRTOS提供任务调度、信号量、队列等同步机制;LVGL提供图形用户界面基础组件和事件处理。
- 应用层: 各个功能模块独立实现,通过统一的UI管理器进行切换和管理。
- 数据层: Preferences库存储用户配置(亮度、音量、WiFi密码、播放记录等);SD卡存储媒体文件和扫描列表。
功能模块详解
1. 主界面与交互
- 环形菜单: 通过水平滚动选择应用图标,图标随位置缩放并沿圆弧排列,视觉效果流畅。
- 顶部状态栏: 显示当前时间(小时、分钟、秒)和电池电量图标。
- 侧滑容器: 从屏幕底部上滑可调出亮度调节滑块,支持滑动吸附效果。
- 提示容器: 从顶部下滑显示临时提示信息(如SD卡插拔、扫描进度),自动消失。
- 全屏容器: 点击应用图标后,通过缩放动画展开全屏应用界面,支持返回手势。

2. 文件管理系统
- SD卡检测与初始化: 专用任务监测SD卡插入/拔出状态,触发初始化或扫描流程。初始化期间禁用SPI总线以避免冲突。
- 文件扫描: 扫描
/图片、/视频、/音乐、/小说四个目录,将文件名按类别写入/ScanList/下的txt文件,同时生成触发文件/修改请删除此文件以触发重新扫描.txt。扫描进度通过队列发送给UI显示。 - 历史记录: 为图片、音乐、小说保存上次浏览位置,下次打开时自动定位。

3. 应用功能
3.1 图片浏览器
- 支持PNG和JPEG格式(不支持渐进式JPEG)。
- 解码使用PNGdec和JPEGdec库,通过PSRAM缓冲图像数据。
- 自动将图像缩放/裁剪至240×280,横屏图像旋转90°。
- 上下滑动切换图片,解码时显示进度条,退出时保存当前索引。
- 若文件损坏,自动删除并从列表中移除。

3.2 视频播放器
- 支持MJPEG格式视频(Motion JPEG)。
- 采用三缓冲区乒乓操作,解码任务运行在CPU0,LVGL刷新在CPU1,实现流畅播放(20fps)。
- 播放时隐藏进度条,暂停时显示进度条,可通过滑块或GPIO5/7跳转。
- 支持暂停/恢复、跳转(±1MB),显示解码性能统计(FPS、解码时间等)。

3.3 音乐播放器
- 支持MP3格式,使用ESP8266Audio库的AudioGeneratorMP3。
- 音频输出通过I2S,支持音量调节(对数映射)。
- 播放列表从
/ScanList/music.txt加载,支持顺序、随机、单曲循环三种模式。 - 显示当前歌曲名(过长滚动),进度条可拖动,支持上一曲/下一曲。
- 实时FFT频谱显示(使用arduinoFFT),动态彩色柱状图。
- 记录播放模式、音量、当前歌曲位置。

3.4 小说阅读器
- 支持UTF-8编码的TXT文本。
- 每次加载约1KB内容,避免截断UTF-8字符,自动换行显示。
- 记录每本书的阅读进度(文件偏移),保存到SD卡
/小说/history文件。 - 通过GPIO5/7翻页,显示阅读百分比。
- 若文件丢失,弹出提示框询问是否重新扫描。

3.5 计算器
- 实现四则运算(+ - × ÷)和百分号(%)功能。
- 支持运算符优先级,处理除零、溢出等错误。
- 按钮矩阵采用LVGL的btnmatrix,带自定义颜色(运算符橙色)。
- 退格按钮独立,实时清除。

3.6 2048游戏
- 经典2048逻辑,4x4网格,通过手势(上下左右滑动)控制。
- 方块移动、合并带缩放动画,分数实时更新。
- 使用LVGL动画API实现平滑效果。

3.7 秒表与倒计时
- 秒表: 支持开始、暂停、复位,显示时:分:秒.毫秒。
- 倒计时: 通过滚轮设置分钟和秒,启动后显示环形进度条,时间颜色随剩余时间变化(绿→橙→红)。倒计时在后台独立任务运行,支持暂停/继续/复位。
- 两页左右滑动切换,GPIO6返回。
![]() | ![]() |
|---|---|
![]() | ![]() |
3.8 日历
- 使用LVGL日历控件,显示当前月份,可切换年月。
- 可高亮特定日期(示例中未启用)。
- GPIO6返回。

3.9 天气
- 从Open-Meteo API获取7天天气预报,包括天气代码、最高/最低温度。
- 数据缓存在Preferences中,每次进入天气全屏或点击刷新按钮时更新。
- 显示天气图标、中文描述、温度曲线(高温用黄色线,低温用蓝色线)。
- 水平滑动查看未来几天。

3.10 设置
- 包含多个子页面:时间同步、WiFi配置、壁纸设置、电池校准、自动轮播间隔、内存储存管理。
- 时间同步: 支持NTP自动同步(需已保存WiFi)和手动设置(年/月/日/时/分下拉框),同步后写入系统及外部RTC。
- WiFi配置: 扫描周围WiFi,将SSID和密码保存到Preferences的5个槽位中,用于后续连接,支持查看已保存密码。
- 壁纸设置: 扫描SD卡
/壁纸目录下的图片,解码并写入LittleFS作为时钟背景壁纸,显示解码/写入进度。 - 电池校准: 实时显示电压及电量,通过滑动条(80%~120%)调整校准系数,实时预览并保存。
- 自动轮播间隔: 占位页面,功能开发中。
- 内存储存: 显示LittleFS、RAM、PSRAM、SD卡容量及可用空间。

4. 系统功能
4.1 电源管理
- 亮度调节: 通过侧滑滑块调节屏幕亮度(1-255),保存到Preferences。
- 慢启动: 开机时亮度从0渐变到目标值,避免瞬间刺眼。
- 深度睡眠: 长按电源键(GPIO6)1秒后进入深度睡眠,可通过再次按下唤醒。睡眠前控制背光关闭。
- 电池监测: 专用任务每60秒读取ADC值,计算电压和百分比,滤波后更新原子变量。
4.2 外部RTC
- 支持SD3078 I2C RTC芯片,用于掉电后保持时间。
- 系统启动时从RTC同步时间,也可将系统时间写回RTC。
- 手动设置时间时同步到RTC。
4.3 动画与过渡
- 全屏缩放动画: 点击图标时,抓取当前屏幕和全屏容器,通过画布实现从图标中心放大到全屏的效果;退出时反向缩小。
- 滑动吸附: 侧滑容器和提示容器均有滑动吸附动画。
- 淡入淡出: 文件选择器进入/退出时带透明度动画。
关键技术实现
1. LVGL图形库深度应用
- 自定义字体(80点阵数字、24点阵中文)。
- 使用画布(canvas)实现缩放动画和FFT频谱。
- 利用事件系统处理手势、触摸、定时器。
- 多个容器嵌套,灵活布局。
2. FreeRTOS多任务设计
- SD卡初始化任务: 常驻监测SD卡插拔,触发扫描。
- 电池监测任务: 周期性读取ADC,更新电量。
- 慢启动任务: 控制亮度渐变。
- 解码任务: 图片、视频、音频解码分别在独立任务中运行,避免阻塞UI。
- 倒计时任务: 精确计时,通过原子变量与UI通信。
- 队列和信号量: 用于任务间同步(如视频帧队列、扫描进度队列、命令队列)。
3. 图像处理
- 自定义
ImageProcessor类,支持PNG/JPEG解码、缩放、裁剪、旋转。 - 使用区域平均采样实现高质量缩小,双线性插值实现放大。
- 自动处理横屏图像(旋转90°)以适应竖屏显示。
- 内存检查:优先使用PSRAM,失败时回退(但本项目中强制使用PSRAM)。
4. 音频播放
- 基于ESP8266Audio库,修改
AudioFileSourceSdFat以支持SdFat文件对象。 - 音频任务处理命令队列(打开、播放、暂停、跳转、设置音量),避免UI阻塞。
- 提供样本回调用于FFT频谱。
5. MJPEG视频解码
- JPEG解码器逐帧解码,三帧缓冲区乒乓操作。
- 解码任务和LVGL刷新任务通过队列同步。
- 支持暂停时显示进度条,可拖动跳转(基于文件偏移)。
6. 文件选择器
- 自定义无限滚动列表,10个容器循环使用,根据滚动位置动态调整内容。
- 文件列表从SD卡扫描结果加载,自动恢复上次滚动位置。
- 点击容器淡出并回调。
7. WiFi与HTTP
- 使用
connect_saved_wifi()尝试连接已保存的5个WiFi。 - 天气API使用ArduinoJson解析JSON响应。
- WiFi扫描任务在后台运行,不阻塞UI。
8. 配置存储
- Preferences库存储:亮度、音量、播放模式、WiFi密码、天气缓存、图片/音乐索引等。
- LittleFS存储壁纸二进制文件。
2026年5月15日更新
1. 新增功能模块
1.1 漫画阅读器(.cmj格式)
新增 fs_comic.cpp 模块,支持自定义 .cmj 漫画包格式(需使用提供的转换工具(手表工具.apk)。
高性能解码:采用双线程架构,解码任务运行在CPU0,UI任务在CPU1,通过队列传递解码请求和完成信息。
内存池技术:使用7块PSRAM内存池循环解码漫画页,避免卡顿。
交互优化:支持触摸滑动拖动、惯性滑动、缩放(通过按键1/3控制,ZOOM_COOLDOWN_MS防抖)、自动保存阅读进度(存储到LittleFS的 /comic_hist.txt)。
智能渲染:根据当前视野动态预取解码块,大幅减少内存占用和解码延迟。
1.2 文件管理器
新增 fs_filemanager.cpp 模块,支持浏览SD卡目录(/根目录)。
分页浏览:每页最多显示29个文件/文件夹,超出时自动显示“下一页”按钮。
文件类型识别:根据扩展名显示不同图标(文件夹、视频、图片、音乐、文本、漫画、未知)。
文件详情弹窗:点击文件显示路径和大小,并提供“删除”功能(删除后自动刷新列表)。
返回逻辑:物理按键2实现逐级返回,根目录下再次按下则退出文件管理器。
1.3 天气设置页面
新增 show_weather_settings_page,允许用户手动设置经纬度(纬度范围-9090,经度-180180),保存到Preferences。
天气获取任务读取该经纬度,调用Open-Meteo API获取7天预报。
2. 功能改进与优化
2.1 音乐播放器
FFT频谱改用ESP-DSP库:性能大幅提升,使用2048点FFT,50个频率条,动态彩色柱状图显示。
注意事项
部分功能需要进行转换请使用手表工具.apk
https://b23.tv/LfuoGkj
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程工程成员
知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。






评论