如何测量像 iBeacon 一样的 iPhone 和 Android 设备之间的距离

How to measure the distance between an iPhone acting like an iBeacon and an Android device

我将 iPhone 用作 iBeacon 设备,而在另一端我有一个 Android 4.4.2 设备扫描来自 [=18= 的蓝牙 LE iBeacon 信号].我搜索了一种简单易行的方法来计算 iBeacon 和我的 Android phone 之间的距离,但我找不到任何可以帮助我解决这个问题的方法。

你能帮我解决这个问题吗?

恐怕无法准确测量信标距离,这就是为什么 Apple 自己的代码只说 "Immediate"、"Near"、"Far" 和 "Unknown" 的原因。您能做的最好的事情就是重建您期望的条件,然后进行反复试验以将信号强度映射到可能的距离。相信我:我花了 很多 时间尝试使用一系列硬件进行信标距离测量。

请记住,蓝牙 LE 中的 LE 表示 "Low Energy" – 这东西的设计确实是为了尽可能少地使用电量。这意味着来自 iBeacons 的信号会被人、墙壁和其他物体打断。所以,如果我手里拿着一个信标并将我的 phone 放在它旁边,我会收到一个强烈的信号。如果我将信标移到背后,信号强度就会崩溃。如果我只是转身,那也有同样的效果(出于同样的原因)。

如果您想采用 "best you can do" 方法,您实际上必须至少部分地重新创建您的应用程序将被使用的环境。因此,如果您的应用程序将在办公室中使用,请找到一个办公室并在周围放置一些信标。在商店里也是一样。

然后拿出您的应用程序并测量距信标不同距离的信标强度,可能会遇到障碍物。通过一些平均,您最终会得到类似 "at 1 metre my signal strength was X, at 5 metres it was Y, at 10 metres it was Z" 等的结果,然后将其输入到您的距离计算中。实际上,这是一个有根据的猜测。

如果您发现任何声称为您进行信标距离测试的图书馆,这仅意味着他们根据自己的信号强度测试进行了有根据的猜测。

一个提示:如果可以,请将信标贴在天花板上。这最大限度地减少了在您的信标和您的应用程序之间出现障碍物(阅读:人)的可能性。

我们在 Android Beacon Library of the form: d=A*(r/t)^B+C, where d is the distance in meters, r is the RSSI measured by the device and t is the reference RSSI at 1 meter. A, B, and C are constants. You can read more about it here. 中构建了一个距离估计公式,要将其与库一起使用,您需要为信标测距,然后只需调用:

beacon.getDistance();

此 returns 以米为单位的距离估计值。库代码是开源的,所以如果你不想使用库你可以复制公式直接使用。

正如@TwoStraws 指出的那样,距离估计是对信标距离多远的粗略猜测,您得到的结果因很多因素而异:

  1. 接收设备天线的增益。 (每个 Android 设备型号略有不同)
  2. 测量蓝牙信号强度的 phone 内部 A/D 转换器上的噪声。
  3. 房间里的收音机噪音。
  4. 发射器和接收器之间的任何障碍物。
  5. 任何反射无线电信号的表面(尤其是金属)。

请确保您正确设定了期望值。距离估计有助于确定信标是近还是远,或者一个信标是否比另一个更近。但是它们对于测量绝对距离的用处不大。