机器人出现了。> 4.3标准Android信标库估计信标。Eddystone-UID包遥测包。
我试图从Eddystone-UID包传输的遥测包中读取温度传感器传输。我可以成功地读取用于温度传输的beacon.getExtraDataFields().get(2)数据,如Android中的Eddystone遥测数据。此数据将根据温度以4或5位数字的形式打印。
我也被告知信标温度传感器发送一个8:8的定点号码.读取beacon.getExtraDataFields().get(2),然后除以256个,得到以摄氏度为单位的温度读数。然而,一旦温度超过0 degC进入负值,我就会得到很大的差异。在论坛中的研究似乎表明,它与签名8:8,固定符号,数学和转换为十进制有关。虽然我理解8:8不动点表示法的概念,但我似乎找不到关于如何使用方法读取负不动点并转换为负degC的参考。
注意:Estimote的Android和他们的信标应用程序也有同样的问题.他们通过更新SDK来修正这个问题..。我使用的是Android库而不是Estimote SDK
如有指导,将不胜感激。
发布于 2015-10-28 14:32:07
下面的代码用于将编码的Eddystone遥测温度场转换为摄氏度。这是从定位Android应用程序中提取的,它也使用Android灯塔图书馆。这个代码已经通过来自Radius网络的Eddystone信标进行了测试。
long unsignedTemp = (beacon.getExtraDataFields().get(2) >> 8);
double temperature = unsignedTemp > 128 ?
unsignedTemp - 256 :
unsignedTemp +(beacon.getExtraDataFields().get(2) & 0xff)/256.0;您可以使用手边的信标尝试此转换公式。如果你发现它不工作,也尝试定位应用程序,以确保你看到了同样的东西。如果是这样的话,可能是编码的值不完全符合Eddystone规范。
发布于 2016-01-21 12:35:06
我使用这种方法结合davidgyoung转换公式从信标中检索温度,同时将其转换为两个小数的浮子:
public static float getTemperatureFromBeacon(Beacon beacon) {
long unsignedTemp = (beacon.getExtraDataFields().get(2) >> 8);
double temperatureDouble = unsignedTemp > 128 ?
unsignedTemp - 256 :
unsignedTemp + (beacon.getExtraDataFields().get(2) & 0xff) / 256.0;
float temperature = (float) Math.round(temperatureDouble * 100) / 100;
return temperature;
}https://stackoverflow.com/questions/33387603
复制相似问题