mbed HRM1017を使用したビーコンの作り方
ことのはじめ
昨今、BLEビーコン発信用の製品が販売されている。 しかし、サポートの終了や、新しい規格が出てきた際に、新しいファームウェアがリリースされ対応できるといった保証が無い。 そこで、スイッチサイエンスで、販売されているmbed HRM1017を利用して、ビーコン発信機を作り色々実験してみようと思う。
iBeaconの動作確認
iBeaconとは
iBeaconは、Bluetooth Low Energy (BLE) を使用したappleのビーコン規格。 UUID, メジャー値, マイナー値が送出される。 アプリケーション側で、UUID, メジャー値, マイナー値を解釈し、それらを元に何らかのサービスを提供する必要がある。 例えば、企業で、同じUUIDを使い、地域ごとにメジャー値を振り、マイナー値は、店舗ごとに振って、それを解釈してアプリケーションは、それぞれの店舗のURLを表示するといったことが出来る。ただし、あくまでもアプリケーション開発が必要。
以下、参考ページおよび資料
iBeaconサンプルを動かす
下記のページを参考に、mbed HRM1017を使用して、iBeaconを送出してみる。
以下のプログラムをインポートする。
Import programBLE_Beacon
Simple beacon for nRF51822
その後、nRF51822ライブラリの下記の部分を書き換える必要がある。
※Nordic nRF51822には、外部水晶発振子が実装されているが、mbed HRM1017には実装されておらず、nRF51822内蔵の発振回路を使用するように変更する為
source/btle/btle.cpp 88行目
//SOFTDEVICE_HANDLER_INIT(clockSource, eventHandler); SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, false);
動作確認は、Androidの場合、参考ページの例にならって、iBeacon Detectorを使用した。 他にも、何種類かアプリが存在。
iBeacon発信の総括
ビーコン発信に必要なライブラリは、以下の二つ。
Import librarynRF51822
Nordic stack and drivers for the mbed BLE API
Import libraryBLE_API
High level Bluetooth Low Energy API and radio abstraction layer
また、mbed HRM1017で動作させるには、nRF51822ライブラリに変更が必要。
UUIDは、Linuxなどのuuidgenコマンドで作成された一意のUUIDを使用することにより、UUIDが重なることを防ぐ。
iBeaconを使ったサービスを提供するには、iPhoneやAndroidスマートホンでアプリを作成し、iBeaconを解釈する必要がある。
Eddystoneの動作確認
Eddystoneとは
Eddystoneは、Bluetooth Low Energy (BLE) を使用したGoogleのビーコン規格。 オープンな仕様で、様々なプラットフォームに対応可能。
2016年1月現在、Eddystone-UID, Eddystone-URL, Eddystone-TLMの3種類のフレームタイプがある。
Eddystone-UIDは、iBeaconとほぼ同様の使い方が想定される。Eddystone-URLは、Physical Webの実装形態。URLを直接送出できる。Eddystone-TLMは、ビーコンの状態を送出するフレームタイプ。
参考ページ
Eddystone Protocol Specification
Eddystoneサンプルを動かす
下記のページを参考に、mbed HRM1017を使用して、Eddystoneを送出してみる。
mbed HRM1017 をつかって、Eddystone対応のビーコンを作ってみる
プロジェクトの作り方は、iBeaconの時と同様、以下2つのライブラリをインポートし、nRF51822のsource/btle/btle.cppを1行修正する。
Import librarynRF51822
Nordic stack and drivers for the mbed BLE API
Import libraryBLE_API
High level Bluetooth Low Energy API and radio abstraction layer
main.cppは下記から取得
サンプルコードのままだと、Eddystone-URLが有効になっている。 動作確認は、Androidの場合、Physical Webを使用した。 Android端末が、Eddystone-URLビーコンを認識すると、実装している任意のURLを通知することが出来る。 また、iOS端末では、Chromeで通知を取得することができるらしい。
Ranging Dataの設定値
Eddystone-UID及びEddystone-URLには、Ranging Data(Calibrated Tx power at 0 m)というフィールドが存在する。 この値を元に、ビーコン発信源と受信端末の距離を算出する。 Physical Webを使用して、実測しながら調整したところ、0xF6くらいが実際の距離に近い値を出した。
参考ページ
Please log in to post comments.