新手请教 关于电池电量测算的问题

#1

我在安卓开发中获得如下的数据,请问怎样得到电量值?

!
为何我的13-14这数的值,每次都不同的?

#2

请问你购买了哪个型号的产品?是我们的beacon产品么?由于我们的beacon会以google eddystone TLM-plain方式广播电量,一般情况下你只需要观察eddystone TLM-plain格式的广播包就可以了,这个广播数据里包含电量

#3

这是你们的产品吧?我这个数据是从 安卓开发的接收到字段全部读出来的结果。
final byte[] scanRecord
for (int k=0;k<=(scanRecord.length-1);k++) {
gettest1=gettest1+k+": “+ scanRecord[k] +”
";
}
再将gettes1 显示,就这样的。但是好像跟你们例子中数据不同。

#4

这款产品是EEK beacon。它的广播形式是3个iBeacon广播和1个设备信息的广播。然后大概15秒左右插播一个Google Eddystone TLM-plain 广播包,你需要把这个TLM广播包过滤出来,然后读取其中的电量

#5

3个iBeacon广播和1个设备信息的广播是依次播放还是一次播放的? Google Eddystone TLM-plain 广播包 怎样读取? 我的意思是在安卓编程你们有源码共享一下吗?这方面的资料太少了。谢谢!

#6

检查了一下,13,14位 共收到三种数据:
-22
-79

-81
-62

11
93
应当哪一组才是电池电量的数据?

#7

请参考eddystone 的示例app

依次播放的,像这样

iBeacon - iBeacon - iBeacon - 设备信息 - iBeacon …

#8

组1
13:-22
14: -79
组2
13:-22
14: -79
组3
13:-22
14: -79
组4
13:-81
14: -62
那电量应当是多少?

#9

请注意广播内容是uint8的,不存在负数,你需要把它转成uint8来计算。另外TLM plain的广播头固定前缀定义在这里. 这里的第8个字节是0x11.

然后你再检查它的frame type是不是0x20,这样可以精确的过滤出TLM包。

#10

另外你可以安装eddystone validator 来检查电量的值

#11

帮我看看,谢谢

#12

看最后一个广播,我估计是这个

  • 13位 ad
  • 14位 6f

这个电压是 0x6FAD = 28589mv,电压约等于2.8589mv

#13

这是你帮另个人回答电量计算的回答:
13 = 12 = 0xC
14 = -82 = 0xAD
用计算器可以算得 0xCAD = 3245 ,这里的单位是mV,所以剩余电量为3245mV
这是帮我计算电量的回答:

  • 13位 ad
  • 14位 6f
    这个电压是 0x6FAD = 28589mv ,电压约等于 2.8589mv
    为何 两次的回答 13 ,14位的左右顺序不同?
    还有,我每次调整了发射的间距后,这个13,14位的值会跟着变,所以我怀疑这两个值是不是代表电量值,还是其他位的值呢?
#14

首先你一定要确定一个包是TLM包,再去解析电量,否则解析结果怎么也不会正确。

  • TLM包的开头必定是这些字节. 其中offset=7数据必定是0x11
  • TLM包的offset=11数据必定是0x20,其中Version数据必定是0x00

由这些条件,你肯定可以过滤出eddystone TLM数据包,而不是什么数据位发生变化这种情况。最后贴个swift代码示例,这里分别解析了eddystone的各种数据帧. 见方法frameTypeForFrame

#15

我将全部数据上传了,麻烦看看。 这个数据应当是直接读出来的,[]为序号。

#16

我用你们提供的aprilbeacondemo 可以测试是75%电量,信号也是3组ibeacon +1组Eddystone信号,但是信号在7,11位数值上跟你说的又不同,晕死了。

#17
  • 如果7, 11位的数值不匹配,那么这个广播肯定不是TLM广播
  • 大概每隔30秒会发一个TLM包,频率很低。并不是3组iBeacon + 1组TLM包,请注意
#18

明白了,怪不得数据老是不规律,原来TLM频率这么低。 那13位是b,14位是24,那电量值是多少? 正常电压应当是多少?

#19

用你们提供的demoapp测算的值总是75%或66%,怀疑是错的。