目录

SmartBand — openvela 智能手环 Demo

基于 openvela 平台、C + LVGL 编写的简化版智能手环应用,含表盘、心率监测、计步三个页面。


快速开始

1. 编译

将本项目源代码放入已经编译好的 openvela 框架下的 packages/demos/ , 然后执行以下 bash 命令进行编译:

cd ~/Desktop/openvela
./build.sh vendor/openvela/boards/vela/configs/goldfish-arm64-v8a-ap/

如果提示组件未启用,先执行菜单配置:

./build.sh vendor/openvela/boards/vela/configs/goldfish-arm64-v8a-ap/ menuconfig

/ 搜索以下两项并设为 y

  • LV_USE_FRAGMENT
  • LVX_USE_DEMO_SMARTBAND

然后按 QY 保存退出,再执行编译。

2. 运行

./emulator.sh vela

在模拟器终端中输入:

smartband &

3. 操作

操作 效果
点击表盘 蓝色 STEPS 条 进入计步页面
点击表盘 红色 HR 条 进入心率页面
子页面点击 < back 返回表盘
心率页点击 Reset 重置统计数据

页面展示

表盘(Dialplate)

┌──────────────────────┐
│ BT          BAT 85%  │   ← 状态栏
│   05-30  SAT         │   ← 日期
│     14:26            │   ← 时间
│ ┌────────────────┐   │
│ │ STEPS ███ 42%  │   │   ← 点击进入计步页
│ │       4253     │   │
│ └────────────────┘   │
│ ┌────────────────┐   │
│ │ HR   ███ 58%   │   │   ← 点击进入心率页
│ │      HR:72     │   │
│ └────────────────┘   │
└──────────────────────┘
  • 1 秒刷新一次时间、步数、心率
  • 步数目标 10000 步
  • 无需任何外部字体或图片资源

心率(Heart Rate)

┌──────────────────────┐
│  < back  Heart Rate  │
│       ● (脉动)       │   ← 红色圆 24↔36px 脉动动画
│       72             │   ← 当前心率大字
│       bpm            │
│  Range  58-92        │   ← 本次会话最小值 - 最大值
│  Recent 14:26        │
│ ┌──────────────────┐ │
│ │ ··· ····· ····   │ │   ← 趋势图(20 个数据点)
│ └──────────────────┘ │
│      [Reset]         │   ← 重置统计数据
└──────────────────────┘
  • 每 2 秒刷新一次数据
  • 心率模拟 55~100 bpm 随机变化
  • 趋势图使用 lv_chart 圆形缓冲模式

计步(Step Counter)

┌──────────────────────┐
│  < back       Steps  │
│                      │
│     ╭──────────╮     │
│    ╱  42% ◀━  ╲    │   ← 蓝色弧形进度环
│    │   steps   │     │
│     ╲   42%   ╱     │
│      ╰──────────╯    │
│       4253           │   ← 步数大字
│  dist   3.187 km     │   ← 距离(步 × 0.75m)
│  carl   187 kcal     │   ← 卡路里(步 × 0.044)
│  target 5000 steps   │   ← 目标值
└──────────────────────┘
  • 每 1 秒刷新一次
  • 步数模拟从 4253 起步,每秒 +0~2
  • 距离/卡路里根据步数实时换算

项目结构

packages/demos/smartband/
├── smartband_main.c      # 入口:LVGL + libuv 初始化
├── smartband.c           # 根容器 + Fragment Manager
├── smartband.h           # 公开接口
│
├── hal/
│   ├── clock.c/.h        # 系统时间读取
│   ├── step_sim.c/.h     # 步数模拟
│   └── heartrate_sim.c/.h # 心率模拟
│
├── page/
│   ├── page.h/.c         # 页面管理器
│   ├── page.inc          # 页面注册表
│   ├── dialplate.c       # 表盘页面
│   ├── heartrate.c       # 心率页面
│   └── stepcounter.c     # 计步页面
│
├── CMakeLists.txt        # CMake 构建
├── Makefile              # Make 构建
├── Kconfig               # 配置开关
├── smartband_dev_plan.md # 方案文档
└── .gitignore            # 忽略编译产物

常见问题

Q: 提示 smartband: command not found

A: 说明应用没有被编译进去。执行 menuconfig 确认 LVX_USE_DEMO_SMARTBANDLV_USE_FRAGMENT 均已启用,然后重新编译。

Q: 页面显示空白

A: 第一次运行时的 lv_obj_remove_style_all() bug 已修复。如果还是空白,执行 distclean 后重编:

./build.sh vendor/openvela/boards/vela/configs/goldfish-arm64-v8a-ap/ distclean -j8
./build.sh vendor/openvela/boards/vela/configs/goldfish-arm64-v8a-ap/

Q: 点击 STEPS/HR 条提示 unknown page name

A: 需要删除 page.c 的旧 .o 文件强制重编:

rm -f packages/demos/smartband/page/page.c.home.anqmaly.Desktop.openvela.packages.demos.smartband.o
rm -f packages/demos/smartband/page/page.c.home.anqmaly.Desktop.openvela.packages.demos.smartband_1.o
./build.sh vendor/openvela/boards/vela/configs/goldfish-arm64-v8a-ap/

Q: 新增页面怎么加?

A: 三步:① 创建 page/xxx.c(末尾加 PAGE_CLASS_DEF(xxx))→ ② page.inc 添加 PAGE_DEF(xxx) → ③ 删 page/page.o 重编。

Q: 为什么不用图标和手势?

A: 为简化外部依赖,所有图标用纯文本替代;手势在模拟器中需要鼠标拖拽操作不直观,改为点击信息条导航。


技术参数

项目 规格
分辨率 194 × 368
字体 LVGL 内置 font_montserrat(12/14/16/20/32)
外部依赖 无(零图片、零字体文件)
代码量 ~900 行 C
构建方式 Make + CMake
页面管理 LVGL Fragment Manager
事件循环 libuv
关于
53.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

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