Me gustaría crear mi propio iBeacon con algunos kits de desarrollo bluetooth de baja energía. Apple aún no ha publicado una especificación para iBeacons, sin embargo, algunos desarrolladores de hardware han realizado ingeniería inversa del iBeacon a partir del código de muestra de AirLocate y comenzaron a vender kits de desarrollo de iBeacon.
Entonces, ¿qué es el perfil Bluetooth iBeacon?
Bluetooth Low Energy utiliza GATT para el descubrimiento del servicio de perfil LE. Entonces, creo que necesitamos conocer el identificador de atributo, el tipo de atributo, el valor de atributo y quizás los permisos de atributo del atributo iBeacon. Entonces, para un iBeacon con un UUID de E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 un valor mayor de 1 y un valor menor de 1, ¿cuál sería el servicio de perfil Bluetooth GATT?
He aquí algunas suposiciones que hice de la discusión en los foros de Apple y a través de los documentos.
Solo necesita ver el servicio de perfil (GATT) de un periférico Bluetooth para saber que es un iBeacon.
Las teclas Mayores y Menores están codificadas en algún lugar de este servicio de perfil.
Aquí hay algunas compañías con iBeacon Dev Kits que parecen tener esta figura ya:
Esperemos que a tiempo tengamos un perfil publicado en Bluetooth.org como este: https://www.bluetooth.org/en-us/specification/adopted-specifications
fuente
Respuestas:
Para un iBeacon con ProximityUUID
E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
, mayor0
, menor0
y potencia de-59
transmisión calibrada de RSSI, el paquete de publicidad BLE transmitido se ve así:d6 be 89 8e 40 24 05 a2 17 6e 3d 71 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 52 ab 8d 38 a5
Este paquete se puede desglosar de la siguiente manera:
La parte clave de ese paquete es el anuncio de Bluetooth, que puede desglosarse así:
Cualquier dispositivo Bluetooth LE que se pueda configurar para enviar un anuncio específico puede generar el paquete anterior. He configurado una computadora Linux usando Bluez para enviar este anuncio, y los dispositivos iOS7 que ejecutan el código de prueba AirLocate de Apple lo recogen como un iBeacon con los campos especificados anteriormente. Ver: Usar BlueZ Stack como periférico (Anunciante)
Este blog tiene detalles completos sobre el proceso de ingeniería inversa.
fuente
Parece basarse en los datos publicitarios, particularmente los datos del fabricante:
Tengo este script node.js trabajando en Linux con el ejemplo de la aplicación AirLocate.
fuente
Solo para conciliar la diferencia entre la respuesta de sandeepmistry y la respuesta de davidgyoung:
Forma parte de la especificación del formato de datos publicitarios [1]
Falta de AD es una definición de Servicio [5]. Creo que el protocolo iBeacon en sí mismo no tiene relación con el GATT y el descubrimiento de servicios estándar. Si descarga el programa iBeacon de RedBearLab, verá que utilizan el GATT para configurar los parámetros de publicidad, pero esto parece ser específico para su implementación y no forma parte de la especificación. El programa AirLocate no parece usar el GATT para la configuración, por ejemplo, de acuerdo con LightBlue u otros programas similares que probé.
Referencias
fuente
FF
en su ejemplo el valor HEX de mi cadena? (¿y también actualizar la longitud de la estructura AD a la suite?)Si la razón por la que hace esta pregunta es porque desea utilizar Core Bluetooth para anunciarse como iBeacon en lugar de utilizar la API estándar, puede hacerlo fácilmente anunciando un NSDictionary como:
Vea esta respuesta para más información.
fuente
Es muy simple, solo anuncia una cadena que contiene algunos caracteres que se ajustan al estándar iBeacon de Apple. puede consultar el enlace http://glimwormbeacons.com/learn/what-makes-an-ibeacon-an-ibeacon/
fuente
El perfil de iBeacon contiene 31 bytes que incluyen los siguientes
fuente