【问题标题】:Android Beacon Library Eddystone Telemetry. TemperatureAndroid 信标库 Eddystone 遥测。温度
【发布时间】:2015-10-28 09:42:41
【问题描述】:

Android 版本。 > 4.3 标准 Android 信标库 估计信标。 Eddystone-UID 包 遥测包。

我正在尝试从 Eddystone-UID 包传输的遥测包中读取温度传感器传输。根据 Android Beacon Library 中的 Eddystone [Telemetry] 示例,我可以成功读取 beacon.getExtraDataFields().get(2) 数据以进行温度传输。此数据根据温度打印为 4 位或 5 位数字。

我被告知信标温度传感器传输一个 8:8 的定点数...读取 beacon.getExtraDataFields().get(2) 然后除以 256 我得到摄氏温度读数。然而,一旦温度超过 0 摄氏度进入负值,我就会得到很大的差异。论坛中的研究似乎表明它与带符号的 8:8 固定符号数学和转换为十进制有关。虽然我了解 8:8 定点符号概念,但我似乎无法找到有关如何使用 Android 信标库方法读取负定点并转换为负 degC 的参考。

[注意:Estimote 的 Android SDK 和他们的信标应用程序有同样的问题......他们通过更新他们的 SDK 解决了这个问题......我使用的是 Android 库而不是 Estimote SDK]

我们将不胜感激。

【问题讨论】:

    标签: android temperature eddystone telemetry beacon


    【解决方案1】:

    下面的代码用于将编码的 Eddystone 遥测温度场转换为摄氏度。这取自Locate Android app,它也使用Android Beacon Library。此代码已使用 Radius Networks 的 Eddystone 信标进行了测试。

    long unsignedTemp = (beacon.getExtraDataFields().get(2) >> 8);
    double temperature = unsignedTemp > 128 ? 
        unsignedTemp - 256 : 
        unsignedTemp +(beacon.getExtraDataFields().get(2) & 0xff)/256.0;
    

    您可以使用手头上的信标尝试此转换公式。如果您发现它不起作用,还请尝试使用定位应用程序以确保您看到相同的内容。如果是这种情况,可能是编码值不完全符合 Eddystone 规范。

    【讨论】:

    • 运行良好。使用 Estimote 信标测试。温度范围 +25 至 -22 摄氏度。谢谢。
    【解决方案2】:

    我使用这种方法和 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多