首页 > 解决方案 > 如何从蓝牙 LE (SIG) 十六进制值中提取重量值

问题描述

我正在开发一个 xamarin android 应用程序来连接蓝牙低能量体重秤。我已经可以连接到设备并探索它的服务和特性,但是我在提取它的价值时遇到了一些问题。

该秤实现了蓝牙 SIG 标准,因此我希望它具有体重秤服务 (org.bluetooth.service.weight_scale) 和体重测量特性 (org.bluetooth.characteristic.weight_measurement)。显然不是。

探索设备服务,读取服务接缝为“未知服务”(0000ffe0-0000-1000-8000-00805f9b34fb),特征接缝为“TI SensorTag Keys Data”(0000ffe1-0000-1000-8000-00805f9b34fb) .

以下是参考服务的一些示例读数:

该秤支持体重读数、体脂、体内水分、肌肉量、骨量、巴塞尔代谢率和活跃代谢率。我想我正在使用权重只读模式。我已经将十六进制值转换为十进制,但输出值不是直接的。

我应该使用什么公式来提取值?

标签: xamarin.androidbluetooth-lowenergy

解决方案


如果您只关心特征值的最后两个字节:06-20、06-60、0--62 和 09-44。您可以将它们与秤上显示的重量进行比较:

 > 0x620/78.4 -> 20.0
 > 0x660/81.6 -> 20.0
 > 0x662/81.7 -> 20.0
 > 0x944/118.6 -> 20.0

这意味着特征值的低两个字节表示的数字中的每个数字等于一公斤的1/20 = 50g。

要在应用程序中显示权重,只需将特征值的最后两个字节转换为主机整数表示(ntohs或等效的https://linux.die.net/man/3/ntohs)并将其除以 20。


推荐阅读