[解決済み] iBeacon Bluetoothプロファイルとは
質問内容
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のフォーラムでの議論やドキュメントを通して私が行った仮定です。
-
Bluetooth周辺機器のプロファイルサービス(GATT)を見るだけで、それがiBeaconであることがわかる。
-
メジャーキーとマイナーキーは、このプロファイルサービスのどこかにエンコードされています。
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スタックをペリフェラル(広告主)として使用する
この ブログ は、リバースエンジニアリングのプロセスを詳しく説明しています。
関連
-
[エラー処理】iOSのエラー、アーキテクチャx86_64の未定義シンボルについて
-
IOS8 Development Guide Error Thread 1: signal SIGABRT
-
[解決済み] iOSのステータスバーの文字色を変更する方法
-
[解決済み] Objective-Cで文字列が空かどうかをテストするにはどうすればよいですか?
-
[解決済み] テキストフィールドを移動する方法(次へボタン/完了ボタン)
-
[解決済み] iOSとWatchKitで画像のtintColorを変更する方法
-
[解決済み] UIViewの角丸とドロップシャドウ?
-
[解決済み] UITextFieldのテキストインセット?
-
[解決済み] Swift 3でディスパッチキューを作成する方法
-
[解決済み] iOSアプリをApple Developer Programや脱獄せずにデバイス上でテストすることができます。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
-
[解決済み] iOSのバージョンを確認する方法を教えてください。
-
[解決済み] Xcode 7のエラーです。"Missing iOS Distribution signing identity for ..." (iOS配布用署名IDがありません)
-
[解決済み] フレームワークを使用したiOSアプリがデバイス上でクラッシュ、dyld: ライブラリがロードされない、Xcode 6 Beta
-
[解決済み] UIViewController のビューが表示されているかどうかを確認する方法
-
[解決済み] iOS 13 のフルスクリーンでモーダルを表示する
-
[解決済み] UINavigationBarの1px下の行を非表示にする方法
-
[解決済み] UIDevice uniqueIdentifierは非推奨 - どうしたらいいの?
-
[解決済み] iPhone 5の画面解像度に対応したアプリを開発・移行するには?
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?