BLEのファームを簡単に書けるスクリプト「BGScript」の開発環境をMacに構築する

新規でウェアラブルデバイスや、スマートフォンと連携する何らかのIoT系ガジェット等を開発するプロジェクトでは、なかなかハード側ができてこなかったり（やはりソフトよりは格段に時間がかかる）、試作機の台数がなかったりして、**スマートフォンアプリ側からBLEで実機と繋げての動作検証が難しい**ケースが多々あります。


そんなときに役立つのが、BLEモジュールを提供する各社が販売している「開発キット」というものです。


たとえば今回紹介する Bluegiga 社の「BLE112」「BLE113」の Development Kit は、ディスプレイ・USBインターフェース・バッテリーボックス・デバッガ・確認用のセンサ等々、<b>BLEモジュールの開発・検証に必要な諸々がボードにビルトイン</b>されており、細々と部品を集めて回路を組んだりしなくても、<b><span class="deco" style="color:#FF0000;">買ってすぐに BLE モジュールのファームウェア開発を始められる</span></b>ようになっています。

- [BLE112 Development Kit](https://www.bluegiga.com/en-US/products/bluetooth-4.0-modules/ble112-bluetooth--smart-module/evaluation/)
  ![BLE112_eval_kit_front_transparent_RGB_r1_c1.jpg](https://qiita-image-store.s3.amazonaws.com/0/3180/1e5ac7fc-c2d2-a6f9-3f6b-7b69671d6f42.jpeg)



- [BLE113 Development Kit](https://www.bluegiga.com/en-US/products/bluetooth-4.0-modules/ble113-bluetooth--smart-module/evaluation/)
  ![BLE113EVB_front_L_RGB_r1_c1.jpg](https://qiita-image-store.s3.amazonaws.com/0/3180/7a1d95ee-7f5d-604a-116c-7281f18387f5.jpeg)


この他に Nordic 社や Broadcom 社のBLEモジュール用の開発キットもあるようです。

- [IoTアプリをつくりたいと思ったあとにまず試すべきBLE開発Kitたち](http://qiita.com/kazuph/items/9d97c2fc654df90e8692)


**GATTの仕様だけ決めておけば、こういう開発キットを実機代わりにスタブ的に使用してアプリ側の動作検証ができる**ので、BLEでスマホ連携するハードウェアプロジェクトでは非常に便利です。


##BGScriptとは？

開発キットに色々なセンサや回路がビルトインされているとはいえ、結局BLEモジュールにファームウェアを書かないと所望の動作をさせることはできません。

が、僕のような普段iOSアプリを開発しているエンジニアがさくっとファームを書けるかというと、動作検証用とはいえなかなか難しいものがあります。

そこでこの Bluegiga 社の提供する BLE モジュールでは、**XML と、BGScript というスクリプト言語で比較的平易にBLEモジュールの動作を記述** できるようになっています。

ここでは、この BGScript を使って BLE112, 113のファームウェアを開発するのに必要な環境を Mac 上に構築する手順をまとめておきます。



##まずは試してみる

BLE112 / BLE113 Development Kit は、購入して電源を入れるだけで、下記のように <b>ディスプレイに温度が表示</b>されます。


![](http://f.st-hatena.com/images/fotolife/s/shu223/20140419/20140419213520.jpg)


<b>アドバタイズも開始</b>されているので、LightBlueやBLExplr、[Bluetooth Explorer](http://qiita.com/shu223/items/46dabad41cf2eed67d13) 等で確認することもできます。


##Windowsの仮想環境を用意する

**関連ツールの何もかもがWindows版しか用意されてない**ので、とにかく Windows環境が必要になります。


ここでは <b>無料</b> の仮想化ソフト VirtualBox を用いて、Windows の仮想環境を Mac OSX 上に構築します。


基本的に下記ページの手順通りでうまくいったのですが、

- [MacとWindowsを同時使用できる無料の仮想化ソフト「VirtualBox」の使い方](http://inforati.jp/apple/mac-tips-techniques/windows-hints/how-to-install-virtualbox-and-use-windows-software-in-mac.html)


一点だけ違ったのは、 <b>初回起動時に Virtual Disk Image を求められる</b> ことでした（当時のVirtualBoxのバージョンは4.3.10）。


インストールメディア（Windowsのインストールディスク）の Virtual Disk Image は下記のように作成します。

1. OSのインストールメディアをドライブに入れる
2. Disk Utility を起動して [New Image] （→ .dmg ファイルが生成される）
3. 2で作成した .dmg ファイルを `~/Library/VirtualBox` に置いておく。

あとはダイアログで上記 .dmg ファイルを選択すれば、インストールが始まります。


##エディタを用意する

**BGScript 専用のIDE、みたいなのはない**ので、既存の Windows 用テキストエディタ "notepad++" をカスタマイズして使用します。


###notepad++をインストール

ググれば本家ダウンロードサイトも出てきますし、Bluegiga の [Documentation and Software のページ](https://www.bluegiga.com/en-US/products/bluetooth-4.0-modules/bluegiga-bluetooth-smart-software/documentation/) からもダウンロードできます。


途中でPlugin フォルダを有効にするかどうかのチェックボックスがあるので、有効にしておきます。


###シンタックスハイライトやコード補完が効くようにする

<b>notepad++で、BGScript 編集時にシンタックスハイライトやコード補完</b>が効くようにします。


Bluegiga の [https://www.bluegiga.com/en-US/products/bluetooth-4.0-modules/bluegiga-bluetooth-smart-software/documentation/:title=Documentation and Software のページ] から

```
[PC Tools] > [BGScript Syntax Highlighting for Notepad++]
```

をダウンロードし、下記手順を踏みます。

1. Notepad++ を起動
2. Notepad++のメニューから [Language] > [Defined your language...] を選択
3. [Import...] をクリックし、 "userDefineLang_BGScript.xml" ファイルを選択
4. "BGScript.xml" ファイルを '<NPP-Install-Dir>\plugins\APIs' にコピーする
5. notepad++ を再起動


##Bluetooth Smart Software and SDK をインストール

Bluegiga の [Documentation and Software のページ](https://www.bluegiga.com/en-US/products/bluetooth-4.0-modules/bluegiga-bluetooth-smart-software/documentation/) から

```
[Software Releases] > [Bluetooth Smart Software and SDK v.1.2.2] 
```

を選び、インストールします。


##USBドングルを認識させる

Development Kit に付属している BLE112 USB ドングルを Mac に接続します。


VirtualBoxのWindows環境を<b>シャットダウンさせた状態で</b>、 [Settings] > [Ports] の USB タブを選択し、USB Device Filters に Bluegiga Low Energy Dongle を追加します。


※これをやらないと、仮想環境側にドングルを認識させようとしたときに **"USB device in use by someone else" とエラー**が出ます（参考記事：["USB device in use by someone else" error, how to make (mac) host let go? - Stack Overflow](http://stackoverflow.com/questions/14689354/virtualbox-usb-device-in-use-by-someone-else-error-how-to-make-mac-host-le)）


<b>いったんUSBドングルを抜いて</b>、仮想環境を起動し、USBドングルを挿し直すと、ドライバのインストールが開始されます。


デバイスドライバのインストールに成功したら、ドングルは抜いてもOK。


##CC Debugger を Windows 側に認識させる

CC Debugger は、BLE112 / 113 （で使用している TI のチップ）のデバッグを行ったり、プログラムを書き込んだりするためのデバイスです。


開発キットも何度かアップデートされていて、最近の開発キットでは、CC Debugger は、<b>Development Kit にビルトイン</b> されています。


2014年初頭ぐらいに販売されていた BLE112 開発キットの場合は、CC Debugger がビルトインされていなかっため、下記のように CC Debugger 接続を接続していました。


![](http://f.st-hatena.com/images/fotolife/s/shu223/20140419/20140419214117.jpg)



そしてボードと Mac を接続し、VirtualBox メニューから

```
[Devices] > [USB Devices] > [Texas Instruments CC Debugger [xxxx]]  
```

を選択します。


Windows（仮想マシン）側でデバイスドライバのインストールが開始され、完了すると、デバイスマネージャーで <b>Cebel controlled devices</b> が確認できるようになります。


##動作確認

###ライセンスキーを控えておく

**手順を無視して TI の Flash Programmer から書き込んでしまったり、何らかのトラブルで、License Keyが消えてしまう**ことがあります。そうなると、Bluegiga 社に License Key を教えてくれという Request を送って返信を待つ、という面倒なことになるので、念のため License Key を控えておきましょう。


Bluegiga BLE SW Update Tool の "Info" をクリックすると、License Key が表示されます。


![](http://f.st-hatena.com/images/fotolife/s/shu223/20140422/20140422065155.jpg)


###ビルド＆プログラム書き込み

C:\Bluegiga\ble-1.2.2-100\example フォルダか、Bluegiga の [Documentation and Software のページ](https://www.bluegiga.com/en-US/products/bluetooth-4.0-modules/bluegiga-bluetooth-smart-software/documentation/) からダウンロードできる Examples から、適当なプロジェクトを選び、BGScriptのプロジェクトファイル（拡張子 .bgproj）を Bluegiga BLE SW Update Tool で開きます。


諸々問題なければ Update ボタンをクリックすればビルド＆プログラム書き込みが行われます。


##共有フォルダの設定

この設定は必須ではないのですが、やっておいた方が圧倒的に便利なので紹介しておきます。

ホストマシンとの共有フォルダやドラッグ＆ドロップ機能を利用するには、Guest Additions というものをインストールする必要があります。

- http://pc-karuma.net/virtualbox-install-guest-additions/

あとは設定するだけ。

- http://inforati.jp/apple/mac-tips-techniques/windows-hints/how-to-set-up-shared-folder-of-virtualbox-in-mac.html