Qu'est-ce que le profil Bluetooth d'iBeacon
j'aimerais créer mon propre iBeacon avec des kits de dév.basse énergie bluetooth. Apple n'a pas encore publié de spécification pour iBeacons, cependant quelques développeurs de matériel ont inversé l'iBeacon à partir du code échantillon AirLocate et ont commencé à vendre des kits de développement iBeacon.
alors quel est le profil Bluetooth d'iBeacon?
Bluetooth Low Energy utilise GATT pour LE profil de découverte de service. Donc je pense que nous devons savoir la poignée D'attribut, le type D'attribut, la valeur D'attribut, et peut-être les Permissions D'attribut de l'attribut iBeacon. Donc pour un iBeacon avec un UUID de E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 une valeur majeure de 1 et une valeur mineure de 1 Quel serait le service de profil Bluetooth GATT?
Heres certaines hypothèses que j'ai fait à partir de la discussion sur les forums et par le biais de la documentation.
-
vous devez seulement voir le service de profil (GATT) d'un périphérique Bluetooth de savoir qu'il est un iBeacon.
-
les touches Major et Minor sont encodées quelque part dans ce service de profil
Heres certaines entreprises avec iBeacon Dev Kits qui semblent avoir cette figure déjà:
espérons qu'avec le temps nous aurons un profil Bluetooth.org comme ceci: https://www.bluetooth.org/en-us/specification/adopted-specifications
6 réponses
pour un iBeacon à proximité E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
, majeur 0
, mineur 0
, et puissance TX calibrée de -59
RSSI, le paquet publicitaire transmis ressemble à ceci:
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
Ce paquet peut être décomposé comme suit:
d6 be 89 8e # Access address for advertising data (this is always the same fixed value)
40 # Advertising Channel PDU Header byte 0. Contains: (type = 0), (tx add = 1), (rx add = 0)
24 # Advertising Channel PDU Header byte 1. Contains: (length = total bytes of the advertising payload + 6 bytes for the BLE mac address.)
05 a2 17 6e 3d 71 # Bluetooth Mac address (note this is a spoofed address)
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 # Bluetooth advertisement
52 ab 8d 38 a5 # checksum
l'élément clé de ce paquet est la publicité Bluetooth, qui peut être décomposée comme ceci:
02 # Number of bytes that follow in first AD structure
01 # Flags AD type
1A # Flags value 0x1A = 000011010
bit 0 (OFF) LE Limited Discoverable Mode
bit 1 (ON) LE General Discoverable Mode
bit 2 (OFF) BR/EDR Not Supported
bit 3 (ON) Simultaneous LE and BR/EDR to Same Device Capable (controller)
bit 4 (ON) Simultaneous LE and BR/EDR to Same Device Capable (Host)
1A # Number of bytes that follow in second (and last) AD structure
FF # Manufacturer specific data AD type
4C 00 # Company identifier code (0x004C == Apple)
02 # Byte 0 of iBeacon advertisement indicator
15 # Byte 1 of iBeacon advertisement indicator
e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 # iBeacon proximity uuid
00 00 # major
00 00 # minor
c5 # The 2's complement of the calibrated Tx Power
tout appareil Bluetooth LE qui peut être configuré pour envoyer une publicité spécifique peut générer le paquet ci-dessus. J'ai configuré un ordinateur Linux utilisant Bluez pour envoyer cette publicité, et les appareils iOS7 utilisant le code de test AirLocate D'Apple le récupèrent comme un iBeacon avec les champs spécifiés ci-dessus. Voir: Utiliser Bluez Stack Comme Périphérique (Annonceur)
Ce blog a plein de détails sur le revers processus d'ingénierie.
il semble basé sur les données de publicité, en particulier les données du fabricant:
4C00 02 15 585CDE931B0142CC9A1325009BEDC65E 0000 0000 C5
<company identifier (2 bytes)> <type (1 byte)> <data length (1 byte)>
<uuid (16 bytes)> <major (2 bytes)> <minor (2 bytes)> <RSSI @ 1m>
- Apple Company Identifier( Little Endian), 0x004c
- type de données, 0x02 = > iBeacon
- longueur des données, 0x15 = 21
- uuid: 585CDE931B0142CC9A1325009BEDC65E
- majeur: 0000
- mineur: 0000
- puissance moyenne à 1 mètre: 0xc5 = -59
j'ai ce noeud .js script travaillant sur Linux avec l'exemple D'application AirLocate.
Juste pour concilier la différence entre sandeepmistry la réponse de davidgyoung réponse:
02 01 1a 1a ff 4C 00
fait partie de la spécification de format de données publicitaires [1]
02 # length of following AD structure
01 # <<Flags>> AD Structure [2]
1a # read as b00011010.
# In this case, LE General Discoverable,
# and simultaneous BR/EDR but this may vary by device!
1a # length of following AD structure
FF # Manufacturer specific data [3]
4C00 # Apple Inc [4]
0215 # ?? some 2-byte header
absent de la publicité est un Service [5] définition. Je pense que le protocole iBeacon lui-même n'a aucun rapport avec le GATT et la Standard service discovery. Si vous téléchargez le programme iBeacon de RedBearLab, vous verrez qu'ils se trouvent à utiliser le GATT pour configurer les paramètres de publicité, mais cela semble être spécifique à leur mise en œuvre, et ne fait pas partie de la spécification. Le programme AirLocate ne semble pas utiliser le GATT pour la configuration, par exemple, selon LightBlue et d'autres programmes similaires que j'ai essayé.
, les Références:
- Core Bluetooth Spec v4, Vol 3, Partie C, 11
- Vol 3, Partie C, 18.1
- Vol 3, Partie C, 18.11
- https://www.bluetooth.org/en-us/specification/assigned-numbers/company-identifiers
- Vol 3, Partie C, 18.2
si la raison pour laquelle vous posez cette question Est que vous voulez utiliser le Bluetooth Core pour annoncer comme un iBeacon plutôt que d'utiliser L'API standard, vous pouvez facilement le faire en annonçant un Nsdiction tel que:
{
kCBAdvDataAppleBeaconKey = <a7c4c5fa a8dd4ba1 b9a8a240 584f02d3 00040fa0 c5>;
}
Voir cette réponse pour plus d'informations.
c'est très simple, il annonce juste une chaîne qui contient quelques caractères conformes à la norme iBeacon D'Apple. vous pouvez renvoyer le lien http://glimwormbeacons.com/learn/what-makes-an-ibeacon-an-ibeacon/
iBeacon Profil contient 31 Octets qui comprend les éléments suivants
- préfixe-9 octets-qui comprend les données adv et les données du fabricant
- UUID-16 octets
- Major-2 Octets
- Minor-2 Octets
- TxPower-1 Byte