用 App 玩转手表
第一次用:先开蓝牙,再填验证码
Section titled “第一次用:先开蓝牙,再填验证码”- 在手表正常界面单独长按左上键约 1 秒开启蓝牙;也可以在“系统设置 → 设置 → 蓝牙”切换。不要同时按上下键。
- 等手表开始广播,在 Flutter App 的“设备”页点“设置设备验证码”,输入随设备提供的 6 位码并保存;自行编译者使用 BW16
ble_auth.local.h中配置的码。 - 点“连接手表”,等待验证。以后手动重连会自动发送本机保存的码。
- 填错时先断开,再点“更改已保存验证码”。这个按钮只改 App 的记录,不改手表真正使用的码。
完整操作、设备端改码和故障检查见蓝牙连接与验证码设置。下面按当前源码说明页面用途,实际可用项需与固件版本匹配。
进入“设备”,展开“连接检查”,分别观察 BLE 连接、设备码验证和传输验证。 点击“验证传输”后,只有页面显示“通信已验证”才表示 STM32 回显正常、可以读取设备状态。 连接成功不等于 STM32 已收到命令。设备突然关闭时,记录提示并结束本次连接,不为普通超时反复烧录。
先点“刷新”读取当前配置;改动只是草稿,点击“应用”后才会写入, 以设备回读和保存确认判断结果。页面包含亮度、息屏/休眠、输入与反馈等设置, 具体项和可用能力以配套固件返回值为准。 “记住设备并在前台恢复连接”是客户端可选策略,不能给断电的 BW16 自动上电。
实际按钮是“刷新偏好”和“应用并保存偏好”:先刷新,改一项,再应用;等结果返回后重新刷新确认值仍然一致。 按钮不可点时先检查通信是否已验证、请求是否仍在处理中;不要反复点击来叠加请求。

界面示例,参数为模拟数据。
- 确认运行 App 的设备时间和本地时区正确,并已完成连接验证。
- 打开“时间与天气”,点击“同步手表时间”,等待页面显示设备确认。
- 搜索并选择预报城市;没有搜索结果时展开“手动输入坐标”,填写纬度/经度并保存。
- 点击“仅更新手机天气”获取预报;确认城市和天气数据后,再点击“同步到手表”。
- 分别检查时间同步状态与天气同步结果;天气显示在 App 中不代表已经传到手表。
这条路径由 App 获取天气后传给手表,不要求 BW16 直接联网获取天气。 App 所在设备需要能联网;蓝牙连接本身不是互联网连接。
组合无害的 USB 脚本
Section titled “组合无害的 USB 脚本”只连接自己的测试电脑,先打开空白文本编辑器,确认光标不在终端、密码框或重要窗口。 USB 键盘与 BLE 是两段链路:App 已连接不等于电脑已识别 USB 键盘。 USB 模式切换与首次接线的照片待补,不在这里猜按键路径。
脚本工作台把编辑器与本地动作片段放在一起。“载入编辑器”追加内容并自动换行,可重复组合;保存草稿可以形成新片段或完整脚本。

界面示例,参数为模拟数据。 例如只输入无害文本:
STRING Hello from CrabitENTER客户端校验限制:ASCII 文本、总计最多 512 字节、每行最多 128 字节、动作数最多 128;单条 DELAY 上限 30000 ms,预计总执行时间也不能超过 30 秒。 中文不能直接作为 STRING 内容发送。 “运行到 Crabit”和“设备 RAM 控制”需要已验证连接。先“查询状态”检查 USB 主机与设备状态,再上传、运行一次;异常时停止。 RAM 脚本与本地脚本库不同:断电不能依赖 RAM 保留,保存到本地也不等于已上传。 固定文本组合预览只在本机组合文字,不直接发送键盘报告。
无线记录与模型
Section titled “无线记录与模型”“无线记录”查看设备转交的数据,不意味着 App 自己接管 Wi-Fi 抓包。 采集与后台 BLE 同步可以分阶段发生;没有记录时区分未采集、未转交和未同步。测试仅用于自有或明确授权环境。
首页的“界面预览”显示本机 NanoUI 画面;在 Windows 可点击模型按键进行本地 UI 交互, 长按右侧按键返回,拖动可旋转预览。它不是屏幕镜像。独立“手表模型”页只查看静态模型, 不需要 BLE。连接并验证后,若启用 IMU 跟随,倾斜使用设备相对倾斜数据, 不是屏幕镜像、绝对航向测量或完整姿态追踪。 未启用、无有效数据和断连分别判断,不只看模型是否转动。
让模型跟随手表倾斜
Section titled “让模型跟随手表倾斜”- 先在设备页完成连接与传输验证,保持设备页处于打开状态。
- 在模型下方点“IMU 倾斜”;按钮灰色时,先检查是否已显示“通信已验证”。
- 收到有效姿态后,把手表放到想作为基准的姿势,点“校准零位”。还没收到数据时该按钮不可点。
- 转动手表观察相对倾斜;模型屏幕仍是本地 NanoUI,不会因此变成实体屏幕镜像。
- 结束时点“停止倾斜”。状态出现“过期”时说明数据不新鲜,应检查链路,不把旧姿态当成当前姿态。
3D 模型上的界面来自本地 NanoUI 模拟器,属于模拟器画面而非实体手表屏幕;网页或 App 的预览都不会控制真实无线、USB 或电源。
预览表盘里的时间和天气
Section titled “预览表盘里的时间和天气”交互模型默认先显示已有表盘,按确认仍可进入菜单、长按返回。时间跟随运行App或浏览器的本机时钟,不要求连接手表,也不会因此校准实体手表。
Flutter预览优先使用App中已配置城市与有效天气缓存,没有配置时使用标注为示例的重庆城市;网页模型使用重庆城市示例,不读取定位。天气是联网取得的当日日预报和高低温,活跃时最多每15分钟更新一次,不是即时室外温度。隐藏预览后暂停,失效或无法获取时显示未获取/不可用,不用固定晴天替代。
电池、手表温度及其他模拟传感器仍是演示值,不能把模型中的这些读数当作真机状态。要同步真实手表的时间天气,仍需按本页“时间与天气”的BLE操作完成确认。本文的静态操作截图不实时变化。

界面示例,参数为模拟数据。

界面示例,参数为模拟数据。

界面示例,参数为模拟数据。
电池历史页面展示客户端保存的连接期间样本,不是全天连续记录;断开期间没有数据,不能据此推算续航。

界面示例,参数为模拟数据。
本地数据与下载
Section titled “本地数据与下载”脚本、偏好和诊断记录保存在本机,没有云端备份承诺。卸载或清除数据前保存重要脚本。 Windows 与手机端共用 Flutter 代码,但平台目录存在不等于安装包已发布或各平台验收完成。 公开下载与配套发行包待提供,目前不放虚假下载按钮。