mbed HRM1017を使用したビーコンの作り方

ことのはじめ

昨今、BLEビーコン発信用の製品が販売されている。 しかし、サポートの終了や、新しい規格が出てきた際に、新しいファームウェアがリリースされ対応できるといった保証が無い。 そこで、スイッチサイエンスで、販売されているmbed HRM1017を利用して、ビーコン発信機を作り色々実験してみようと思う。

スイッチサイエンス mbed HRM1017

mbed-HRM1017をはじめよう

iBeaconの動作確認

iBeaconとは

iBeaconは、Bluetooth Low Energy (BLE) を使用したappleのビーコン規格。 UUID, メジャー値, マイナー値が送出される。 アプリケーション側で、UUID, メジャー値, マイナー値を解釈し、それらを元に何らかのサービスを提供する必要がある。 例えば、企業で、同じUUIDを使い、地域ごとにメジャー値を振り、マイナー値は、店舗ごとに振って、それを解釈してアプリケーションは、それぞれの店舗のURLを表示するといったことが出来る。ただし、あくまでもアプリケーション開発が必要。

以下、参考ページおよび資料

iBeacon for Developers

Getting Started with iBeacon

Apple Developer 日本語ドキュメント

位置情報とマップ プログラミングガイド

iBeaconサンプルを動かす

下記のページを参考に、mbed HRM1017を使用して、iBeaconを送出してみる。

mbed HRM1017がやってきた! -3-

以下のプログラムをインポートする。

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

GoogleのEddystoneとはなんなのか

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は下記から取得

KazuyukiEguchi/main.cpp

サンプルコードのままだと、Eddystone-URLが有効になっている。 動作確認は、Androidの場合、Physical Webを使用した。 Android端末が、Eddystone-URLビーコンを認識すると、実装している任意のURLを通知することが出来る。 また、iOS端末では、Chromeで通知を取得することができるらしい。

Chrome でフィジカル ウェブを利用する

Ranging Dataの設定値

Eddystone-UID及びEddystone-URLには、Ranging Data(Calibrated Tx power at 0 m)というフィールドが存在する。 この値を元に、ビーコン発信源と受信端末の距離を算出する。 Physical Webを使用して、実測しながら調整したところ、0xF6くらいが実際の距離に近い値を出した。

参考ページ

RSSI と TxPower からビーコンとの距離および近接度(Proximity)を推定する


Please log in to post comments.