proyectos con beacons bluetooth bluetooth-lowenergy ibeacon

beacons - iBeacon/Bluetooth Low Energy(dispositivos BLE): número máximo de balizas



bluetooth-lowenergy (5)

Me gustaría rastrear una gran cantidad de balizas (~ 500) a la vez dentro de un radio de 50-100 m a través de una aplicación en un iPhone (5s). He echado un vistazo a las especificaciones y en línea y no puedo ver si hay un límite en la cantidad de balizas que puedes rastrear al mismo tiempo usando BLE. ¿Alguien sabe si existe una limitación en el número de balizas que puede rastrear o si un iPhone 5s estaría a la altura de la tarea de rastrear tantas balizas?


Agregaré a la respuesta de Tim Tisdall, que establece el marco correcto. No puedo hablar sobre las capacidades específicas del iPhone 5s, o iOS en general, pero no veo ninguna razón por la cual no devolvería cada paquete ADV_IND (es decir, la transmisión Beacon) que recibe.

La pregunta es, ¿las 500 balizas podrán transmitir sus paquetes ADV_IND sin colisiones?

Se necesitan unos 0,128ms para transmitir un paquete ADV_IND. El tiempo entre las transmisiones publicitarias se puede configurar entre 20ms y 10240ms (a intervalos de 0.625ms), por lo que la probabilidad de colisiones depende de la configuración de las balizas.

Con base en la distribución de Poisson, la probabilidad de una colisión para cualquier paquete ADV_IND dado es 1-exp (-2 * N * (0.128 / AI)), donde N es el número de balizas dentro del rango, AI es el tiempo en milisegundos de el intervalo publicitario (suponiendo que todas las balizas estén configuradas de la misma manera), y el 0.128 es el tiempo en milisegundos que tarda en enviarse el paquete ADV_IND. (Consulte http://www3.cs.stonybrook.edu/~jgao/CSE590-fall09/aloha-analysis.pdf si desea una explicación).

Para 500 balizas con el intervalo publicitario máximo de aproximadamente 10 segundos, habrá una colisión una vez cada 81 paquetes (o aproximadamente 6 de 500). Si está dispuesto a esperar un par de intervalos (es decir, 30 segundos), es muy probable que pueda recibir los 500 paquetes ADV_IND.

Por otro lado, si el intervalo publicitario es más pequeño, digamos 500ms, tendrá una colisión alrededor del 23% del tiempo (o 113 de 500). Tendría que esperar varios intervalos más para mejorar la probabilidad de que vea las transmisiones de todas las balizas.

La otra forma de verlo es que cuantas más balizas tenga, más tiempo tendrá que esperar para asegurarse de recibir todos sus paquetes. (Las matemáticas para calcular el retraso para recibir los paquetes con una cierta probabilidad a partir del número de balizas y el intervalo publicitario son demasiado para mí en la actualidad).

Una advertencia: si desea conectarse a estas balizas, en lugar de simplemente recibir el paquete ADV_IND, eso requiere un intercambio de dos paquetes más en los canales publicitarios, y la probabilidad de una colisión en los canales publicitarios aumenta un poco.


Estaba haciendo una investigación sobre iBeacon debido a esta pregunta (no tenía idea de qué se trataba).

Parece que en el lado "beacon" de las cosas todo lo que ocurre es que se envían paquetes de publicidad general. Es similar a cómo un dispositivo anuncia que puede conectarse a él. Sin embargo, en realidad no se conecta a iBeacon, solo lee esos paquetes publicitarios. No existe una limitación incorporada sobre la cantidad de paquetes publicitarios que un dispositivo puede recibir.

Por lo tanto, no me sorprendería si 500 iBeacon se ejecutara sin problemas. Los paquetes publicitarios son pequeños y están espaciados (en cuanto al tiempo, se repiten cada X ms). No hay comunicación entre el teléfono y iBeacon, el teléfono simplemente recibe los paquetes que oye. Si hay interferencia en un paquete, probablemente logre obtener el siguiente.


No estoy de acuerdo Es cierto que los bea beacons solo transmiten datos publicitarios, pero la transmisión de dichos datos dura aproximadamente 3 ms (considerando tres canales publicitarios). Con 500 balizas, SIN considerar ninguna colisión, el escáner tardará 1.5 segundos en verlas todas. Pero, si todas las balizas se configuran de la misma manera (el mismo intervalo de publicidad) es inevitable tener colisiones que conduzcan a que se encuentren balizas sin descubrir. Incluso si el intervalo de publicidad es diferente entre balizas se producen colisiones. Para evitar la probabilidad de colisión, se debe utilizar un intervalo de publicidad más largo, pero esto lleva a una latencia de descubrimiento más larga. Este razonamiento es muy crudo, no se ocupa de muchos efectos, sino que es solo un cálculo de orden de magnitud.

Por cierto, la pregunta no es fácil, hay muchos parámetros que juegan un papel, algunos son conocidos y otros son desconocidos. Pero estoy trabajando con ble desde hace un año y, para mí, 500 es un número enorme y existe la posibilidad de que no vea la mayoría de los nodos debido a las colisiones.


Si estoy leyendo su pregunta correctamente, quiere poner todas las 500 iBeacons dentro de los 100 metros una de la otra, lo que significa que sus transmisiones se superpondrán. Probablemente se encuentre con problemas de congestión de radio mucho antes de que se encuentre con cualquier limitación de iOS7 o su teléfono.

He probado con éxito 20 iBeacons en las proximidades sin problemas, pero 500 iBeacons es una densidad extrema. esta discusión sobre el problema del hardware sugiere que puede tener problemas.

Como mínimo, las colisiones de las transmisiones de 500 iBEacons harán que su dispositivo iOS tarde más en ver cada iBeacon. Normalmente, iOS7 proporciona una actualización de rango una vez por segundo para cada dispositivo iOS, pero es posible que reciba actualizaciones con mucha menos frecuencia. Depende de su aplicación si las actualizaciones menos frecuentes son aceptables o no.

Incluso si los retrasos son aceptables, probaría absolutamente esto antes de contar con que funcione. Desafortunadamente, eso significa tener en tus manos muchos iBeacons.


Usó la palabra track, pero iOS tiene dos métodos diferentes: monitoreo y rango.

Puede establecer un máximo de 20 regiones para monitorear. (Se encuentra en la documentación del método startMonitoringForRegion:). Los límites de la región entran principalmente en juego si tu aplicación está en segundo plano. El sistema operativo alertará a su aplicación cuando ingrese o salga de una región que está monitoreando (más o menos unos minutos). El sistema operativo incluso lanzará su aplicación solo para informarle lo que sucedió (aunque solo por un corto tiempo).

El otro método es el rango, que consiste en encontrar todas las balizas dentro del alcance de Bluetooth del dispositivo (por lo general, alrededor de 100 pies más o menos). Si sus balizas se extienden a más de 100 millas, entonces probablemente no se encontrará con ningún límite práctico aquí. No he encontrado ninguna documentación para esto, y solo tengo cuatro balizas con las que estoy probando, y cuatro a la vez funcionan.

Esta es una forma de manejar su situación. Haga que todas sus 500 balizas usen el mismo UUID y establezca una región de balizas utilizando initWithProximityUUID: identifier: method. (El identificador es solo para ti, no afecta nada). Iniciando el monitoreo para esa región de baliza. De esta forma, se le notificará a su aplicación cada vez que encuentre una de sus 500 balizas (demora unos minutos). Una vez notificado, puede usar startRangingBeaconsInRegion: para encontrar todas las balizas alrededor de esa área, luego use los valores mayor y menor para descubrir a qué balizas está cerca el usuario.