1. ホーム
  2. ios

[解決済み] iBeacon Bluetoothプロファイルとは

2022-05-04 06:29:47

質問内容

Bluetooth Low Energyの開発キットを使って、iBeaconを自作したいのですが、どうすればいいですか?AppleはまだiBeaconの仕様を公開していませんが、いくつかのハードウェア開発者がAirLocateサンプルコードからiBeaconをリバースエンジニアリングして、iBeacon開発キットを販売し始めています。

では、iBeacon Bluetooth Profileとは何でしょうか?

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

以下は、Appleのフォーラムでの議論やドキュメントを通して私が行った仮定です。

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

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

iBeacon Dev Kitsを持つ企業で、すでにこの図を持っているような企業をいくつか紹介します。

いずれは、このようなBluetooth.orgに掲載されるプロフィールができるといいですね。 https://www.bluetooth.org/en-us/specification/adopted-specifications

解決方法は?

ProximityUUIDを持つiBeaconの場合 E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 メジャー 0 , マイナー 0 の較正済みTxパワー。 -59 RSSIの場合、送信される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 Advertisementで、次のように分解することができます。

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スタックをペリフェラル(広告主)として使用する

この ブログ は、リバースエンジニアリングのプロセスを詳しく説明しています。