前回の続きです。
前回はこちら!
最も簡単にiBeaconの電波を発信する方法
さあiBeaconのアプリを作ってみよう!
となった時に、一番困るのがiBeaconを発信するアプリを作成しても、
電波はもちろん見えないため、本当に機能しているかどうかがわからないところです。
自分で実装?めんどいな…っていうかiPhone2台も持ってないしなぁ……
ここの周りにiBeacon形式のBluetooth飛んでないかなぁ……
というわけで、Macを使った最も簡単にiBeaconの電波を「受信」する方法をまとめたいと思います。
え?どこかで聞いたことがあるくだりだって?気にしない気にしない。
#環境
- Bluetooth Low Energy(BLE, Bluetooth4.0)が搭載されたMac製品
- Macbook Pro, Macbook Pro Retina, Macbook Airなどなど
- 最近の製品なら大抵OK
- node.js v0.10.24
#準備
Macでnode.jsとnpmを使えるようにする必要があります。
http://nodejs.org/
から"INSTALL"をクリックしpkgファイルをダウンロードし、インストールします。
その後、無ければ適当にディレクトリを作成しましょう。
ここでは~/ibeacon
を作成します。
mkdir ~/ibeacon
これで準備は完了です!
#iBeaconを受信してみる
今回はbleaconを使います。
まず、bleaconをnpm installしましょう。
cd ~/ibeacon
npm install bleacon
その後、適当にjsを書きます。下記をコピペでも構いません。
Bleacon = require('bleacon');
Bleacon.startScanning();
Bleacon.on('discover', function(bleacon) {
console.dir(bleacon);
});
これで準備は完了です。
実際に実行してみましょう。
node ~/ibeacon/beacon.js
これで特にエラーがでなければ電波を待ち構えている状態です。
あなたが作成した発信アプリを起動してみましょう!するとこんな感じでずらずらでてくるはずです。
{ uuid: 'cce55e10ea7f472faa05102fd7aeced8',
major: 36,
minor: 5,
measuredPower: -57,
rssi: -34,
accuracy: 0.22223443385817412,
proximity: 'immediate' }
{ uuid: 'cce55e10ea7f472faa05102fd7aeced8',
major: 36,
minor: 5,
measuredPower: -57,
rssi: -32,
accuracy: 0.19498999948233425,
proximity: 'immediate' }
{ uuid: 'cce55e10ea7f472faa05102fd7aeced8',
major: 36,
minor: 5,
measuredPower: -57,
rssi: -33,
accuracy: 0.20816698139465403,
proximity: 'immediate' }
{ uuid: 'cce55e10ea7f472faa05102fd7aeced8',
major: 36,
minor: 5,
measuredPower: -57,
rssi: -31,
accuracy: 0.18264712128403449,
proximity: 'immediate' }
...
取れる情報は、
- UUID: ビーコンに設定されているUUID
- major: ビーコンに設定されているmajor
- minor: ビーコンに設定されているminor
- measuredPower: 1mでのRSSI強度
- rssi: RSSI強度
- accuracy: measuredPowerとrssiから計算したビーコンとの距離(あてにならない)
- proximity: ビーコンとの近さ。
- unknown(不明), immediate(すぐそこ), near(近い), far(遠い)で表現
とまあ、iOSで使用できる値はほぼ取得できます。
上記のままだと、iBeaconのフォーマットに従ってAdvertiseされているBluetoothすべてを表示します。
自分の発信アプリだけの挙動が見たい場合はUUID、major、minorを指定して、それだけを受信することもできます。
Bleacon.startScanning(uuid); //UUIDが一致するものすべて
Bleacon.startScanning(uuid, major); //UUIDとmajorが一致するものすべて
Bleacon.startScanning(uuid, major, minor); //UUIDとmajorとminorが一致するものすべて
とても簡単!