Radius Networks
とioGear GBU521 BLE 4.0 dongle
を含むRaspberry Pi
から開発者キットを購入しました。 RadBeacon iBeacons
の1つも購入しました。両方とも宣伝どおりに機能しますが、私が得たものにちょっと驚きました。
私はRaspPi
がiBeacons
を検出できると想定していました。代わりに、キットはcreate an iBeacon
にセットアップされます。私のユースケースは、forklift
が特定の部屋に入ったときを検出して、仕事を送れるようにすることです。私の考えは、フォークリフトにiBeaconを置き、次にiBeaconsを検索するRaspPiを置くことでした。また、iBeacon(フォークリフト)が検出された場合、近くにあると結論付けることができます。 RaspPiをLAN
に配線し、REST or similar
を介して情報を伝達します。適切なAndroid or Apple device
を配置してそれを達成できることは知っていますが、このドングルがこれらのiBeacons
を検出できず、そのUUID's
が何であるかを教えてくれません。私は何が欠けていますか?
はい! Raspberry Piを使用して、iBeaconsをスキャンできます。これを行うスクリプトを以下にまとめましたが、次の手順で自分で行うこともできます。
Bluetooth LEスキャンを実行するバックグラウンドプロセスを開始します。
Sudo hcitool lescan --duplicates &
--duplicates
設定を使用すると、スキャンは同じiBeaconからの複数のパケットを無視しません。
hcidump
を開始し、iBeaconパケットをフィルタリングするスクリプトに生の出力をパイプします。
Sudo hcidump --raw
フィルタリングは注意が必要な部分です。hcidump
からの生の出力は適切にフォーマットされておらず、iBeacon送信ではないパケットも表示されます。これを解決するために、出力を1行ずつ読み込み、他の出力(MACアドレスなど)から生のパケットを分離するフィルタースクリプトを作成しました。 Radius Networksでは、 iBeacon bluetooth profile について多くの研究を行ってきました。これを使用して、iBeaconパケットを識別し、他のデバイスからのパケットから除外しました。
これをすべて、生の識別子を人間が読める形式に変換するなど、すべてを実行するibeacon_scan
スクリプトにまとめました。ダウンロードできます こちら 。まもなく、これを iBeacon Development Kit に含めて、スキャン機能を追加します。
スクリプトからの出力の例を次に示します。
$ ./ibeacon_scan
UUID: 74278BDA-B644-4520-8F0C-720EAF059935 MAJOR: 0 MINOR: 73 POWER: -50
UUID: 2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 MAJOR: 1 MINOR: 6 POWER: -59
UUID: E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 MAJOR: 6 MINOR: 9 POWER: -55
他のスクリプトに簡単に解析できるベア出力用の-b
オプションも含まれています。以下に例を示します。
$ ./ibeacon_scan -b
2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 6 -59
E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 6 9 -55
74278BDA-B644-4520-8F0C-720EAF059935 0 73 -50
このオプションを使用し、スクリプトの出力をスクリプトにパイプして、特定の識別子を持つiBeaconsが検出されたときにアクションをトリガーできます。
EDIT:このスクリプトを書き直して、応答性と堅牢性を高め、 開発キット の最新バージョンに組み込みました=。更新プログラムは、 こちら からダウンロードできます。
EDIT2:@ sai-ramachandran で指摘されているように、このスクリプトを拡張して各iBeaconパケットのRSSIをキャプチャできます。 POWERに加えて。これを行うには、スクリプトに次の行を追加します。
RSSI=`echo $packet | sed 's/^.\{132\}\(.\{2\}\).*$/\1/'`
RSSI=`echo "ibase=16; $RSSI" | bc`
RSSI=$[RSSI - 256]
そして、出力にRSSIを追加してください:
echo "UUID: $UUID MAJOR: $MAJOR MINOR: $MINOR POWER: $POWER RSSI: $RSSI"
iBeacon Development Kit はiBeaconsを検出するように設計されておらず、iBeaconとして送信するように設計されていることは正しいです。
とはいえ、コメントで @ ChrisStratton が示唆するもののバリエーションを使用して、Raspberry PiでiBeaconsを検出することが可能です。私の同僚 @ jjnebeker からの回答をご覧ください。