如何从蓝牙LE(SIG)十六进制值中提取权重值

问题描述 投票:1回答:1

我正在开发一个xamarin安卓应用程序,以连接蓝牙低能量秤。我已经可以连接到设备,探索它的服务和特性,但是我面临一些提取它的价值的问题。

该规模实现了蓝牙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) 。

以下是来自参考服务的一些样本读数:

  • 对于78.4公斤,我得到了E7-58-01-06-20
  • 对于81.6公斤,我得到了E7-58-01-06-60
  • 对于81.7公斤,我得到了E7-58-01-06-62
  • 对于118.6公斤,我得到了E7-58-01-09-44

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

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

xamarin.android bluetooth-lowenergy
1个回答
0
投票

如果您只关心特征值的最后两个字节: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千克的1/20 = 50g。

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

© www.soinside.com 2019 - 2024. All rights reserved.