Що таке профіль iBeacon Bluetooth


150

Я хотів би створити власний iBeacon з декількома наборами bluetooth-розробників з низькою енергією. Apple ще не випустила специфікацію для iBeacons, проте декілька розробників обладнання переробили інженер iBeacon з коду AirLocate Sample і почали продавати комплекти розробників iBeacon.

Отже, що таке профіль iBeacon Bluetooth?

Bluetooth Low Energy використовує GATT для виявлення послуги LE-профілю. Тому я думаю, що нам потрібно знати ручку атрибутів, тип атрибутів, значення атрибутів і, можливо, дозволи атрибута атрибута iBeacon. Отже, для iBeacon з UUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 основне значення 1 та незначне значення 1, якою буде служба профілю Bluetooth GATT?

Ось деякі припущення, які я висловив із обговорення на форумах Apple і через документи.

  1. Вам потрібно лише побачити службу профілю (GATT) периферійного пристрою Bluetooth, щоб знати, що це iBeacon.

  2. Основні та мінорні ключі закодовані десь у цій службі профілю

Ось деякі компанії з iBeacon Dev Kits, які, здається, вже мають це:

Сподіваємось, що з часом у нас буде розміщений такий профіль на Bluetooth.org: https://www.bluetooth.org/en-us/specification/adopted-specifications


насправді зараз я зрозумів, які 4 атрибутні значення
PaulWoodIII,

@ Dan1One Я скопіював послугу за допомогою світло-синього, потім, використовуючи зразок коду Apple AirLocate, я не міг віднести до дублірованого сервісу. Я думаю, що є щось більше. Також у світло-синього кольору немає переліченої ручки атрибутів
PaulWoodIII

Ви шукаєте спосіб створити iBeacon за допомогою CBPeripheralManager (який працює у фоновому режимі), або інший фрагмент програмного забезпечення (не для iOS) чи обладнання? Це призведе до необхідних деталей.
Вейн

@Wain Я намагаюся вкласти власне обладнання як перше абзац. Але, як я зазначив у зв’язаному питанні, це може бути корисним для відповіді на пов'язане питання, використовуючи CBPeripheralManager, що рекламує iBeacon у фоновому режимі
PaulWoodIII,

1
Чудово! Чи можете ви поділитися цією документацією тут для майбутніх програмістів, коли я задав питання у 2013 році, її точно не існувало
PaulWoodIII

Відповіді:


228

Для iBeacon з ProximityUUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0, основним 0, мінорним 0та каліброваним потужністю Tx -59RSSI, переданий рекламний пакет BLE виглядає приблизно так:

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

Цей пакет можна розділити наступним чином:

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

Ключовою частиною цього пакету є реклама Bluetooth, яку можна розбити так:

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

Будь-який пристрій Bluetooth LE, який можна налаштувати для надсилання певної реклами, може генерувати вищевказаний пакет. Я налаштував комп’ютер Linux за допомогою Bluez для надсилання цієї реклами, а пристрої iOS7, на яких працює тестовий код Apple AirLocate, підбирають її як iBeacon із зазначеними вище полями. Дивіться: Використовуйте BlueZ стек як периферійний (рекламодавець)

У цьому блозі є повна інформація про зворотний інженерний процес.


Це чудово! Саме те, що я шукав. Але чи міг би хтось пояснити, як я можу обчислити контрольну суму?
Бенджамін Грінер

У мене є ще одне запитання до вас, щоб допомогти нам трохи більше виконати специфікацію. Який, здається, правильний інтервал мовлення у мс? Я зауважую, що використовую код інструментів texas, який я використовую як основу для свого iBeacon, робить додаток Apple Airlocate таким чином невідповідним під час відображення списку iBeacons поблизу.
PaulWoodIII

Чи UUID / близькістьUUID є профілем BLE, характерним для iBeacon, чи це залежить від виробника пристрою? Який кращий метод розрізнення пристроїв iBeacon: адреса BT MAC, UUID або основні / незначні значення?
nickaknudson

Девіде, чи вдалося вам налаштувати пристрій iOS із певним рекламним пакетом під час використання базових API GATT Bluetooth? Я не зміг знайти варіант. Ви можете визначити власні UUID для служб та характеристик, але не для реклами.
miguel

1
@ReinaldoJunior AD = Рекламні дані. Дивіться посилання у відповідь невідомого.
RenniePet

47

Це, мабуть, ґрунтується на даних реклами, зокрема даних виробників:

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 (Little Endian), 0x004c
  • тип даних, 0x02 => iBeacon
  • довжина даних, 0x15 = 21
  • uuid: 585CDE931B0142CC9A1325009BEDC65E
  • основний: 0000
  • неповнолітній: 0000
  • вимірювана потужність на 1 метр: 0xc5 = -59

У мене цей скрипт node.js працює в Linux на прикладі прикладу AirLocate.


На жаль, сценарій більше не доступний. Ви б не хотіли поділитися цим ще раз?
Thomaschaaf

@Thomaschaaf вибачте, що я видалив тут посилання на стару версію в Github. Я також оновив bleacon, щоб не вимагати нерестувати hcitool / hciconfig.
сандепіемія

"вимірювана потужність на 1 метр: 0xc5 = -59", як обчислити від 0xc5 до -59?
andreasbecker.de

@ andreasbecker.de ви берете доповнення двох
sandeepmistry

@sandeepmistry посилання на скрипт node.js тепер порушено.
tedyyu

20

Просто для того, щоб вирівняти різницю між відповіддю сандепіхіміки та відповіддю давидджоуна:

02 01 1a 1a ff 4C 00

Є частиною специфікації формату рекламних даних [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

Відсутнє в AD - це Сервіс [5]. Я думаю, що сам протокол iBeacon не має відношення до GATT та відкриття стандартних послуг. Якщо ви завантажите програму iBeacon RedBearLab, ви побачите, що вони, можливо, використовують GATT для налаштування параметрів реклами, але це здається специфічним для їх реалізації, а не частиною специфікації. Програма AirLocate, здається, не використовує GATT для конфігурації, наприклад, згідно LightBlue та інших подібних програм, які я пробував.

Список літератури:

  1. Core Bluetooth Spec v4, том 3, частина C, 11
  2. Випуск 3, частина С, 18.1
  3. Випуск 3, частина С, 18.11
  4. https://www.bluetooth.org/en-us/specification/assigned-numbers/company-identifiers
  5. Випуск 3, частина С, 18.2

Дякую @slackhappy, я оновив свою відповідь. 2-байтний заголовок - це 0x02 тип даних, 0x15 = 21 довжина даних.
sandeepmistry

дякую @slackhappy це добре, але чи можу я задати тупе запитання? Якщо я хотів би надіслати якесь повідомлення на кшталт "Заходьте на безкоштовну каву" чи щось подібне, я б просто замінив FFу вашому прикладі значення HEX мого рядка? (а також оновіть довжину структури AD для набору?)
Позначте

6

Якщо ви ставите це запитання, це тому, що ви хочете використовувати Core Bluetooth для реклами як iBeacon, а не використовувати стандартний API, ви можете легко зробити це, рекламуючи NSDictionary, наприклад:

{
    kCBAdvDataAppleBeaconKey = <a7c4c5fa a8dd4ba1 b9a8a240 584f02d3 00040fa0 c5>;
}

Дивіться цю відповідь для отримання додаткової інформації.



0

Профіль iBeacon містить 31 байт, який включає наступні відомості

  1. Префікс - 9 байт, що включає дані adv та дані виробника
  2. UUID - 16 байт
  3. Основний - 2 байти
  4. Незначна - 2 байти
  5. TxPower - 1 байт

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.