1. ホーム
  2. uuid

[解決済み] Beacon UUIDとBeaconLayoutの比較

2022-02-19 23:31:30

質問

現在、Beaconの仕組みに興味があるのですが、いくつか質問があります。 iOSの場合、Beacon UUIDに関するソースコードしか見当たりません。しかし、Androidの場合は、"beacon layouts"しか見当たりません。

これらは同じものですか?あるフォーマットから別のフォーマットに変換できるのでしょうか?

このBeaconのUUIDがあるとします。

636f3f8f-6491-4bee-95f7-d8cc64a863b5

これは、ビーコンレイアウトを取得することは可能なのでしょうか?というより、ビーコンレイアウトとはいったい何なのでしょうか?

ありがとうございました。

解決方法は?

ビーコンレイアウトとは、ビーコンフォーマットのことで、Bluetooth LEアドバタイジングパケット内の情報を送信するために必要なバイトに、さまざまなフィールドをどのようにエンコードするかということを指します。

アップル社など一部の企業は、ビーコンフォーマットを企業秘密として管理しており、公開を許可していません。 Android Beacon Libraryのようなオープンソースのモジュールでは、ビーコンをデコードする方法を公開せずに含めることはできません。 そこで、レイアウト文字列を使用します。これは、ユーザーが迅速かつ容易にビーコンをデコードするようライブラリに指示するための方法です。

これはオープンソースの AltBeacon フォーマットの例で、人々が公開することを気にしません。

m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25

つまり、このレイアウトに合致するBluetooth LEビーコン通信は、次のようにエンコード/デコードできます。

  • 2 バイトと 3 バイトに 0xbeac の 2 バイトのタイプコードを持つ製造者広告パケット(m)を使用する。
  • 4~19バイトに最初の識別子(ID1、iBeacon UUIDに相当)を持つ。
  • 20-21バイトに第2識別子(ID2:iBeacon majorに相当)を持つ。
  • 22-23バイトに第3識別子(ID3:iBeacon minorに相当)を持つ。
  • レイアウトのquot;p"とquot;d"の部分は、距離推定用のキャリブレーション値quot;power"と、バッテリーレベルやその他のメーカー固有の情報を格納するquot;data"フィールドを指します。

iBeaconやEddystoneなど、他にも一般的なビーコンフォーマットがいくつかあります。 これらはそれぞれ独自のレイアウト文字列を持っていますが、どちらも上記のものと非常によく似ています。

一方 異なるビーコン形式を互換的に使用することはできません。 iOSとAndroidの両方で、これらすべてのビーコン形式を使用することができます。 Androidで独自のフォーマットを使用するには、Googleで検索してビーコンフォーマットに適したレイアウト文字列を見つけ、次のように設定するだけです。

 BeaconManager.getBeaconParsers().add(
   new BeaconParser().setBeaconLayout("<paste layout string here>"));