iBeacon Bluetoothプロファイルとは


150

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

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

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

ここに私がAppleのフォーラムでの議論やドキュメントを通して行ったいくつかの仮定があります。

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

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

すでにこれを理解していると思われるiBeacon Dev Kitを使用している企業がいくつかあります。

うまくいけば、次のようなプロファイルがBluetooth.orgに投稿されます。https//www.bluetooth.org/en-us/specification/adopted-specifications


実際には、私は4つの属性値が何であるかを理解しました
PaulWoodIII

Dan1One @私のしましたが、私はもっと何かがあると思い重複サービスの範囲ができませんでしたAppleのAirLocateのサンプルコードを使用して、その後、ライトブルーを使用してサービスを複製し、また、ライトブルーは、列挙された属性ハンドルがない
PaulWoodIII

CBPeripheralManager(バックグラウンドで実行されます)、または別の(iOS以外の)ソフトウェア、またはハードウェアでiBeaconを作成する方法をお探しですか?これは、必要な詳細につながります。
Wain

@Wain最初の段落のメモとして、自分のハードウェアを使用しようとしています。しかし、リンクされた質問で述べたように、バックグラウンドでiBeaconをアドバタイズするCBPeripheralManagerを使用してリンクされた質問の回答に役立つ可能性があります
PaulWoodIII

1
すごい!そのドキュメントを将来のプログラマーのためにここで共有できますか。2013年に質問したとき、それは確かにまだ存在していませんでした
PaulWoodIII

回答:


228

RSSIのProximityUUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0、major 0、minor 0、および調整されたTx Powerを持つiBeaconの-59場合、送信される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スタックをペリフェラルとして使用する(広告主)

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


これは素晴らしい!まさに私が探していたもの。しかし、誰かが私がチェックサムを計算する方法を説明できますか?
Benjamin Groener 2013年

仕様をもう少し完成させるのに役立つ別の質問があります。正しいブロードキャスト間隔は何ミリ秒ですか?私がiBeaconのベースとして使用しているテキサスインスツルメンツのコードを使用していることに気づき、近くのiBeaconのリストを表示するときに、AppleのAirlocateアプリが一貫性のない動作をするようになりました。
PaulWoodIII 2013年

UUID /プロキシミティUUIDはiBeaconに固有のBLEプロファイルですか、それともデバイスの製造元に依存しますか?iBeaconデバイスを区別するための推奨される方法は何ですか?BT MACアドレス、UUID、またはメジャー/マイナー値?
nickaknudson 2013年

David、Core Bluetooth GATT APIを使用するときに、iOSデバイスに特定のアドバタイズパケットを設定できましたか?オプションが見つかりませんでした。サービスと特性にはカスタムUUIDを定義できますが、アドバタイズには定義できません。
miguel 2013年

1
@ReinaldoJunior AD =広告データ。slackhappyによる回答のリファレンスを参照してください。
RenniePet 2015年

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

このnode.jsスクリプトは、サンプルのAirLocateアプリの例を使用してLinuxで動作しています。


悲しいことに、スクリプトはもう利用できません。もう一度共有していただけませんか?
Thomaschaaf 2014年

@Thomaschaafすみません、ここで削除しましたGithubの古いバージョンへのリンクです。また、bleaconを更新して、hcitool / hciconfigを生成する必要がないようにしました。
sandeepmistry 2014年

「1メートルで測定された電力:0xc5 = -59」0xc5から-59にどのように計算しますか?
andreasbecker.de 2014

@ andreasbecker.de 2の補数
sandeepmistry 14

@sandeepmistry node.jsスクリプトへのリンクが壊れています。
tedyyu

20

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プログラムは、設定にGATTを使用していないようです。たとえば、私が試したLightBlueや他の同様のプログラムによると、

参照:

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

@slackhappyに感謝します。回答を更新しました。2バイトのヘッダーは0x02データ型、0x15 = 21データ長です。
sandeepmistry 2013年

ありがとう@slackhappyこれは良いですが、馬鹿げた質問をしてもいいですか?「Coff in for a free coffee」などのメッセージを送信したい場合FFは、例のを文字列のHEX値に置き換えますか?(また、AD構造の長さをスイートに更新しますか?)
Mark



0

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

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

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.