RedBearLab BLE NanoをiBeacon化

RedBearLab BLE NanoキットでiBeacon化する方法を紹介します。


■開発環境
【(iBeacon化)IoTデバイス】
・RedBearLab BLE Nanoキット(nRF51822) 技適ありで自由に開発できるモジュールは(おそらく)最安なので、これをiBeacon化します。
https://www.switch-science.com/catalog/2401/
・開発環境 - mbed

【PC】
・MacBookAir OS X EI Capitan Version 10.11.6
・Xcode Version 7.3.1

【モバイル】
・iPhone6 iOS 9.3


■iBeacon化までの全体像と手順
ファームウェア更新する → mbedでiBeaconサンプルファイル作る → BLE Nano接続してMBEDドライブにポイする → iPhoneにiBeaconアプリ入れる → BLE Nanoを発見する

以下、手順になります。

1.ファームウェアを更新する
BLE Nanoのリセットボタンを押しながら、PCのUSBポートに接続する。すると「BOOTLOADER」ドライブがマウントされる。
以下URLから「Firmware」ー「blenano_mk20dx_interface_20140912.bin」っぽい名前のファイルをDLしてから、ターミナルで
「dd if=DLしたファームウェアのパスとファイル名 of=/Volumes/BOOTLOADER/firmware.bin conv=notrunc」
(例) dd if=/Users/256hax/Downloads/blenano_mk20dx_interface_20140912.bin of=/Volumes/BOOTLOADER/firmware.bin conv=notrunc
と入力する。
https://developer.mbed.org/platforms/RedBearLab-BLE-Nano/
するとBLE Nanoが自動的に ファームウェアを更新 → ドライブをアンマウント → ドライブをマウント してくれる。

【RedBearLab BLE Nano - mbed(上記URL)で掲載されている手順】

Interface Firmware

To upgrade the interface firmware (inside the MK20 chip):

1. Press and hold the reset button on the MK20 USB board

2. Connect it to an USB port of your PC

3. "BOOTLOADER" drive will be shown

4. Release the button and the LED will keep flashing (slowly)

5.1 For Windows, just drag the new firmware to the MSD drive

5.2 For Linux or Mac OSX, use the follow command from the Terminal:

Quote:

dd if=src_firmware.bin of=/Volumes/BOOTLOADER/dst_firmware.bin conv=notrunc

6. The LED should keep flashing (very fast this time)

7. Remove the board from the USB port

8. Reconnect it to the USB port
Firmware:

※正常に書き込まれると自動的にマウント解除+再接続してMBEDドライブが表示される。
※ファームウェアのファイルをBOOTLOADERドライブにドラッグ&ドロップする、というコメントをブログで見かけたが、自分の場合はそれだとダメだった。
※何か間違えて書き込んでしまってBLE Nanoが動かなくなってしまった場合でも、上記の方法で元に戻すことができる。例えば、BLE NanoをUSBポートに差し込んでも認識されなくなった・・・みたいな状況になった場合は上記を試すと直ることがある。

2.mbedでiBeaconサンプルファイル作る
【mbedの利用方法は以下を参照】
http://redbearlab.com/getting-started-nrf51822

上記の知識がある前提で以下を実行する。

Importボタンを押して「ibeacon」で検索し、Team Bluetooth Low EnergyがAuthorになっている「BLE_iBeacon」をインポートする。
※よく「Libraries」のタブ開いて検索しちゃうことがあるため、「Programs」タブを開いているか確認しておくこと

次に、インポートしたプログラムのmain.cppを開いて、初期値になっているUUIDをコメントアウントしてユニークなUUIDを記述する。以下のUUIDは一例です。
--------------------------------------------------------------------------------------------------------------
     /* Comment out - Default UUID
    const uint8_t uuid[] = {0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4,
                            0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61};
    */
    /* Add - RedBearLab UUID */
    const uint8_t uuid[] = {0xE2, 0xC5, 0x6D, 0xB5, 0xDF, 0xFB, 0x48, 0xD2, 0xB0, 0x60, 0xD0, 0xF5, 0xA7, 0x10, 0x96, 0xE0};
    uint16_t majorNumber = 1122;
    uint16_t minorNumber = 3344;
--------------------------------------------------------------------------------------------------------------

コンパイルしてhexファイルをDLする。

3.BLE Nano接続してMBEDドライブにポイする
BLE NanoをPCのUSBポートに接続して、上記でDLしたhexファイルをマウントされた「MBED」ドライブにドラッグ&ドロップする。
※この時にhexファイルがMBEDドライブに書き込まれるのは見えないが、 アンマウント → マウント が自動的に実施されれば正常に書き込みが出来ている。

4.iPhoneにiBeaconアプリ入れる
Radius NetworsのLocate BeaconをiPhoneにインストールする。
https://itunes.apple.com/jp/app/locate-beacon/id738709014?mt=8

もしXcodeでiBeaconのiOS向けサンプルプログラムをいじりたい場合は、以下のIoT Design Shopの「Download the
BeaconDemo Project Here.」をDLしてから、UUIDをBLE Nanoの値に書き換えればOK。
http://developer.iotdesignshop.com/tutorials/integrating-ibeacon-with-your-apps-the-beacondemo-project/

【BLE NanoのUUID】
以下パターン1か2のどちらかを状況に合わせて記述する。※以下は例なのでUUIDはご自信が生成されたユニークなUUIDを使ってください。
パターン1:E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
パターン2:0xE2, 0xC5, 0x6D, 0xB5, 0xDF, 0xFB, 0x48, 0xD2, 0xB0, 0x60, 0xD0, 0xF5, 0xA7, 0x10, 0x96, 0xE0

(BLE NanoのGetting StartedにもUUIDは載っています)
http://redbearlab.com/getting-started-nrf51822

5.BLE Nanoを発見する
iPhoneからLocate Beaconアプリを立ち上げて、右下のレーダーマークになっているメニューをタップして、「To configure other UUIDs, click the "Gear" icon above.」をタップして以下を設定する。
--------------------------------------------------------------------
Beacon Name:BLE Nano
UUID: E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
Major:1122
Minor:3344
Power:デフォルト(-59)
--------------------------------------------------------------------

次に、前の画面に戻って左下の レーダーマークのメニューを再度タップして、登録したBLE Nanoデバイスが表示されれば成功。表示されているデバイスをタップすると、DistanceとかCalibrateが実行できる。

■備考
・開発方法は、mbed, Nordiac, Arduinoの3種類あるが、開発はmbedがおすすめ。Nordiacは環境整えるが難しすぎる。Arduinoはまだ一般提供レベルではないっぽい。

・MacのOSが古いとBLE Nanoを差してもMBEDがマウントされないことがあるらしい。もし最新なのにマウントされない場合は、ファームウェアの更新をしてみてください。

・ iBeacon化のサンプルが少なく、この記事で紹介したものぐらいしか、2016年8月現在では、ちゃんとしたものが発見できなかった(おそらく時間が経ってソースやらデバイスやらが追いついていないっぽい)。

・Xcodeで開発する場合は、Apple公式の「AirLocate」が定番になっているようですが、iOS7以降にソースが対応しておらず(ユーザー許可関連)、
iPhoneで発見できなかった。なにやら、Blutoothを利用する時にユーザー許可が必要うんぬんとかで、ソースを修正しないと動かないようです
(修正してみたがうまく動かせず)。
https://developer.apple.com/library/ios/samplecode/AirLocate/Introduction/Intro.html

・Xcode開発時に、アプリをシミュレータで動かして動作確認すると思いますが、Bluetoothは動かせないとのことで、XcodeからiPhone実機にアプリをインストールして動作確認する必要があります。

・UUIDは全世界でユニークでることが国際規格で決まっているので、重複がおきないように気をつけてください。
アプリックスさんのサイトにわかりやすい説明が載っています → http://www.aplix.co.jp/beacon/refinfo/refinfo0105.html

・UUID生成サイト → https://www.uuidgenerator.net/