作为第 3 方,是否有可行的方法来正确解释来自未发布 GATT 配置文件规范的蓝牙低功耗设备的数据?
BLE 设备是支持体重、BMI、体脂和水合水平的身体秤。我的理解是,身体秤没有采用 GATT 配置文件,例如血压设备或心率监测器 ( https://developer.bluetooth.org/gatt/profiles/Pages/ProfilesHome.aspx )。
使用以下工具:
- 带有各种 BLE 实用程序(Ti BLE Multitool、LightBlue 和 BLE Utility)的 iPod (iOS 6.1.3)
- 带有 nRF 主控制面板的 Android (4.3) 平板电脑 (Dell Venue 8 3830),以及自定义 Xamarin 开发的解决方案
我可以扫描、定位、连接和读取秤上可用的 GATT 服务。以上所有工具都为我提供了相同的服务信息。规模上发现了 5 项服务:
- 通用访问 (0x1800)
- 通用属性 (0x1801)
- 设备信息 (0x180A)
- 电池服务 (0x180F)
- 具有自定义 128 位 UUID 的未知服务
上述所有工具都能够从已知服务中读取数据,例如检索电池信息或设备名称。我的假设是具有自定义 UUID 的未知服务是提供比例数据的服务。
该服务有 5 个带有自定义 UUID 的未知特征:
- 特征1是读/写
- 特征 2 是读取
- 特征 3 是读/写
- 特征 4 是通知
- 特征 5 是读取
使用上面指定的工具从特征 1、2 和 3 中读取,每个都返回它自己的值,但该值永远不会改变。例如,读取特征 1 始终返回 20 个八位字节 0x01-0x05-0x06-0x07-0x08-和 15 个 0x00 八位字节的值。特征 1 的后续读取始终返回该值。特征 2 读取始终返回 20 个八位字节 0x02 和 19 个 0x00 八位字节的值。等等。
读取特征 5 似乎没有返回值,或者在 Android 上更常见的是发出配对请求。没有常见的配对代码(如 0000 或 1234 等)是有效的。
特征 4 似乎是实际传输比例数据的内容。使用上面的工具,我可以启用通知并且应用程序检索 13 个八位字节。例如:
- FF-16-09-00-03-04-01-00-83-6F-F4-18-0F
- FF-16-09-00-03-04-01-00-3E-88-F4-18-E3
- FF-16-09-00-03-04-01-00-C8-89-F4-18-6E
显然,所有这些值都以相同的八位组开始。但主要问题是这些八位字节代表什么以及它们如何转化为体重/bmi/水合作用/体脂值,如果事实上它们确实如此。
该秤采用 Ti CC2541 芯片 ( http://www.ti.com/product/cc2541 ) 构建。
使用 Ti 的 SmartRF 协议数据包嗅探器和 CC2540 USB 评估模块套件,我可以捕获 iPhone 5S (iOS 7.1) 和电子秤之间传输的数据包。这提供了一些额外的见解,但主要只是展示了我使用其他工具已经观察到的内容,尽管它处于较低级别。数据包嗅探器提供的任何附加信息仍然会导致同一个问题:秤发送的这些八位组代表什么以及它们如何转换为重量/bmi/等?我使用了蓝牙核心规范文档,这有助于理解标准功能的八位字节的含义/作用,但这无助于理解实际的比例数据。
我对蓝牙开发非常陌生,这个练习基本上导致了该技术的速成课程。任何帮助表示赞赏。
谢谢。