本實例只適用於一維定位,其他定位方式可以參考:iBeacon藍牙定位技術原理及實現 | 前端路上 (refined-x.com)。
計算公式:
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值,再代入該方法。為了驗證結果我用卷尺測量最終的結果。誤差大概在幾十厘米左右,微信小程序的代碼一搜有很多,這里就不放了。