当前位置: 首页 > 知识库问答 >
问题:

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

壤驷德宇
2023-03-14

我想通过iPhone(5s)上的应用程序,在50-100米半径范围内同时跟踪大量信标(~500)。我已经看过了规范和在线版本,我看不出使用BLE一次可以跟踪的信标数量是否有任何限制。有人知道你可以跟踪的信标数量是否有限制,或者iphone5s是否能够完成跟踪那么多信标的任务?

共有3个答案

孔嘉茂
2023-03-14

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

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

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

即使延迟是可以接受的,我绝对会在指望它工作之前测试它。不幸的是,这意味着你要得到很多iBeacons。

麹鸿煊
2023-03-14

我将补充蒂姆·蒂斯达尔的回答,他提出了正确的框架。我不能谈论苹果5s的具体功能,或者iOS,但我看不出它有任何理由不返回收到的每一个ADV_IND包(即信标传输)。

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

传输ADV_IND数据包大约需要0.128ms。广告传输之间的时间间隔可配置为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个包(或500个中的大约6个)会有一次碰撞。如果你愿意等待几个间隔(即30秒),你很有可能收到所有500个ADV_IND包。

另一方面,如果广告间隔较小,比如500ms,你会有大约23%的时间(或者500分之113)发生碰撞。你必须等待更多的间隔来提高你看到所有信标广播的可能性。

另一种看待它的方式是,你拥有的信标越多,你需要等待的时间就越长,以确保你收到了他们所有的数据包。(从信标数量和广告间隔计算接收具有一定概率的数据包的延迟的数学方法对我来说太多了。)

一个警告:如果你想连接到这些信标,而不是仅仅接收ADV_IND数据包,这需要在广告通道上交换另外两个数据包,广告通道中碰撞的概率会上升一点。

翟永春
2023-03-14

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

您最多可以设置20个要监视的区域。(在starMonteoringForZone:方法的留档中找到。)区域限制主要是在应用处于后台的情况下发挥作用。当你进入或离开你正在监视的区域时,操作系统会提醒你的应用(给或花几分钟)。操作系统甚至会启动你的应用程序,让它知道发生了什么(尽管只是很短的时间)。

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

这里有一个方法来处理你的情况。使所有500个信标使用相同的UUID,并使用initWithProximityUID:identifier:method创建信标区域。(标识符仅适用于您——它不会影响任何事情)。开始监视该信标区域。这样,当你的500个信标中有一个被找到时,你的应用程序就会收到通知(几分钟或几分钟)。收到通知后,您可以使用StarTrangBeaconsisnRegion:查找该区域周围的所有信标,然后使用主值和次值确定用户靠近哪些信标。

 类似资料:
  • 最近,我买了一台iBeacon设备,打算创建Android应用程序,以便识别和使用它。我是一个在Android应用程序中使用蓝牙的新手,有很多事情我还不知道。在互联网和本论坛中,我找到了使用Radius Networks的Android IBeacon库的建议,但是,唉,现在它不再可用了: https://github.com/RadiusNetworks/android-ibeacon-serv

  • 我想知道是否有可能修改BLE信标的内容以包含额外信息。如果在末尾插入一个额外的位,则可能在一个方向上广播布尔值。从理论上讲,如果你修改了你的设备来读取额外的信息,这就行了。考虑到现有的协议,这听起来需要做很多工作。外面已经有这样的东西了吗? 对于信息,我正在mbed平台上工作,在那里你可以修改你自己的蓝牙信标有效载荷。

  • 我的应用程序应连接到蓝牙LE设备。通常使用mBluetoothAdapter执行设备扫描。Stratescan(mLeScanCallback) 。回调为您提供有关可用设备的信息。 如果要连接到专用设备,请执行以下操作 然后 在我看来,连接到BLE设备的唯一需要是知道BLE地址,然后通过以上两个步骤连接到它。因此,如果我已经知道一个BLE地址(例如,它写在BLE设备的标签上),我就不需要执行BLE

  • 我正在尝试制作一个应用程序,它使用Android的新蓝牙低能耗API。为此,我从API Level18附带的BLE示例开始。 当我读到Android不能充当外围设备时,我将Android手机置于中央模式,扫描周围的BLE设备。为此,我用一个模拟心脏传感器的北欧平台做了一些测试。一切都以完美的方式运作! 多谢了。 编辑:经过一些艰苦的测试,我在AOSP页面上提出了一个问题。这里可以查

  • 我正在寻找一个唯一的id,可从iOS访问蓝牙低能耗设备。我有10台设备,我把它放在了10个不同的地方。我需要确切地知道我正在与哪个设备通信,而不管我正在使用哪个iOS设备连接。 在iOS核心蓝牙中,iOS为我的设备分配了一个新的UUID。我无法唯一识别设备。

  • 我的应用程序无法检测外设。我用浅蓝色来模拟蓝牙低能量外设,我的应用程序就是感觉不到。我甚至在两台设备上安装了浅蓝色,以确保它能正确地生成外围信号,并且是正确的。有什么建议吗?我的标签正在更新,NSLog显示扫描正在开始。 提前谢谢。