站内搜索
发作品签到
专业版

智能手表/多功能终端

工程标签

4.9k
0
0
6

简介

本项目是一个基于 ESP32 S3微控制器和 LVGL*图形库的智能手表/多功能终端 拥有时间显示、图片浏览、视频播放、音乐播放、小说,漫画、计算器、2048游戏,日历、天气预报

简介:本项目是一个基于 ESP32 S3微控制器和 LVGL*图形库的智能手表/多功能终端 拥有时间显示、图片浏览、视频播放、音乐播放、小说,漫画、计算器、2048游戏,日历、天气预报
星火计划2026
复刻成本:60

开源协议

GPL 3.0

创建时间:2026-03-18 23:32:31更新时间:2026-05-18 09:42:51

描述

智能手表/多功能终端项目介绍

项目概述

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

Screenshot_2026-03-13-20-38-32-728_com.miui.galle.jpg

硬件平台

  • 主控芯片: 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卡插拔、扫描进度),自动消失。
  • 全屏容器: 点击应用图标后,通过缩放动画展开全屏应用界面,支持返回手势。

IMG_20260313_203305.jpg

2. 文件管理系统

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

IMG_20260313_203523.jpg

3. 应用功能

3.1 图片浏览器

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

IMG_20260313_202309.jpg

3.2 视频播放器

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

IMG_20260313_203438.jpg

3.3 音乐播放器

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

IMG_20260313_203510.jpg

3.4 小说阅读器

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

IMG_20260313_203414.jpg

3.5 计算器

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

IMG_20260313_203546.jpg

3.6 2048游戏

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

IMG_20260313_203534.jpg

3.7 秒表与倒计时

  • 秒表: 支持开始、暂停、复位,显示时:分:秒.毫秒。
  • 倒计时: 通过滚轮设置分钟和秒,启动后显示环形进度条,时间颜色随剩余时间变化(绿→橙→红)。倒计时在后台独立任务运行,支持暂停/继续/复位。
  • 两页左右滑动切换,GPIO6返回。
IMG_20260313_203556.jpgIMG_20260313_203634.jpg
IMG_20260313_203610.jpgIMG_20260313_203622.jpg

3.8 日历

  • 使用LVGL日历控件,显示当前月份,可切换年月。
  • 可高亮特定日期(示例中未启用)。
  • GPIO6返回。

IMG_20260313_203644.jpg

3.9 天气

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

IMG_20260313_203343.jpg

3.10 设置

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

IMG_20260313_203654.jpg

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

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
lib.zip
121
2
代码+pcb+外壳.zip
87
3
固件.zip
43
4
安卓app源码.zip
32
5
手表工具.apk
25
克隆工程
添加到专辑
0
0
分享
Logo GIF0
侵权投诉

工程成员

知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航