【硬件交互】腕控眼镜 — 把智能手表手环作为 AI 眼镜的延伸,沉浸体验游戏和应用

【硬件交互】腕控眼镜 —— 把智能手表手环作为 AI 眼镜的延伸,可以通过智能手表手环遥控 AI 眼镜操控,沉浸体验游戏和应用

我是一名独立开发者,平时喜欢折腾各种硬件和跨端项目。

这次做"腕控眼镜",是想验证一个想法:用 Apple Watch 的手腕手势来控制 AI 眼镜。整个项目是和 TRAE「结对编程」完成的,说实话一开始我心里没底——手表手势识别、BLE 蓝牙、HID 设备伪装,每一块都是我没怎么碰过的领域。

和 TRAE 配合的真实感受是:它更像一个能听懂人话的搭档,而不是代码补全工具。我脑子里想的不是"写一个 CBPeripheralDelegate",而是"让手表扫到手机设备,连上之后把手腕的倾斜动作变成方向指令发出去"。就这么一句句讲给它听,它就把 BLECentralManager、MotionManager、GestureRecognizer 一整套搭出来了。

最让我"原来这么简单"的一刻,是 Android 那端:我要让 Android 手机伪装成蓝牙 HID 设备,让 Rokid 眼镜以为它连的是一个标准遥控器。这块我完全没做过,本以为要翻几天资料。结果我把思路讲清楚(“我们继续开发手表版 App,目前蓝牙遥控的功能,在 ios App 上实现遇到了卡点,先搁置。参考网上相关开源项目,新增一个安卓 App,然后手表版 App 和安卓 App 通信,达成我们当前项目目的”),TRAE 就帮我把 GattServerServiceHidServiceHidDescriptor 一整套 Kotlin 代码铺好了,我只需要调试配对流程。

它帮我跨过的最大的坎是 watchOS 的兼容性地雷:watchOS 对 NavigationStack、按钮样式、CoreImage 都有限制,TRAE 在一次次报错里帮我总结出了"哪些 API 不能用、该用什么替代",最后还补上了 WKExtendedRuntimeSession 来解决屏幕熄灭后断连的问题。这种"边踩坑边记笔记"的协作方式,真的比一个人对着文档硬啃快太多了。

1. Demo 简介

是什么:一款通过 Apple Watch 手势遥控 AI 眼镜的跨端应用,由 Android App + Apple Watch App 组成。Android 手机伪装成蓝牙 HID 遥控器与 Rokid 眼镜配对,Apple Watch 通过 BLE 连接 Android 端,用手腕手势驱动眼镜的导航操作。

面向谁:Rokid AI 眼镜的用户

主要功能

  1. Android 端:HID 伪装桥接
    Android 手机开机后将蓝牙名称改为 JingBao- 前缀,启动 GATT Server 暴露 HID 服务,让眼镜把它识别为一个标准蓝牙遥控器,作为手表与眼镜之间的"翻译桥"。

  2. Apple Watch 端:BLE 连接与配对
    手表扫描带 JingBao- 前缀的设备,通过配对码完成安全配对,连接状态实时显示。使用 WKExtendedRuntimeSession + 自动重连,解决屏幕熄灭后断连的稳定性问题。

  3. 手势遥控
    佩戴手表后,通过手腕倾斜动作直接控制眼镜方向(上倾=向上、下倾=向下、左右倾斜=方向键),无需低头看屏幕、无需按键。手势由 CoreMotion 采集,经 GestureRecognizer 识别后通过 BLE 发送到 Android 端,再由 HID 通道转发给眼镜。

2. Demo 创作思路

灵感来源
我平时戴 Rokid 眼镜的时候发现一个尴尬的事:原装遥控器是个独立的小设备,要么忘带、要么找不到;用手机 App 控制吧,又得低头看屏幕、点按钮,完全破坏了戴眼镜时"抬头就能看"的沉浸感。而手腕上的 Apple Watch,天然就是一个贴身、随时可用的输入设备——为什么不把它变成眼镜的遥控器?

想解决的问题
AI 眼镜用户的真实痛点:

  • 目前没有特别耗的第三方遥控配件;
  • 手机控制不够即时,需要视线离开眼镜去低头看屏幕;
  • 戴着眼镜时双手经常被占用(运动、做饭、抱小孩),按物理按键不方便。

为什么做这个方向,以及路线的取舍

我的判断是:最好的遥控器,是用户已经戴在手上的那块表。与其再做一个新的硬件遥控器,不如复用用户已有的 Apple Watch,用手势动作代替按键,让控制变成一种"下意识的动作"。

技术路线其实走过一段弯路。一开始我想做 iPhone App + Apple Watch App 的组合:iPhone 负责和眼镜鉴权、连接,Watch 负责手势采集和发送。但真正动手才发现 iOS 端走 SDK 鉴权这条路坑非常多,几经折腾还是没能跑通,最终决定放弃 iOS 端,转战 Android + 手表

这个转向反而带来了一个更巧妙的架构:让 Android 手机伪装成蓝牙 HID 遥控器去"骗"眼镜——因为 Rokid 眼镜只认标准 HID 蓝牙遥控器,而 Android 的 GattServer 可以模拟 HID 服务;Apple Watch 则专心负责手势识别,把手腕动作通过 BLE 发给 Android 端,再由 HID 通道转给眼镜。两端职责清晰:手表管输入,Android 管协议伪装

这个方向坚持下来有三个难点,也正是这次 Demo 想验证的:

  1. 手势识别——用 Watch 的 CoreMotion 识别手腕倾斜,映射成方向指令;
  2. HID 伪装——Android 端起 GATT Server 暴露 HID 服务,让眼镜识别为遥控器;
  3. 后台保活——watchOS 屏幕熄灭后 BLE 容易断连,需要 WKExtendedRuntimeSession + 自动重连来解决。

之所以坚持做下来,是因为我相信 AI 眼镜的交互入口不应该是"再多一个设备",而应该是"用好已有的设备"。腕控眼镜 就是这个想法的一次小小实践。

3. Demo 演示视频

玩起来,把闲置的手表当 AI 眼镜遥控器 @Rokid乐奇 @… 小红书 - 你访问的页面不见了 来【小红书】一探究竟吧!


4. TRAE 实践过程

整个项目的开发历程大概分为四个阶段,每一步都是和 TRAE 协作完成的:

阶段一:需求拆解与技术选型

一开始我只是想做一个"用 Apple Watch 手势控制 AR 眼镜"的东西,但具体怎么实现完全没头绪。我把这个想法丢给 TRAE,它帮我梳理出了技术路线:

我的需求:“用 Apple Watch 的手腕动作来控制 Rokid AI 眼镜,比如倾斜手腕向上滑动,旋转手腕左右切换”

TRAE 的分析

  1. Watch 需要采集运动数据 → CoreMotion
  2. 手势识别 → 加速度阈值 + 角度变化
  3. 指令发送 → BLE
  4. 眼镜接收 → 需要中间设备(手机)转发或直接连接

我们最初选择了 iPhone + Watch 的方案:Watch 采集手势 → WatchConnectivity 发给 iPhone → iPhone 通过 Rokid CXR-L SDK 连接眼镜。

阶段二:iOS 端开发与踩坑

TRAE 帮我搭建了 iOS App 的基础框架,包括:

  • [CXRManager.swift] — 管理 SDK 鉴权和连接状态
  • [WatchConnectivityManager.swift] — iPhone 与 Watch 的通信
  • [ContentView.swift] — 亮度/音量滑块、方向键导航

但在调试过程中遇到了一系列问题:

  1. SDK 鉴权流程复杂:需要安装 Rokid AI App 才能完成鉴权,回调处理繁琐
  2. BLE 连接不稳定retrieveConnectedPeripherals 找不到已连接设备,didConnect 回调不触发
  3. watchOS 兼容性问题NavigationStack.buttonStyle(.borderedProminent) 在 watchOS 上报错

最关键的是,iOS 端走 SDK 路线需要处理复杂的鉴权流程,调试起来困难重重。在多次尝试后,我们决定放弃 iOS 端,转战 Android

阶段三:转向 Android + Watch 方案

这个转向是整个项目的转折点。TRAE 帮我设计了一个更巧妙的架构:

┌──────────────────┐      BLE (手势指令)      ┌──────────────────┐      HID (键盘/鼠标)      ┌──────────────────┐
│   Apple Watch    │◄─────────────────────────►│      Android     │◄─────────────────────────►│   Rokid Glasses  │
│  (手势采集识别)   │                          │  (GATT Server)    │                          │   (HID 接收器)    │
│                  │                          │  (HID 伪装)       │                          │                  │
└──────────────────┘                          └──────────────────┘                          └──────────────────┘

核心思路:让 Android 手机伪装成蓝牙 HID 遥控器,眼镜以为连接的是一个标准遥控器;Watch 专注于手势识别,把手腕动作通过 BLE 发给 Android,再由 HID 通道转给眼镜。

Android 端开发

TRAE 帮我从零开始写 Android 端代码:

  1. [GattServerService.kt] — 启动 GATT Server,接收 Watch 的手势指令

    • 开启 BLE 广播,设备名改为 JingBao- 前缀
    • 创建自定义服务 UUID,暴露手势写入特征
    • 通过 onCharacteristicWriteRequest 接收手势数据
  2. [HidService.kt] — 伪装成 HID 设备

    • 注册 HID 描述符,让眼镜识别为标准遥控器
    • 将手势指令转换成键盘键码(方向键、回车、ESC)
  3. 手势指令映射

    • scroll_up → 鼠标滚轮向上
    • swipe_left → 左方向键
    • confirm → 回车键

Watch 端开发

TRAE 帮我完成了 Watch App 的核心逻辑:

  1. [MotionManager.swift] — 采集运动数据

    • 配置 CoreMotion,以 50Hz 频率获取设备运动数据
    • 通过回调传给手势识别器
  2. [GestureRecognizer.swift] — 手势识别

    • 维护运动历史队列(30 帧)
    • 通过加速度阈值检测轻击确认手势
    • 冷却时间防重复触发
  3. [BLECentralManager.swift] — BLE 连接与指令发送

    • 扫描带 JingBao- 前缀的设备
    • 通过特征写入发送手势指令
  4. [ContentView.swift] — UI 界面

    • 连接状态展示、配对码显示、手势控制开关

阶段四:稳定性优化

项目基本跑通后,又遇到了 watchOS 屏幕熄灭后 BLE 断连的问题。TRAE 帮我实现了:

  1. BackgroundTaskManager.swiftWKExtendedRuntimeSession 延长后台运行时间
  2. 自动重连机制(在 BLECentralManager.swift)— 断开后 2 秒自动重新扫描

关键任务对话的 Session ID

  • .4439153971044148:91c36805f32140b871573b80b6520c59_6a549f1c916e678e9d89776f.6a54a1a6916e678e9d897788.6a54a1a58a7da4acbaf90c55:Trae CN.T(2026/7/13 16:28:22)

  • .4439153971044148:e159e9e453f8347ed32d293936965727_6a5457e6916e678e9d8974b4.6a546357916e678e9d897528.6a5463568a7da4acbaf90c4d:Trae CN.T(2026/7/13 12:02:31)

  • .4439153971044148:133ef9b44133727b887daee02c458bc7_6a561f913fc3a2e0e17cee51.6a56226b3fc3a2e0e17ceee6.6a56226bad54b80de31370ee:Trae CN.T(2026/7/14 19:50:03)

5. 对应的报名审核通过的帖子链接

1 个赞

很有创意 , 已投票。麻烦帮帮我给我的作品投一票,互相支持支持吧

1 个赞

你好!我是集客智库·项目超市的运营。在 Trae 大赛看到你的「【硬件交互】腕控眼镜 — 把智能手表手环作为 AI 眼镜的延伸,沉浸体验游戏和应用」,特意体验了一下 Demo,完成度很高,交互也很顺滑,非常惊喜!想邀请你的项目入驻我们集客智库·项目超市——这里能帮项目找到合伙人、客户和投资。

大赛的结果只代表一轮比赛的反馈,不代表你项目的真实价值。好项目总会发光,我们希望你的项目能借助集客超市永远在线、持续被关注,最终拿到你想要的资源和投资。

入驻方式:微信小程序搜索「集客智库」注册,在“项目超市”上传项目,提交后告诉我们,我们免费帮你上架推广。整个过程目前完全免费。期待在集客智库看到你的项目!有任何疑问欢迎随时找我~

1 个赞