首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安卓灯塔图书馆Eddystone遥测。温度

安卓灯塔图书馆Eddystone遥测。温度
EN

Stack Overflow用户
提问于 2015-10-28 09:42:41
回答 2查看 1.2K关注 0票数 2

机器人出现了。> 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

如有指导,将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-28 14:32:07

下面的代码用于将编码的Eddystone遥测温度场转换为摄氏度。这是从定位Android应用程序中提取的,它也使用Android灯塔图书馆。这个代码已经通过来自Radius网络的Eddystone信标进行了测试。

代码语言:javascript
运行
复制
long unsignedTemp = (beacon.getExtraDataFields().get(2) >> 8);
double temperature = unsignedTemp > 128 ? 
    unsignedTemp - 256 : 
    unsignedTemp +(beacon.getExtraDataFields().get(2) & 0xff)/256.0;

您可以使用手边的信标尝试此转换公式。如果你发现它不工作,也尝试定位应用程序,以确保你看到了同样的东西。如果是这样的话,可能是编码的值不完全符合Eddystone规范。

票数 4
EN

Stack Overflow用户

发布于 2016-01-21 12:35:06

我使用这种方法结合davidgyoung转换公式从信标中检索温度,同时将其转换为两个小数的浮子:

代码语言:javascript
运行
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33387603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档