目录

openvela 智能手环应用(表盘 · 心率 · 计步)

基于 openvela 平台(C + LVGL) 的智能手环应用,2026 CCF 开源创新大赛「基于 openvela 的智能手环应用开发」参赛作品。

初赛三项功能全部实现,并在宿主机用 LVGL 官方内置 SDL 驱动真编译真运行、截图存证(demo/):

  1. 表盘与时间显示 — 大号时/分 + 秒 + 年月日星期,取系统时间秒级刷新;
  2. 健康数据展示 — 心率(实时数值 + 滚动波形 + 心率分区)与计步(进度环 + 步数/距离/卡路里),模拟数据源驱动;
  3. 基础 UI 交互 — 表盘 ↔ 心率 ↔ 计步 三页左右滑动切换,带过渡动画与底部页码指示点。

演示

表盘 心率 计步 异常兜底
watchface heart steps exception

滑动切页动图:demo/demo.gif

截图由程序在 --shots 模式下用 LVGL lv_snapshot 从真实渲染缓冲导出,非手绘、非拼图。

快速开始(Ubuntu / WSL)

# 1. 安装依赖
sudo apt install -y build-essential cmake pkg-config libsdl2-dev git
#   (可选,仅生成 PNG/GIF 演示素材需要)
sudo apt install -y python3-pil ffmpeg

# 2. 构建(首次会自动拉取 LVGL v9.4.0 到 third_party/lvgl)
scripts/build.sh

# 3a. 交互式运行(需要图形环境;方向键切页,↑ 键切换传感器故障演示)
scripts/run_demo.sh
#     或直接: build/smartband

# 3b. 无窗截图模式(无图形环境也可,产出 demo/*.png 与 demo/demo.gif)
scripts/run_demo.sh --shots

交互方式:

  • 鼠标左右拖拽方向键 ←/→:在 表盘 / 心率 / 计步 间切换;
  • 方向键 ↑:注入 / 解除传感器故障,观察异常兜底(数值变 --);
  • 关闭窗口退出。

项目结构

openvela02-smartband/
├── src/
│   ├── main.c            # 宿主机入口:SDL 显示/输入、tick、脚本演示与截图(平台相关)
│   ├── app.c             # 页面管理:tileview 三页、滑动切换、页码点、键盘导航、定时器
│   ├── sensors.h/.c      # 数据源抽象 + 宿主机模拟实现(心率/计步/时间/故障注入)
│   ├── ui_watchface.c    # 表盘页:时间/日期
│   ├── ui_heart.c        # 心率页:数值 + 滚动波形 + 分区
│   ├── ui_steps.c        # 计步页:进度环 + 步数/距离/卡路里
│   └── theme.c/.h        # 配色与页面样式
├── lv_conf.h             # LVGL 配置(32bpp、SDL、snapshot、字体)
├── CMakeLists.txt        # 一键构建(拉 LVGL + SDL2 链接)
├── scripts/              # build.sh / run_demo.sh / make_media.py
├── docs/PORTING_OPENVELA.md  # 移植到 openvela 原生应用的说明
├── demo/                 # 运行截图与 GIF
├── LICENSE NOTICE THIRD_PARTY.md
└── third_party/lvgl/     # LVGL(构建时拉取,不入库)

设计说明

  • UI 布局:竖向 240×280 手环屏比例,深色底 + 每页强调色(表盘青 / 心率红 / 计步绿), 大字号读数、进度环、波形图,底部三点页码指示当前页,观感统一、清晰可读。
  • 页面管理:用 LVGL tileview 承载三页,左右滑动即切页并带内置过渡动画; 切页事件同步更新底部页码点;无触摸环境用方向键(keypad indev + 组焦点)同样可切。
  • 数据源sensors.h 定义与平台无关的读取接口,宿主机用合成数据(步频累加、心率有界随机游走、 类 PPG 波形);移植到 openvela 时换成 uORB 订阅即可,UI 与算法不改(见 docs/PORTING_OPENVELA.md)。
  • 异常处理
    • 传感器无数据/故障 → 心率、步数显示 -- 占位并变警示色,不崩溃;
    • 心率越界 → 钳制到 45–190 bpm 合理区间;
    • 步数回退 → 只增不减,丢弃异常回退帧;
    • RTC 未同步(年份异常)→ 显示 --:--time not synced
    • 切页到首/末页再滑 → 到头即止,不越界。

移植到 openvela

业务代码(页面 / 逻辑 / 异常兜底)与平台解耦,移植到 openvela 原生应用只需替换 数据源实现入口 + 构建两处,UI 三页零改动。目录结构、nuttx_add_application 构建、uORB 数据源映射与诚实的“待环境实测”项,见 docs/PORTING_OPENVELA.md

开源合规

  • 许可证:Apache-2.0LICENSENOTICE)。
  • 第三方依赖:仅图形库 LVGL(MIT) 与宿主机 SDL2(Zlib),声明见 THIRD_PARTY.md; LVGL 按固定版本 v9.4.0 由构建脚本拉取,不随仓库分发。
  • src/ 下全部为原创代码。

团队

程柯雷(太原理工大学)|单人参赛。

关于

openvela smart band app (watchface + heart-rate + steps), C + LVGL, host SDL simulator

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

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