目录

<<<<<<< HEAD

smart_band

简介

smart_band 是一个基于 OpenVela (NuttX) + LVGL + libuv 的智能手表演示应用,模拟小米手环的核心 UI 交互。

核心特性:

  • 表盘主页(时间、步数、心率、电量)
  • 心率测量(三态状态机 + 折线图,数据跨页面持久化)
  • 9 种运动模式(跑步、骑行、瑜伽等),实时计时 + 卡路里估算
  • 运动记录历史(Activity Log 卡片列表,环形缓冲存储)
  • 虚拟宠物互动(idle / jump / sleep / stretch 帧动画)
  • 秒表、音乐控制、手电筒、睡眠追踪、设置
  • 全局通知浮层(模拟信息提醒)
  • 自适应分辨率缩放(设计基准 194×368)

演示效果 (Demo Showcase)

动态演示 功能说明
Dialplate 主表盘:实时时钟与动态步数计数
HeartRate 心率监测:动态折线图与状态机切换
Animation 宠物互动:多帧动画逻辑与资源加载

更多功能页面展示,请查看 docs/demo_gallery.docx

环境构建

本项目采用脚本化工程管理,通过工具链实现“更新(拉取)-配置-编译-部署”的一键闭环。

第一步:克隆本项目

git clone https://gitlink.org.cn/yiii/openvela.git
cd openvela

第二步:一键同步与配置

我们提供了一个集成脚本,它会自动执行以下任务:

  • 从 GitLink 拉取或更新最新源码。
  • 自动检查并修复 defconfig 中的关键配置项。
  • 确保开发环境符合编译要求。
  • 打开模拟器。

执行以下命令即可一键完成准备工作:

# 赋予脚本执行权限
chmod +x scripts/sync_and_config.sh
# 运行脚本
./scripts/sync_and_config.sh

第三步:运行


# 推送资源文件(模拟器启动后执行)
adb push packages/demos/smart_band/resource/font/assets/* /data/font/
adb push packages/demos/smart_band/resource/image/assets/* /data/image/

# 运行应用,启动智能手环程序(在模拟器中执行)
smart_band &

项目结构

smart_band/
├── setup.sh               # 环境配置脚本
├── bandx_demo_main.c      # main() 入口 → lv_init → uv_loop
├── bandx_demo.c            # 自适应分辨率 + page_init + resource_init
├── Makefile                # CSRCS = find *.c 全量编译
├── page/                   # 22 个 LVGL Fragment 页面
│   ├── page.h/c            # 页面管理器 (push/pop/switch)
│   ├── page.inc            # 页面注册表
│   ├── dialplate.c         # 主表盘
│   ├── heart_rate.c        # 心率监测 + 折线图
│   ├── launcher.c          # 9 宫格启动器 (flex 可滚动)
│   ├── sport.c             # 运动入口
│   ├── running.c           # 跑步 (计时+配速+距离)
│   ├── ... (共 22 页)      # 详见页面列表
│   └── _template.c         # 页面开发模板
├── hal/                    # 硬件抽象层 (模拟传感器)
├── resource/               # 字体/图片/样式 → .inc 展开为静态查找表
├── utils/                  # 动画标签 / 自动演示 / 运动数据环形缓冲
└── notification/           # 全局通知浮层 (lv_layer_top)

核心设计概览 (Architecture Overview)

smart_band 采用了 “页面导航栈”“静态内存模型” 设计,核心设计要点如下:

  • 模块化导航:采用栈式 push/pop 机制,通过 page.inc 实现页面注册与路由解耦。
  • 内存安全性:核心业务数据采用静态内存分配,规避了嵌入式环境下的堆碎片问题。
  • 自适应适配:内置 PAGE_SCALE 缩放宏,支持一套代码适配多分辨率屏幕。

更多详细设计决策与架构图,请查看 docs/design_modules.docx

操作手册

启动与桌面导航

应用启动后进入主表盘界面,显示当前时间、日期、步数、心率和电池电量。

  • 左右滑动:在表盘、心率、计步三个页面间切换
  • 从表盘向下滑动进入启动器:显示 9 宫格应用列表,包含心率、音乐、秒表、手电筒、睡眠、运动、活动记录、宠物猫、设置
  • 启动器可上下滚动:如果屏幕高度不足以显示全部 9 个应用图标,向上滑动查看更多

表盘 (Dialplate)

操作 效果
查看时间 中央大字显示时:分(110px 字体),下方显示日期与星期
查看状态 顶部图标栏显示蓝牙连接状态和电池电量
查看快捷信息 底部显示天气温度、当日步数、实时心率
左滑 进入心率监测页
右滑 进入计步器页

心率 (Heart Rate)

操作 效果
进入页面 中央显示当前心率值(BPM),红色心跳动画
点击 “Measure” 按钮 开始 30 秒心率测量,进度条实时更新
测量进行中 圆弧进度环旋转,每 10 秒记录一次采样点
测量完成 显示平均心率 + 评估文字(Low HR / Normal HR / High HR)
上滑 进入心率分析图表页(折线图 + 较大实时数值)
下滑 返回测量主页
左滑 / 右滑 切换页面(计步器 / 表盘)

心率折线图数据存储在全局数组中,退出页面后重新进入数据依然保留。

计步器 (Step Counter)

操作 效果
进入页面 中央显示当日步数(大字),圆弧显示目标完成度(目标 10000 步)
查看进度 百分比数值 + 距离换算(km) + 卡路里估算
左滑 / 右滑 切换页面(表盘 / 心率)

启动器 (Launcher)

操作 效果
点击 “Heart” 进入心率监测页
点击 “Music” 进入音乐控制页
点击 “StWatch” 进入秒表页
点击 “Light” 进入手电筒页
点击 “Sleep” 进入睡眠追踪页
点击 “Sport” 进入运动模式选择页
点击 “Activity” 进入运动记录历史
点击 “Pet Cat” 进入虚拟宠物互动页
点击 “Settings” 进入设置页
右滑 返回表盘

运动模式 (Sport / Running / 及其他)

**运动入口页 (Sport)**:显示 9 种运动类型列表,点击进入对应运动。

运动类型 支持的功能
跑步 (Running) 配速、距离、卡路里
骑行 (Riding) 速度、距离
瑜伽 (Yoga) 时间、心率
拉伸 (Stretching) 时间、心率
滑雪 (Skiing) 速度、距离
乒乓球 (Table Tennis) 时间、心率
篮球 (Basketball) 时间、心率
排球 (Volleyball) 时间、心率
更多运动 (More Sports) 时间、心率

运动页面通用操作

操作 效果
点击 Start / ▶️ 开始计时
点击 Pause / ⏸️ 暂停计时
点击 Resume / ▶️ 继续计时
点击 🚩 旗帜按钮 结束运动并保存记录
点击 ↺ 重置按钮 重置当前运动(不保存)
点击 + / - 按钮 调整目标时长(仅在暂停时可用)
右滑 返回上一页

运动结束后计时 > 0 秒即可保存到 Activity Log。保存的记录包括运动类型、时长、卡路里。

运动记录 (Activity Log)

操作 效果
进入页面 显示历史运动记录列表,每条显示图标、名称、时长、卡路里
卡片颜色 不同运动类型自动分配不同颜色标识
无记录时 显示 “No activities yet. Go for a run!”
右滑 返回上一页

最多保存 20 条记录,超出后自动淘汰最旧的。

虚拟宠物 (Pet Cat)

操作 效果
进入页面 显示猫咪 idle 动画(三帧 ping-pong + 呼吸缩放)
点击猫咪 随机触发一个动作并显示对应文字
动作 - Jump 6 帧快速跳跃动画(0.72 秒),文字 “Meow“ / “Purr
动作 - Sleep 8 帧慢速睡眠动画(1.6 秒),文字 “Zzz…” / “=w=”
动作 - Stretch 8 帧中速伸展动画(1.2 秒),文字 “Mmm~” / “Stretch!”
右滑 返回启动器

动作播放期间点击无效,播放结束后自动恢复 idle 状态。

秒表 (Stop Watch)

操作 效果
点击 Start 开始计时(mm:ss.ms 格式)
点击 Pause 暂停计时
点击 Resume 继续计时
点击 Reset 重置归零
右滑 返回上一页

音乐控制 (Music)

操作 效果
查看曲目 显示当前播放曲目名称
点击 ▶️ / ⏸️ 播放 / 暂停
点击 ⏮️ / ⏭️ 上一曲 / 下一曲
拖动进度条 调整播放进度
右滑 返回上一页

手电筒 (Flashlight)

操作 效果
进入页面 屏幕切换为白色背景并调至最高亮度
点击屏幕任意位置 关闭手电筒,返回上一页
右滑 返回上一页

睡眠追踪 (Sleep)

操作 效果
进入页面 显示睡眠时间段可视化图表
查看详情 显示深睡/浅睡时长及占比

设置 (Settings)

操作 效果
进入页面 显示系统设置选项

通知提醒

事件 效果
手机收到信息 屏幕中央弹出通知卡片(模拟来电提醒),5 秒后自动消失

文档中心 (Documentation)

本项目详细的架构设计以及模块说明,请参考 docs/ 目录:

  • docs/project_structure.docx :项目目录结构详细说明与组件职责分析。
  • docs/design_modules.docx :核心设计模块详解(含页面导航、内存优化策略及适配方案)。
  • docs/api_reference.docx :核心 UI 管理接口与驱动 API 说明。

许可证

Apache License 2.0

关于
25.2 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号