Update documentation for R528 board delivery
基于 openvela/NuttX + LVGL 开发的智能手环原生应用。项目以 336x480 自绘复古表盘为首页,提供健康数据、运动记录、睡眠摘要、秒表、手电筒、设置、自动演示和中英文切换。
应用已经在 goldfish-arm64-v8a-ap 模拟器和 DshanPixVela-Devkit V1 开发板上运行。心率、血氧和步数在未连接对应传感器时明确使用模拟数据,不将模拟值描述为真实采集值。
goldfish-arm64-v8a-ap
WATCH
smartband.c
HEALTH
tools/
docs/
扩展功能包括健走/跑步记录、睡眠阶段摘要、秒表、手电筒、自动巡航演示和中英文 UI。这些功能用于提升作品完整度,不作为真实健康传感器接入的声明。
查看完整演示视频(约 2 分 40 秒)
smartband/ ├── smartband.c # LVGL 应用主实现 ├── Kconfig # NuttX/openvela 应用配置 ├── Makefile # NuttX/openvela 应用编译入口 ├── fonts/ # 编译进固件的中文 LVGL 子集字体 ├── tools/generate_zh_font.py # 中文字体再生成脚本 ├── tools/install_to_openvela.py # 应用复制与注册脚本 ├── docs/R528_BOARD.md # R528 开发板编译、打包和烧录说明 ├── 视频和截图/ # 演示视频、模拟器截图和开发板照片 ├── 镜像/rtos_nuttx_r528s3-velaevb1_uart0_256Mnand.img ├── LICENSE ├── NOTICE └── THIRD_PARTY_NOTICES.md
/home/ubuntu/vela-opensource
pack
本仓库只包含应用源码,不包含完整 openvela 源码和交叉工具链。推荐使用赛题手册 v1.2 配套虚拟机;该源码包没有 Git 元数据,因此无法用 commit hash 唯一标识。复现时应记录所用赛题虚拟机/源码包版本。
模拟器构建需要 python3、CMake 和 Ninja。配套虚拟机通常已经安装;缺少 Ninja 时执行:
python3
sudo apt update sudo apt install ninja-build
将本仓库放在 openvela 源码树之外,在本仓库根目录执行:
python3 tools/install_to_openvela.py \ --openvela-root /home/ubuntu/vela-opensource
脚本会:
apps/examples/smartband
apps/examples/Kconfig
apps/examples/Make.defs
脚本可重复运行;修改本仓库源码后再次运行即可同步。它不会替代 openvela 的目标配置和固件构建步骤。
在 vendor/openvela/boards/vela/configs/goldfish-arm64-v8a-ap/defconfig 中启用:
vendor/openvela/boards/vela/configs/goldfish-arm64-v8a-ap/defconfig
CONFIG_LV_USE_NUTTX=y CONFIG_LV_USE_NUTTX_TOUCHSCREEN=y CONFIG_INPUT_TOUCHSCREEN=y CONFIG_EXAMPLES_SMARTBAND=y CONFIG_EXAMPLES_SMARTBAND_PROGNAME="smartband" CONFIG_EXAMPLES_SMARTBAND_PRIORITY=100 CONFIG_EXAMPLES_SMARTBAND_STACKSIZE=65536 CONFIG_EXAMPLES_SMARTBAND_INPUT_DEVPATH="/dev/input0"
同一显示环境不要同时自动启动另一个 LVGL Demo:
# CONFIG_EXAMPLES_LVGLDEMO is not set
按硬件能力选配:
# 使用 libuv 驱动 LVGL 事件循环 CONFIG_LV_USE_NUTTX_LIBUV=y # 读取注册为 /dev/temp0 的 SHT3x 温度设备 CONFIG_SENSORS_SHT3X=y # 仅在排查触摸坐标时打开 CONFIG_EXAMPLES_SMARTBAND_TOUCH_DEBUG=y
cd /home/ubuntu/vela-opensource ./build.sh \ vendor/openvela/boards/vela/configs/goldfish-arm64-v8a-ap/ \ --cmake -j$(nproc)
成功标志:
#### build completed successfully
从 R528 的传统 Make 构建切换到 CMake 时,如果提示 Please distclean previous make build,先执行:
Please distclean previous make build
make -C nuttx distclean rm -rf cmake_out/vela_goldfish-arm64-v8a-ap
然后重新运行上面的构建命令。
./emulator.sh cmake_out/vela_goldfish-arm64-v8a-ap/
出现 NSH 提示符后运行:
goldfish-armv8a-ap> smartband
需要从 SSH 会话启动图形模拟器时,先确认 echo $DISPLAY 非空;否则应在 Ubuntu 图形桌面的终端中运行。
echo $DISPLAY
R528 开发板不能使用 goldfish 的 CMake 产物,需要使用板级 Make 构建和 lichee 打包:
cd /home/ubuntu/vela-opensource ./build.sh \ vendor/allwinnertech/boards/r528/r528s3-velaevb1/configs/nsh/ \ -e -Wno-error -j$(nproc)
然后进入 lichee 环境执行 lunch_nuttx 2 和 pack。最终镜像通常位于:
lunch_nuttx 2
vendor/allwinnertech/lichee/out/r528s3/velaevb1_nand/ rtos_nuttx_r528s3-velaevb1_uart0_256Mnand.img
完整的安全显示配置、.note.gnu.build-id 稀疏镜像处理、打包、PhoenixSuit 烧录和串口验证步骤见 R528 开发板说明。
.note.gnu.build-id
仓库提供的预构建镜像仅适用于对应的 R528S3 Vela EVB1 NAND 配置:
文件:镜像/rtos_nuttx_r528s3-velaevb1_uart0_256Mnand.img 大小:22491136 bytes(约 21.4 MiB) SHA256:5E2B736571BEC5E2C0B079858C0D6AE98F45706D9F05081B090F3E270FDE38A6
不要将该镜像烧录到型号或存储布局不一致的开发板。
WATCH -> LAUNCHER -> HEALTH -> SPORT
应用采用“真实数据优先、模拟数据兜底”的策略:
time()
CLOCK_REALTIME
2026-07-01 09:30
CONFIG_SENSORS_SHT3X
/dev/temp0
/proc/meminfo
/proc/uptime
Settings 页面显示数据源状态:
SIM
MIXED
REAL
模拟时间用于保证无 RTC 环境下界面完整,不应当作为“正确当前时间”的证据。
这里的“真实时间”来自 NTP 校准后的系统实时时钟 CLOCK_REALTIME,不是开发板上可断电保持的硬件 RTC。当前 R528 开发板没有可持久保持时间的硬件 RTC 时,每次断电重启后都需要重新联网同步,或通过串口手动设置时间。
首先在 R528 板级 defconfig 中启用 NTP 客户端并重新编译、打包、烧录:
defconfig
CONFIG_NETUTILS_NTPCLIENT=y CONFIG_SYSTEM_NTPC=y
烧录后,在串口 NSH 中连接 2.4 GHz WiFi。下面命令已经在赛题配套虚拟机和 R528 开发板流程中验证;把 SSID 和密码替换为实际值:
ifup wlan0 wapi mode wlan0 2 wapi psk wlan0 "你的WiFi密码" 3 wapi essid wlan0 "你的WiFi名称" 1 renew wlan0 ifconfig
ifconfig 中看到 wlan0 获得 IP 后,分别检查外网和 DNS:
ifconfig
wlan0
ping 8.8.8.8 ping pool.ntp.org
ntpcstart
网络正常后启动 NTP,并查看同步状态和系统时间:
ntpcstart ntpcstatus date
NTP 成功更新 CLOCK_REALTIME 后,smartband 会在下一次定时刷新时自动切换为真实系统时间,Settings 数据源状态也会相应更新。如果显示时间与北京时间相差 8 小时,需要在板级系统中设置 TZ=CST-8;时区设置和持久化方式取决于所用 openvela 源码版本。
smartband
TZ=CST-8
没有网络时,可以通过串口临时设置系统时间:
date -s "Jul 10 12:30:00 2026" date
手动设置同样只在当前上电周期有效;断电后是否保留取决于开发板是否存在并启用了硬件 RTC。
lv_is_initialized()
lv_nuttx_init()
result.disp
distclean
make -C nuttx distclean
cmake_out
ninja-build
DISPLAY
date -s
中文 UI 使用编译进固件的 LVGL C 子集字体,不依赖 /data/font、Freetype 或运行时 TTF。修改中文文案后重新生成:
/data/font
python3 tools/generate_zh_font.py \ --font /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc
Windows 示例:
python tools/generate_zh_font.py --font C:/Windows/Fonts/NotoSansSC-VF.ttf
字体和依赖的许可证信息见 THIRD_PARTY_NOTICES.md。
本项目采用 Apache License 2.0,详见 LICENSE、NOTICE 和 THIRD_PARTY_NOTICES.md。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
openvela Smartband
基于 openvela/NuttX + LVGL 开发的智能手环原生应用。项目以 336x480 自绘复古表盘为首页,提供健康数据、运动记录、睡眠摘要、秒表、手电筒、设置、自动演示和中英文切换。
应用已经在
goldfish-arm64-v8a-ap模拟器和 DshanPixVela-Devkit V1 开发板上运行。心率、血氧和步数在未连接对应传感器时明确使用模拟数据,不将模拟值描述为真实采集值。初赛要求覆盖
WATCH显示时间、日期和健康摘要;系统时间可信时读取 RTC/NTP,否则使用模拟时钟并标记数据源smartband.c、表盘截图HEALTH展示心率、血氧、温度和传感器状态;无传感器时使用动态模拟值smartband.c、演示视频smartband.c、Settings 数据源状态tools/、docs/、合规文件扩展功能包括健走/跑步记录、睡眠阶段摘要、秒表、手电筒、自动巡航演示和中英文 UI。这些功能用于提升作品完整度,不作为真实健康传感器接入的声明。
效果展示
查看完整演示视频(约 2 分 40 秒)
项目结构
已验证环境
/home/ubuntu/vela-opensourcegoldfish-arm64-v8a-ap,CMake + Ninjapack本仓库只包含应用源码,不包含完整 openvela 源码和交叉工具链。推荐使用赛题手册 v1.2 配套虚拟机;该源码包没有 Git 元数据,因此无法用 commit hash 唯一标识。复现时应记录所用赛题虚拟机/源码包版本。
模拟器构建需要
python3、CMake 和 Ninja。配套虚拟机通常已经安装;缺少 Ninja 时执行:集成应用
将本仓库放在 openvela 源码树之外,在本仓库根目录执行:
脚本会:
apps/examples/smartbandapps/examples/Kconfig中注册配置入口apps/examples/Make.defs中注册应用构建入口脚本可重复运行;修改本仓库源码后再次运行即可同步。它不会替代 openvela 的目标配置和固件构建步骤。
模拟器运行
1. 配置
在
vendor/openvela/boards/vela/configs/goldfish-arm64-v8a-ap/defconfig中启用:同一显示环境不要同时自动启动另一个 LVGL Demo:
按硬件能力选配:
2. 编译
成功标志:
从 R528 的传统 Make 构建切换到 CMake 时,如果提示
Please distclean previous make build,先执行:然后重新运行上面的构建命令。
3. 启动
出现 NSH 提示符后运行:
需要从 SSH 会话启动图形模拟器时,先确认
echo $DISPLAY非空;否则应在 Ubuntu 图形桌面的终端中运行。开发板运行
R528 开发板不能使用 goldfish 的 CMake 产物,需要使用板级 Make 构建和 lichee 打包:
然后进入 lichee 环境执行
lunch_nuttx 2和pack。最终镜像通常位于:完整的安全显示配置、
.note.gnu.build-id稀疏镜像处理、打包、PhoenixSuit 烧录和串口验证步骤见 R528 开发板说明。仓库提供的预构建镜像仅适用于对应的 R528S3 Vela EVB1 NAND 配置:
不要将该镜像烧录到型号或存储布局不一致的开发板。
操作方式
WATCH -> LAUNCHER -> HEALTH -> SPORT数据来源
应用采用“真实数据优先、模拟数据兜底”的策略:
time()/CLOCK_REALTIME2026-07-01 09:30开始递增的模拟时钟CONFIG_SENSORS_SHT3X后读取/dev/temp0/proc/meminfo、/proc/uptimeSettings 页面显示数据源状态:
SIM:主要使用模拟或兜底数据MIXED:系统/板卡真实数据与模拟数据混合REAL:主要健康数据源均为真实数据;当前未接入 PPG/计步传感器时通常不会出现模拟时间用于保证无 RTC 环境下界面完整,不应当作为“正确当前时间”的证据。
通过 WiFi + NTP 获取真实时间
这里的“真实时间”来自 NTP 校准后的系统实时时钟
CLOCK_REALTIME,不是开发板上可断电保持的硬件 RTC。当前 R528 开发板没有可持久保持时间的硬件 RTC 时,每次断电重启后都需要重新联网同步,或通过串口手动设置时间。首先在 R528 板级
defconfig中启用 NTP 客户端并重新编译、打包、烧录:烧录后,在串口 NSH 中连接 2.4 GHz WiFi。下面命令已经在赛题配套虚拟机和 R528 开发板流程中验证;把 SSID 和密码替换为实际值:
ifconfig中看到wlan0获得 IP 后,分别检查外网和 DNS:ntpcstart:说明 NTP 配置尚未编进当前镜像,需要重新检查defconfig和构建产物。网络正常后启动 NTP,并查看同步状态和系统时间:
NTP 成功更新
CLOCK_REALTIME后,smartband会在下一次定时刷新时自动切换为真实系统时间,Settings 数据源状态也会相应更新。如果显示时间与北京时间相差 8 小时,需要在板级系统中设置TZ=CST-8;时区设置和持久化方式取决于所用 openvela 源码版本。没有网络时,可以通过串口临时设置系统时间:
手动设置同样只在当前上电周期有效;断电后是否保留取决于开发板是否存在并启用了硬件 RTC。
异常处理
lv_is_initialized()防止重复初始化 LVGLlv_nuttx_init()后检查result.disp,失败时记录错误、释放资源并退出SIM/MIXED/REAL使降级状态可观察常见问题
distcleanmake -C nuttx distclean,删除对应cmake_out后重编ninja-buildDISPLAYdate -s或 NTP 设置系统时间字体维护
中文 UI 使用编译进固件的 LVGL C 子集字体,不依赖
/data/font、Freetype 或运行时 TTF。修改中文文案后重新生成:Windows 示例:
字体和依赖的许可证信息见 THIRD_PARTY_NOTICES.md。
开源说明
本项目采用 Apache License 2.0,详见 LICENSE、NOTICE 和 THIRD_PARTY_NOTICES.md。