开源OV-Watch:怎么做一个智能手表

很多人拿到开源手表仓库,第一件事是在电脑里把界面跑起来。表盘能滑、菜单能点,就觉得这块表差不多做出来了。其实那只是 Windows 上的仿真,没有真板子,也没有传感器。要做出一块能戴的 OV-Watch,得先把硬件和电源通,再把 Boot 和 APP 烧对,心率、抬腕这些最后才轮到。界面好看,排在后面。

OV-Watchgitee.com/kingham/OV-Watch,GPL-3.0)是油炸鸡做的开源手表。主控 STM32F411CEU6,系统 FreeRTOS,界面 LVGL 8.2。作者标称物料大约 80 元,定位是能戴的低成本实验平台,不是对标市售全功能手表。仓库不是「一把烧进去就完事」:硬件图纸、现成固件、Keil 工程、Windows 仿真是分开的。本文按做一块表的顺序写:先有板子和电源,再烧 Boot 与 APP,最后才谈心率和抬腕。

板子上谁在干活

图1:屏幕上的表盘跑在 STM32 里。心率和计步是旁边的芯片(示意)

text 复制代码
触摸屏 → LVGL 页面(APP)
  → FreeRTOS 任务
    → STM32F411:Bootloader + APP
      → MPU6050 计步 / 抬腕
      → EM7028 心率(血氧未完成)
      → SPL06-001 气压 → 海拔
      → LSM303DLHC 地磁 → 指南针
      → KT6368A 蓝牙(SPP,可关电,可 OTA)
      → 外置 EEPROM 存设置(Datasave.c)
电源:TPS63020。关机是关掉 3V3,只留电池给 RTC

主控是 Cortex-M4。没有 Linux,也没有 Wear OS 那种用户态和应用商店。FreeRTOS 把界面刷新、传感器采样、蓝牙收发拆成任务。LVGL 只负责画页面和触摸。设置不进文件系统,写在外置 EEPROM 里,入口在 Datasave.c。重启后还能记住亮度、表盘选项,靠的是这块,不是 SD 卡。

传感器也不在主控里「算完再显示」。计步和抬腕靠六轴 MPU6050;心率靠 EM7028 的光电;海拔靠气压计 SPL06-001;指南针靠地磁 LSM303DLHC。主控只是读数,再交给 LVGL 画。表盘上同时有心率和海拔,不代表 F411 一颗全包了。蓝牙在 V2.4 换成 KT6368A:不用时可以拉掉使能省电,SPP 还能走无线升级。更早的 KT6328A 关不干净,作者才换芯片、改 Back 板使能电路。

仓库大致分四块。Hardware 是板子;Firmware 是作者编好的 Boot 和 APP,带烧录说明;Software 里两个 Keil 工程,Bootloader 和 APP 分开;lv_sim_vscode_win 是 Windows 上改界面用的。焊不了表,又想先摸代码,作者另开了 FryPi(炸鸡派),同样是 STM32F411,只跑软件、不逼你先焊手表。

功能上不要按市售手表的清单去对。能点的大致有:表盘与菜单、计步、抬腕亮屏、心率、气压换算的海拔、指南针、蓝牙、设置读写,以及作者自己做的计算器页。没有应用商店,没有表盘市场,新页面要自己在 LVGL 里加,再拷回 Keil。血氧在功能表里能看到影子,正文和介绍都写了还没写完------复刻时按「未交付」处理,别当成漏焊。

三个容易配错的地方

图2:主控、传感器、蓝牙不在同一颗上(示意)

功耗别用「灭屏」代替。 手表有三档。运行模式:表正常跑,作者接在 3V3 上量到大约 70~80mA。睡眠模式:内核进 STOP,MPU6050 还可以计步,待机大约 1mA;V2.4.1 把睡眠时串口脚 DeInit 成输入之后,休眠电流掉到 800 多微安。关机模式:TPS63020 直接关使能,3V3 没了,只剩电池侧 RTC。这组数是 3V3 侧的,没算 DCDC 效率,不能直接换成「能戴几天」。灭屏还在几十毫安,先查串口脚、蓝牙使能、MPU 的 DMP,不要先改 LVGL 动画。

抬腕曾经走错过路。 一开始用 MPU6050 运动中断唤醒,幅度要很大才触发。后来改成 RTC 定时醒来,再判断当前是不是抬腕。DMP 库不能原样初始化,功耗会抬上去,驱动里改过,以工程为准。蓝牙不用时关掉 KT6368A 使能,否则休眠电流下不来。

心率在 EM7028 上,不在 F411 里打光。 算法换过一轮:仓库说明写过官方库太慢、改成自己的寻峰;项目介绍后来又写寻峰效果不好、改回官方库。以你拉下来的 BSP/EM7028 为准,不要两份文档对着吵。血氧作者写明还没做完,关于页里找这个功能会空。海拔和指南针是 SPL06、LSM303 各自报数,和心率同一层:都是外设,不是「表盘控件自带算法」。

页面返回踩过一个坑。 作者用手写栈记住上一页。压进去的是界面函数的地址,例如 &ui_HomePage,不是那个会变的 ui_HomePage 本身。直接 push 一个会变的值,返回会跳错。计算器另开了两个栈做运算,那是功能页的事;表盘导航先把页面栈搞对。界面可以在 lv_sim_vscode_win 里改,HWDataAccess.c 是中间层,仿真时把 HW_USE_HARDWARE 设成 0。改完把 FuncGUI_App 拷进 Keil 的 User。仿真通过只说明页面逻辑能跑,不说明 I2C 上的 EM7028 已经有波形,也不说明休眠电流已经合格。

现象 优先看
表盘在电脑上能滑,板上是白屏 屏驱动、触摸、有没有把仿真工程当固件烧
升级后开不了机 Boot 和 APP 地址、Flag 有没有在传完后才写
抬腕没反应,甩一下才亮 还在用 MPU 运动中断,不是 RTC 轮询抬腕
待机比 1mA 高一个数量级 串口脚没改输入、蓝牙使能没关、DMP 没改
心率一直 0 EM7028 接线、供电和当前算法;血氧本来就没做完
设置重启丢失 EEPROM 和 Datasave.c,不是文件系统
无线升级传到一半表变砖 Flag 区:完整 APP 才写;半截镜像不该被启动

Boot 和 APP 怎么拆

V2.4 起固件拆成 Bootloader 和 APP,为的是戴在手上也能升级,不用拆壳接线。BOOT 后面划了一块 Flag:只有 APP 完整传完才写上。传到一半掉电,不应拿半截镜像当正式程序启动。自己改链接脚本时,APP 的偏移要和 Boot 对上,否则工程能编过,烧进去停在 Boot,进不了表盘。

觉得带 Boot 太麻烦,可以拉 ver2.3.2 分支,那一版没有这套 OTA。V2.4.0 相对 2.3.2:换了 Back 板蓝牙使能、加上 Boot/APP 分离、加上蓝牙 IAP。V2.4.1 又修了三处:睡眠串口脚改输入、Boot 和 APP 都支持长按 KEY1 关机、按键改成按下再松开才生效,少一些误触。

无线升级走 KT6368A 的 SPP。传完看 Flag,不要看「蓝牙断开了」就当升级成功。中途断开,表应仍能靠旧 APP 或停在 Boot,而不是跑半截新程序。第一次复刻建议:有线烧通 Boot+APP、关机和休眠电流合格之后,再开 OTA;否则排查时分不清是链接地址错了,还是无线传包不完整。

先烧哪一段

图3:表亮着只说明 APP 起来了。Boot 和传感器还要单独对(示意)

做一块表,建议按下面顺序对,不要一上来就改 UI。

  1. 先烧现成包。 Firmware 里有 Boot 和 APP,步骤在 Firmware/README.md。自己编要先看烧录注意事项:地址、Flag、两个工程谁先谁后,写错就进不了表盘。Software 里两个 Keil 工程,分别对应 Bootloader 和 APP。
  2. 确认能进表盘,再试关机。 长按 KEY1。V2.4.1 起 Boot 和 APP 都有关机,只测 APP 不够。
  3. 灭屏后量 3V3。 还在几十毫安,先查串口脚和蓝牙使能,再查 MPU 的 DMP。电流不合格时改 LVGL 动画没有意义。
  4. 抬腕用正常幅度。 必须甩很大一下才亮,说明唤醒还停在 MPU 运动中断上,要核对是不是 RTC 轮询那条路径。
  5. 心率戴实了再看。 先确认 EM7028 有 PPG,再谈算法读数。血氧不要测,作者没做完。
  6. 无线升级放最后。 用 V2.4 的 KT6368A。中途断开后看 Flag,不要当已经升级成功。OTA 通了,再回头改自己的页面。

日常改界面可以倒过来:仿真里改 Func / GUI_App → 拷进 Keil → 只重烧 APP。Boot、电源、传感器驱动没动就不要每次都重烧 Boot。仿真和实机差在 I2C、功耗和触摸校准,这三样只能在板上收口。

边界

  • 物料 80 元是作者口径。焊接、屏、壳、表带不在「克隆仓库就能戴」里。焊不了先看 FryPi 只跑代码。
  • 功耗数字是 3V3 侧测量。从电池经过 TPS63020 之后,续航要自己在 Vbat 侧重测。
  • 这不是 Wear OS,没有应用商店。页面是 LVGL,返回是手写栈,设置在 EEPROM。
  • 介绍页有一处写过 STM32F411CUE6,原理图和徽章以 CEU6 为准;克隆前对一下丝印和封装。
  • GitHub 镜像是 No-Chicken/OV-Watch,和 Gitee 同源,说明手册在 no-chicken.com

参考

相关推荐
家和802 小时前
Carla仿真系列:4_在 Carla 的 Tesla 上装 4 路摄像头,并创建网格为环视拼接做准备
开源
XiHongShi20162 小时前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
感谢地心引力3 小时前
我用 Doubao-Seed-2.1-pro 做了一个深度融入 AI 功能的本地知识库软件
ai·开源·seed·markdown·豆包
alsmile3 小时前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
优信电子3 小时前
AIT1001 非接触式红外测温模块 STM32 驱动开发实战:从引脚到代码全解析
stm32·嵌入式·温度传感器·红外测温·非接触式测温·ait1001
深圳老胡4 小时前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
女神下凡4 小时前
嵌入式设计的各种存储芯片的硬件/软件设计规范,非常全面。
arm开发·单片机·嵌入式硬件
瑶山5 小时前
开源编程Agent-OpenCode完整使用教程
开源·agent·ai编程·opencode
梅梅9666 小时前
一款mipi转lvds的lcd调试(LT8912B)
单片机·计算机外设·电脑·显示器·pd芯片