本实例只适用于一维定位,其他定位方式可以参考:https://refined-x.com/2019/04/01/IBeacon-Location-Technology/。
计算公式:
d = 10^((abs(RSSI) - A) / (10 * n))
其中:
d - 计算所得距离
RSSI - 接收信号强度(负值)
A - 发射端和接收端相隔1米时的信号强度
n - 环境衰减因子
转换为java 代码,只是做了公式计算处理,参数校验还没有:
public double getDistByRSSI(int rssi) {
int iRssi = Math.abs(rssi);
double power = (iRssi - 50) / (10 * 2.0);
return Math.pow(10, power);
}
传入RSSI值,返回距离(单位:米)。其中,A参数赋了50,n赋了2.0。
由于所处环境不同,每台发射源(蓝牙设备)对应参数值都不一样。按道理,公式里的每项参数都应该做测试获得。
我这里是用的微信小程序测试获取RSSI值,再代入该方法。为了验证结果我用卷尺测量最终的结果。误差大概在几十厘米左右,微信小程序的代码一搜有很多,这里就不放了。