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

Xamarin.android 如何从蓝牙LE(SIG)十六进制值中提取权重值,xamarin.android,bluetooth-lowenergy,Xamarin.android,Bluetooth Lowenergy,我正在开发一款xamarin android应用程序,用于连接蓝牙低能量体重秤。我已经可以连接到设备并探索它的服务和特性,但是我在提取它的价值时遇到了一些问题 体重秤实现了蓝牙SIG标准,所以我希望它有一个体重秤服务(org.Bluetooth.service.Weight_scale)和体重测量特性(org.Bluetooth.characteristic.Weight_Measurement)。 显然不是 探索设备服务时,读取服务接缝为“未知服务”(0000ffe0-0000-1000-80

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

体重秤实现了蓝牙SIG标准,所以我希望它有一个体重秤服务(org.Bluetooth.service.Weight_scale)和体重测量特性(org.Bluetooth.characteristic.Weight_Measurement)。 显然不是

探索设备服务时,读取服务接缝为“未知服务”(0000ffe0-0000-1000-8000-00805f9b34fb),特征接缝为“TI传感器标签密钥数据”(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
该量表支持体重读数、体脂、体水、肌肉质量、骨量、巴塞尔代谢率和主动代谢率。我想我使用的是权重只读模式。 我已经将十六进制值转换为十进制,但输出值不是直接的


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

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


要在应用程序中显示权重,只需将特征值的最后两个字节转换为主机整数表示形式(
ntohs
或等效形式),然后将其除以20。

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


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

能否请您分享您的蓝牙秤制造商和型号,这可以帮助其他面临相同问题的人?嗨,路易斯·卡隆,我当然可以。我本应该用第一种方法。这是一个。你能分享一下你的蓝牙秤制造商和型号吗?它能帮助其他面临同样问题的人吗?嗨,路易斯·卡伦,我当然能。我本应该用第一种方法。这是一个很好的解决方案。我也测试过体重。谢谢,你的解决方案很好。我也测试过体重。非常感谢。