web-dev-qa-db-ja.com

iBeacon Bluetoothプロファイルとは

Bluetooth低エネルギー開発キットをいくつか使用して、独自のiBeaconを作成したいと思います。 AppleはまだiBeaconsの仕様をリリースしていませんが、いくつかのハードウェア開発者がAirLocateサンプルコードからiBeaconをリバースエンジニアリングし、iBeacon開発キットの販売を開始しました。

では、iBeacon Bluetoothプロファイルとは何ですか?

Bluetooth Low Energyは、LEプロファイルサービスの検出にGATTを使用します。そのため、iBeacon属性の属性ハンドル、属性タイプ、属性値、そしておそらく属性許可を知る必要があると思います。 UUIDがE2C56DB5-DFFB-48D2-B060-D0F5A71096E0のiBeaconのメジャー値1とマイナー値1の場合、Bluetooth GATTプロファイルサービスはどうなりますか?

Appleのフォーラムでの議論とドキュメントを通して私が下したいくつかの仮定を以下に示します。

  1. Bluetooth周辺機器のプロファイルサービス(GATT)を見るだけで、それがiBeaconであることがわかります。

  2. メジャーキーとマイナーキーは、このプロファイルサービスのどこかにエンコードされます。

IBeacon Dev Kitsを使用し、既にこの数字を把握していると思われる企業の例を次に示します。

次のようなプロファイルがBluetooth.orgに投稿されることを願っています: https://www.bluetooth.org/en-us/specification/adopted-specifications

149
PaulWoodIII

ProximityUUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0、major 0、minor 0、および-59 RSSIの較正済みTx Powerを備えたiBeaconの場合、送信される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デバイスは、上記のパケットを生成できます。 Bluezを使用してこの広告を送信するLinuxコンピューターを構成しました。AppleのAirLocateテストコードを実行しているiOS7デバイスは、上記のフィールドを持つiBeaconとしてピックアップします。参照: BlueZ Stackを周辺機器として使用(広告主)

この blog には、リバースエンジニアリングプロセスに関する詳細が記載されています。

221
davidgyoung

広告データ、特にメーカーのデータに基づいているようです。

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
  • データ型、0x02 => iBeacon
  • データ長、0x15 = 21
  • uuid:585CDE931B0142CC9A1325009BEDC65E
  • メジャー:0000
  • マイナー:0000
  • 1メートルでの測定電力:0xc5 = -59

私はこれを持っています node.jsスクリプト サンプルAirLocateアプリの例でLinuxで作業しています。

45
sandeepmistry

Sandeepmistryの答えとdavidgyoungの答えの違いを調整するだけです:

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および標準のサービス検出とは関係ないと思います。 RedBearLabのiBeaconプログラムをダウンロードすると、広告パラメーターの構成にGATTが使用されることがわかりますが、これは仕様の一部ではなく、実装に固有のようです。 AirLocateプログラムは、たとえば、LightBlueや私が試した他の同様のプログラムによると、構成にGATTを使用していないようです。

参照:

  1. Core Bluetooth Spec v4、Vol 3、パートC、11
  2. Vol 3、パートC、18.1
  3. Vol 3、パートC、18.11
  4. https://www.bluetooth.org/en-us/specification/assigned-numbers/company-identifiers
  5. Vol 3、パートC、18.2
20
slackhappy

この質問をする理由が、標準APIを使用するのではなく iBeaconとして広告するためにCore Bluetoothを使用する である場合、次のようなNSDictionaryを広告することで簡単に行うことができます。

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

詳細については、 この回答 を参照してください。

6
Senseful

これは非常に単純で、AppleのiBeacon規格に準拠したいくつかの文字を含む文字列を宣伝するだけです。リンクを参照できます http://glimwormbeacons.com/learn/what-makes-an-ibeacon-an-ibeacon/

4

iBeaconプロファイルには、以下を含む31バイトが含まれています

  1. プレフィックス-9バイト-advデータとManufacturerデータを含む
  2. UUID-16バイト
  3. メジャー-2バイト
  4. マイナー-2バイト
  5. TxPower-1バイト

enter image description here

0
Ambi