Eu gostaria de criar meu próprio iBeacon com alguns kits de desenvolvimento de baixa energia para Bluetooth. A Apple ainda não divulgou uma especificação para o iBeacons, no entanto, alguns desenvolvedores de hardware fizeram a engenharia reversa do iBeacon a partir do código AirLocate Sample e começaram a vender kits de desenvolvimento do iBeacon.
Então, qual é o perfil Bluetooth iBeacon?
O Bluetooth Low Energy usa o GATT para descoberta de serviço de perfil LE. Então, acho que precisamos conhecer o identificador de atributo, o tipo de atributo, o valor do atributo e talvez as permissões de atributo do atributo iBeacon. Portanto, para um iBeacon com um UUID de E2C56DB5-DFFB-48D2-B060-D0F5A71096E0, um valor maior de 1 e um valor menor de 1, qual seria o serviço de perfil Bluetooth GATT?
Aqui estão algumas suposições que fiz da discussão nos fóruns da Apple e nos documentos.
Você só precisa ver o serviço de perfil (GATT) de um periférico Bluetooth para saber que é um iBeacon.
As chaves Maiores e Menores são codificadas em algum lugar deste serviço de perfil
Aqui estão algumas empresas com os kits de desenvolvimento iBeacon que parecem já ter descoberto isso:
Felizmente, com o tempo, teremos um perfil publicado no Bluetooth.org como este: https://www.bluetooth.org/en-us/specification/adopted-specifications
fonte
Respostas:
Para um iBeacon com ProximityUUID
E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
, Tx Power RSSI maior0
, menor0
e calibrado-59
, o pacote de anúncio BLE transmitido se parece com o seguinte: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 pacote pode ser dividido da seguinte maneira:
A parte principal desse pacote é o Anúncio do Bluetooth, que pode ser dividido dessa maneira:
Qualquer dispositivo Bluetooth LE que possa ser configurado para enviar um anúncio específico pode gerar o pacote acima. Eu configurei um computador Linux usando o Bluez para enviar este anúncio, e os dispositivos iOS7 que executam o código de teste AirLocate da Apple o escolhem como um iBeacon com os campos especificados acima. Consulte: Usar pilha BlueZ como periférico (anunciante)
Este blog possui detalhes completos sobre o processo de engenharia reversa.
fonte
Parece basear-se nos dados do anúncio, particularmente nos dados do fabricante:
Eu tenho esse script node.js trabalhando no Linux com o exemplo de aplicativo AirLocate de exemplo.
fonte
Apenas para reconciliar a diferença entre a resposta do sandeepmistry e a davidgyoung:
Faz parte da especificação do formato de dados de publicidade [1]
Faltando no AD está uma definição de Serviço [5]. Eu acho que o próprio protocolo iBeacon não tem relação com o GATT e com a descoberta de serviços padrão. Se você baixar o programa iBeacon do RedBearLab, verá que eles usam o GATT para configurar os parâmetros do anúncio, mas isso parece ser específico para sua implementação e não faz parte das especificações. O programa AirLocate parece não usar o GATT para configuração, por exemplo, de acordo com o LightBlue e / ou outros programas similares que eu tentei.
Referências:
fonte
FF
no seu exemplo o valor HEX da minha string? (e também atualizar o comprimento da estrutura AD a suíte?)Se o motivo pelo qual você fez esta pergunta é porque deseja usar o Core Bluetooth para anunciar como um iBeacon, em vez de usar a API padrão, você pode fazer isso facilmente anunciando um NSDictionary como:
Veja esta resposta para mais informações.
fonte
É muito simples, apenas anuncia uma string que contém alguns caracteres em conformidade com o padrão iBeacon da Apple. você pode consultar o link http://glimwormbeacons.com/learn/what-makes-an-ibeacon-an-ibeacon/
fonte
O perfil do iBeacon contém 31 bytes, que inclui os seguintes
fonte