iBeacon / 蓝牙低功耗设备(BLE设备)- 最大信标数量

19

我想通过iPhone(5s)上的应用程序一次性跟踪50-100米半径内的大量信标(〜500个)。 我已经查看了规格和在线信息,但我无法确定使用BLE同时跟踪的信标数量是否有限制。 请问是否存在跟踪信标数量的限制或者iPhone 5s是否能够胜任跟踪那么多信标的任务?

5个回答

21

你使用了track这个词,但是iOS有两种不同的方法:监测和测距。

你可以设置最多20个区域进行监测(在startMonitoringForRegion:方法的文档中找到)。如果你的应用程序处于后台,区域限制大部分情况下会发挥作用。当你进入或离开正在监测的区域时,操作系统会向您的应用程序发出警报(可能需要几分钟左右)。操作系统甚至会启动您的应用程序,只是为了让它知道发生了什么(但只有很短的时间)。

另一种方法是测距,它是为了查找设备蓝牙范围内的所有信标(通常在100英尺左右)。如果您的信标分散在100英里之外,那么您可能不会遇到任何实际限制。我没有找到任何关于这方面的文档,我只有四个测试信标,同时使用四个工作正常。

以下是处理您的情况的一种方法。使所有500个信标使用相同的UUID,并使用initWithProximityUUID:identifier:方法创建信标区域。(标识符仅供您使用 - 它不会影响任何内容)。开始监视该信标区域。这样,每当找到您的500个信标之一时,您的应用程序都会收到通知(可能需要几分钟左右)。一旦收到通知,您可以使用startRangingBeaconsInRegion:查找该区域周围的所有信标,然后使用主要和次要值来确定用户附近的哪些信标。


请注意,当您的应用程序在后台接收到iBeacon通知时,您的应用程序只有有限的时间来采取行动(很可能是几秒钟)。根据您希望采取的行动,也许提示用户(使用UILocalNotification)打开应用程序,然后在应用程序打开时开始范围可能是正确的解决方案。可以在此处找到示例:https://www.cocoanetics.com/2013/11/can-you-smell-the-ibeacon。 - Kasper Munck
蓝牙和GPS应该有哪些限制? - Codesen

5
我会补充Tim Tisdall的答案,他提出了正确的框架。我无法说iPhone 5s或iOS的具体功能,但我看不到为什么它不会返回它接收到的每个ADV_IND包(即信标传输)。
问题是,这500个信标能否在没有碰撞的情况下传输其ADV_IND数据包?
发送ADV_IND数据包大约需要0.128毫秒。广告传输之间的时间可配置在20ms和10240ms之间(间隔为0.625ms),因此碰撞的概率取决于信标的配置。
基于泊松分布,任何给定的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个数据包会发生一次碰撞(或者大约6个碰撞在500个数据包中)。如果您愿意等待几个间隔(即30秒),那么您很有可能能够接收到所有500个ADV_IND数据包。
另一方面,如果广告间隔较小,例如500ms,则有大约23%的时间发生碰撞(或者113个碰撞在500个数据包中)。您需要等待更多间隔才能提高您看到所有信标广播的概率。
另一种看待它的方式是,你拥有的信标越多,你就需要等待更长的时间来确保接收到它们所有的数据包。(计算从信标数量和广告间隔中以某种概率接收数据包的延迟的数学公式对我来说太复杂了。)
一个注意点:如果你想连接这些信标,而不仅仅是接收ADV_IND数据包,那就需要在广告信道上进行两个额外的数据包交换,并且广告信道中发生碰撞的概率会稍微增加一些。

4
如果我理解您的问题正确,您想将所有500个iBeacon放置在彼此距离不超过100米的范围内,意味着它们的传输会重叠。您可能会遇到无线电拥堵问题,这比遇到iOS7或手机的任何限制都要早。
我已经成功地测试了20个相邻的iBeacons并没有出现问题,但是500个iBeacons的密度实在太高了。硬件问题上的这篇讨论表示您可能会遇到麻烦。
至少,500个iBEacons的碰撞将使您的iOS设备花费更长的时间来查看每个iBeacon。通常,iOS7每秒为每个iOS设备提供一次测距更新,但您可能会发现您的更新频率要低得多。是否接受更新频率较低完全取决于您的应用程序。
即使有延迟也可以接受,我也绝对会在依赖其正常工作之前进行测试。不幸的是,这意味着要大量使用iBeacons。

3
我不同意。尽管BLE信标只传输广告数据,但考虑到三个广告频道,此类数据的传输持续约3ms。如果有500个信标,即使不考虑任何冲突,扫描器也需要1.5秒才能发现它们全部。但是,如果所有信标都配置相同(相同的广告间隔),那么无法避免冲突,这会导致未被发现的信标存在。即使信标之间的广告间隔不同,仍会发生冲突。为了避免冲突概率,应使用更长的广告间隔,但这会导致更长的发现延迟。这种推理非常简单,没有考虑到许多影响因素,只是一个数量级的计算。
顺便说一下,这个问题并不容易,有许多参数起作用,有些是已知的,有些是未知的。但我已经从事BLE一年多了,对我来说,500是一个巨大的数字,存在由于冲突而无法检测到大多数节点的可能性。

我刚刚编写了一个Matlab脚本,用于估计碰撞次数。它假设使用BLE,因此使用三个广告通道和TX阶段的持续时间为466微秒,不考虑其他类型的干扰(Wi-Fi、Zigbee、其他蓝牙设备)。 - Davide Giovanelli
使用1秒的广告和500个节点,平均有186个节点存在冲突,可能在1秒内无法被发现。当然,如果继续进行发现,在下一秒的发现过程中仍会有186个节点无法被发现(其中一些将是相同的,一些不同),在下一秒中将会有其他186个节点,以此类推。 - Davide Giovanelli
这是一个非常有趣的回应,我想更多地了解您对BLE冲突估计建模分析的见解。您是否愿意发布一个gist或者您进行分析的源代码? - truedat101
老实说,这很简单。它采用一个广告间隔(即发送广告数据包的间隔),并在该间隔内随机分散每个节点的传输时隙。任何与其他数据包重叠的数据包都将被损坏。您只需要多次重复此随机化过程并计算平均值即可。 - Davide Giovanelli
@DavideGiovanelli,我能否使用您的短语“传输此类数据大约需要3毫秒”来回答问题“理论上,一个接收信标在一秒钟内最多可以听到多少个广告?”并给出答案333? - mercury0114

1
我正在研究iBeacon,因为有这个问题(我不知道它是关于什么的)。
似乎在“beacon”方面,所有发生的就是发送一般广告包。这类似于设备广告可以连接到它。但是,您实际上并不连接到iBeacon,它只读取那些广告包。设备可以接收多少广告包没有内置限制。
因此,如果有500个iBeacon运行而没有问题,这不会让我感到惊讶。广告包很小且间隔(时间上,它们每X毫秒重复)。手机与iBeacon之间没有通信,手机只是接收它听到的数据包。如果一个数据包受到干扰,它很可能会成功获取下一个数据包。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接