19

我想通过 iPhone (5s) 上的应用程序在 50-100 m 半径内一次跟踪大量信标 (~500)。我查看了规范和在线,我看不出您可以使用 BLE 一次跟踪的信标数量是否有任何限制。有谁知道您可以跟踪的信标数量是否存在限制,或者 iPhone 5s 是否可以完成跟踪这么多信标的任务?

4

5 回答 5

21

您使用了跟踪这个词,但 iOS 有两种不同的方法:监控和测距。

您最多可以设置 20 个区域进行监控。(在 startMonitoringForRegion: 方法的文档中找到。)如果您的应用程序在后台,则区域限制主要发挥作用。当您进入或离开您正在监控的区域时,操作系统会提醒您的应用程序(几分钟或几分钟)。操作系统甚至会启动您的应用程序,只是为了让它知道发生了什么(尽管只是很短的时间)。

另一种方法是测距,即查找设备蓝牙范围内的所有信标(通常在 100 英尺左右)。如果您的信标分布在 100 英里以上,那么您可能不会在此处遇到任何实际限制。我还没有找到任何文档,我只有四个我正在测试的信标,并且一次有四个可以工作。

这是处理您的情况的一种方法。让所有 500 个信标使用相同的 UUID,并使用 initWithProximityUUID:identifier: 方法创建一个信标区域。(标识符仅供您使用——它不会影响任何东西)。开始监视该信标区域。这样一来,只要找到 500 个信标中的一个(几分钟或几分钟),您的应用就会收到通知。收到通知后,您可以使用 startRangingBeaconsInRegion: 查找该区域周围的所有信标,然后使用主要和次要值来确定用户靠近哪些信标。

于 2013-10-11T18:10:42.130 回答
5

我将添加到 Tim Tisdall 的答案中,它列出了正确的框架。我无法谈论 iPhone 5s 或 iOS 的具体功能,但我看不出它为什么不返回它接收到的每个 ADV_IND 数据包(即信标传输)的任何原因。

问题是,这 500 个信标能否在不发生冲突的情况下传输其 ADV_IND 数据包?

传输一个 ADV_IND 数据包大约需要 0.128ms。广告传输之间的时间可配置为 20 毫秒到 10240 毫秒(间隔为 0.625 毫秒),因此冲突的概率取决于信标的配置。

根据泊松分布,任何给定的 ADV_IND 数据包的冲突概率为 1-exp(-2*N*(0.128/AI)),其中 N 是范围内的信标数量,AI 是以毫秒为单位的时间广告间隔(假设所有信标都配置相同),0.128 是发送 ADV_IND 数据包所需的时间(以毫秒为单位)。(如果您需要解释,请参阅http://www3.cs.stonybrook.edu/~jgao/CSE590-fall09/aloha-analysis.pdf 。)

对于最大广播间隔约为 10 秒的 500 个信标,大约每 81 个数据包(或大约 500 个数据包中的 6 个)将发生一次冲突。如果您愿意等待几个时间间隔(即 30 秒),那么您很有可能会收到所有 500 个 ADV_IND 数据包。

另一方面,如果广告间隔更小,比如 500 毫秒,您将有大约 23% 的时间发生冲突(或 500 次中有 113 次)。您必须再等待几个时间间隔才能提高您看到来自所有信标的广播的可能性。

另一种看待它的方式是,您拥有的信标越多,您必须等待的时间越长,以确保您收到所有的数据包。(根据信标的数量和广告间隔计算以一定概率接收数据包的延迟的数学对我来说今天太多了。)

一个警告:如果您想连接到这些信标,而不是仅仅接收 ADV_IND 数据包,则需要在广告通道上再交换两个数据包,并且广告通道中发生冲突的概率会上升一点。

于 2016-06-10T21:01:17.977 回答
4

如果我没看错你的问题,你想把所有 500 个 iBeacon 放在彼此相距 100 米的范围内,这意味着它们的传输将重叠。在遇到 iOS7 或手机的任何限制之前,您很可能会遇到无线电拥塞问题。

我已经成功地近距离测试了 20 个 iBeacon 没有问题,但是 500 个 iBeacon 是一个极端的密度。 这个关于硬件问题的讨论表明你可能会遇到麻烦。

至少,500 个 iBEacon 传输的冲突会使您的 iOS 设备需要更长的时间才能看到每个 iBeacon。通常,iOS7 会为每台 iOS 设备提供每秒一次的测距更新,但您可能会发现获得更新的频率要低得多。这完全取决于您的应用程序是否可以接受较低频率的更新。

即使延迟是可以接受的,我也绝对会先测试一下,然后再指望它工作。不幸的是,这意味着要获得大量 iBeacons。

于 2013-10-12T02:00:34.037 回答
3

我不同意。ble beacons确实只传输广告数据,但这种数据的传输持续大约3ms(考虑三个广告通道)。拥有 500 个信标,在不考虑任何碰撞的情况下,扫描仪将需要 1.5 秒才能看到所有信标。但是,如果所有信标都以相同的方式配置(相同的广告间隔),则不可避免地会发生冲突,从而导致未发现的信标。即使信标之间的广告间隔不同,也会发生冲突。为了避免冲突概率,应该使用更长的广告间隔,但这会导致更长的发现延迟。这个推理很原始,没有考虑很多效果,只是一个数量级的计算。

顺便说一句,这个问题并不容易,有很多参数在起作用,有些是已知的,有些是未知的。但是我和 ble 合作大约一年了,对我来说,500 是一个巨大的数字,而且由于冲突,您可能看不到大多数节点。

于 2015-10-28T12:00:04.150 回答
1

由于这个问题,我正在对 iBeacon 进行一些研究(我不知道它是关于什么的)。

似乎在事情的“信标”方面,所发生的只是一般的广告数据包被发送出去。这类似于设备宣传您可以连接到它的方式。但是,您实际上并没有连接到 iBeacon,它只是读取那些广告数据包。设备可以接收多少个广告数据包没有内置限制。

因此,如果 500 个 iBeacon 运行没有问题,我不会感到惊讶。广告包很小并且间隔开(时间方面,它们每 X 毫秒重复一次)。没有从电话到 iBeacon 的通信,电话只是接​​收它听到的数据包。如果一个数据包受到干扰,它可能会设法获得下一个数据包。

于 2013-10-15T14:31:15.737 回答