J'aimerais créer mon propre iBeacon avec des kits de développement Bluetooth basse consommation. Apple n'a pas encore publié de spécification pour les iBeacons, mais quelques développeurs de matériel ont procédé à une ingénierie inverse de l'iBeacon à partir du code exemple AirLocate et ont commencé à vendre des kits de développement iBeacon.
Alors, quel est le profil Bluetooth iBeacon?
Bluetooth Low Energy utilise GATT pour la découverte de services de profil LE. Je pense donc que nous devons connaître le descripteur d'attribut, le type d'attribut, la valeur d'attribut et peut-être les autorisations 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 que serait le service de profil Bluetooth GATT?
Voici quelques hypothèses que j'ai faites à partir de la discussion sur les forums d'Apple et de la documentation.
Il vous suffit de voir le service de profil (GATT) d'un périphérique Bluetooth pour savoir qu'il s'agit d'un iBeacon.
Les clés majeures et mineures sont encodées quelque part dans ce service de profil
Voici quelques entreprises avec des kits de développement iBeacon qui semblent déjà avoir ce chiffre:
Avec un peu de chance, nous aurons un profil publié sur Bluetooth.org comme celui-ci: https://www.bluetooth.org/en-us/specification/adopted-specifications
la source
Réponses:
Pour un iBeacon avec ProximityUUID
E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
, majeur0
, mineur0
et calibré Tx Power de-59
RSSI, le paquet de publicité BLE 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:
La partie clé de ce paquet est la publicité Bluetooth, qui peut être décomposée comme ceci:
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 exécutant le code de test AirLocate d'Apple le récupèrent comme iBeacon avec les champs spécifiés ci-dessus. Voir: Utiliser BlueZ Stack comme périphérique (annonceur)
Ce blog contient tous les détails sur le processus de rétro-ingénierie.
la source
Il semble basé sur des données publicitaires, en particulier les données du fabricant:
J'ai ce script node.js fonctionnant sous Linux avec l'exemple d'application AirLocate.
la source
Juste pour concilier la différence entre la réponse de Sandeepmistry et la réponse de Davidgyoung:
Fait partie de la spécification du format des données publicitaires [1]
Une définition de service [5] est absente de l'AD. Je pense que le protocole iBeacon lui-même n'a aucun rapport avec le GATT et la découverte de services standard. Si vous téléchargez le programme iBeacon de RedBearLab, vous verrez qu'ils utilisent le GATT pour configurer les paramètres de publicité, mais cela semble être spécifique à leur implémentation 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 / ou d'autres programmes similaires que j'ai essayés.
Références:
la source
FF
dans votre exemple par la valeur HEX de ma chaîne? (et aussi mettre à jour la longueur de la structure AD en suite?)Si la raison pour laquelle vous posez cette question est que vous souhaitez utiliser Core Bluetooth pour faire de la publicité en tant qu'iBeacon plutôt que d'utiliser l'API standard, vous pouvez facilement le faire en annonçant un NSDictionary tel que:
Voir cette réponse pour plus d'informations.
la source
C'est très simple, il annonce juste une chaîne qui contient quelques caractères conformes à la norme iBeacon d'Apple. vous pouvez vous référer au lien http://glimwormbeacons.com/learn/what-makes-an-ibeacon-an-ibeacon/
la source
Le profil iBeacon contient 31 octets qui comprend les éléments suivants
la source