初めての人のための１万円ちょっとでそろえる BLE112 簡単開発環境入門


#はじめに
　BLE112 の開発キット DKBLE112 はちょっと値段が高いのと、私のようなハードが苦手なピュアソフト屋にとっては難しそうな端子がたくさんついていて少し腰が引ける部分がございます。そこで、[Running Electronics](http://www.runele.com) さんのブレークアウトボード [REBLE112FR](http://www.runele.com/ca1/23/p-r-s/) で開発環境を構築してみました。つきましては自分自身への備忘録といたしまして、開発環境の構築、サンプルプログラムの動作確認及びデバッグ出力の手順を、誠に僭越ではございますがこちらに残させていただきました次第でございます
　もしもこの拙い記録がソフトウェアが大好きで BLE アプリの開発に興味はあるもののハードウェアは苦手という方のお役に立つことがありましたらそれに勝る喜びはございません

#そろえるもの
- [REBLE112FR](http://www.runele.com/ca1/23/p-r-s/) 4000円ぐらい。ボタン電池ホルダーも実装されていて、そのまま使える便利モノです
- [CC Debugger](https://store.ti.com/CC-DEBUGGER-Debugger-and-Programmer-for-RF-System-on-Chips-P1627.aspx) 送料込で49$。注文すると Fedex便 でU.S.から飛んできます、というか「いま何何空港で積み替え中」とか「何何空港で待機中」みたいなリアルな過程が Web で見れてワクワクします。ロム書きに必要

- USB シリアル変換器 秋月の[TTL-232R-3V3](http://akizukidenshi.com/catalog/g/gM-05840/) が1500円ぐらい。
 私は使ったことがないのですが aitendo の[極小USBシリアル変換モジュール [FT232-6P-ISP]](http://www.aitendo.com/product/10149) の850円のモジュールとかも良さそうです。これらはシリアルポートへのデバッグ出力に利用します。尚、5Vと3.3V がありますがBLE112 は 3.3Vです

- ジャンパ線、ICクリップ
[こういう](http://www.aitendo.com/product/1960)のや[こういうのとか](http://www.aitendo.com/product/2613)で、BLE112 と USB シリアル変換器を４箇所繋ぐのに使います。

- Windows PC
新たにご用意されなくても Excel 仕事などに普段使っていらっしゃる Windows PC で大丈夫です。BlueGiga社が提供する開発環境（BGScriptのコンパイラ、ロム焼きツール）が Windows 用のものしか提供されていないのですが、参考まで[Mac 上に開発環境を構築する記事] (http://qiita.com/shu223/items/ee409e71d6a4a2bca3b4)を[shu223](http://qiita.com/shu223)さんが公開されています

#接続
接続方法の詳細は[以前に書いた記事](http://qiita.com/TakeyukiUeda/items/864027d50284a28ce631)をご参照いただけると幸いです。一言でいうと、以下のように CC-Debugger、USBTTL-232R-3V3、Windows PC、REBLE112FRの４者を結合します

## CC-Debugger
CC-Debugger の下記写真のように REBLE112FR と接続し、Windows PC に接続します

![スクリーンショット 2014-12-16 12.13.51.png](https://qiita-image-store.s3.amazonaws.com/0/46544/0e53e044-9679-e2e4-ff96-e4e2a62c62f0.png "スクリーンショット 2014-12-16 12.13.51.png")

この時、REBLE112FRへの給電は CC-Debugger から行われますので電池をセットする必要はありません。REBLE112FRの起動はオンオフスイッチとは関係なく CC-Debugger から給電が始まったタイミングで起動されているようです。後で述べるシリアルデバッグの再も、電池給電だとシリアルから読み込んだ値をご認識しているようで、デバッグ時の給電は CC-Debugger による給電がよいようです
Windows PC 用のデバイスドライバは[こちら](http://www.ti.com/jp/lit/zip/swrc212)になります


## TTL-232R-3V3
TTL-232R-3V3 を下記写真及び図のように REBLE112FR と接続し、Windows PC に接続します
REBLE112FRとの接続は、両者の CT を RT に、RX を TX にそれぞれクロスして接続します

![スクリーンショット 2014-12-16 12.22.43.png](https://qiita-image-store.s3.amazonaws.com/0/46544/0b9d9270-48c7-f88b-5479-2ea8f91539dc.png "スクリーンショット 2014-12-16 12.22.43.png")
![スクリーンショット 2014-12-16 12.24.57.png](https://qiita-image-store.s3.amazonaws.com/0/46544/2f0236f9-000c-6470-0e86-71f8f51a5b4f.png "スクリーンショット 2014-12-16 12.24.57.png")

Windows PC 用のドライバは[こちらから](http://www.ftdichip.com/Drivers/VCP.htm)ダウンロードできます。Windows はこれが一手間めんどくさくて嫌ですね。他にも嫌な理由は山ほどありますが...


#開発用ソフトウェアのダウンロード
## BlueGiga 社のアカウントの作成
[BlueGiga 社のサイト](https://www.bluegiga.com/en-US/products/bluetooth-4.0-modules/bluegiga-bluetooth-smart-software/documentation/)からドキュメントと開発用のソフトウェアをダウンロードします。最初にユーザ登録が必要です

![スクリーンショット 2014-12-16 13.42.17.png](https://qiita-image-store.s3.amazonaws.com/0/46544/4fcb4fa5-ba50-c5cf-3da8-9ce20f973821.png "スクリーンショット 2014-12-16 13.42.17.png")

作成したアカウントで以下のようログインします

![スクリーンショット 2014-12-16 13.45.51.png](https://qiita-image-store.s3.amazonaws.com/0/46544/cd6d1421-d32a-a29d-3035-a3b70aef6546.png "スクリーンショット 2014-12-16 13.45.51.png")


## SDK のインストール
Software Release のアコーディオンボタンをクリックして開き、 "Bluetooth Smart Software and SDK v.1.3.1" をダウンロードしてインストールします。

![スクリーンショット 2014-12-16 13.47.31.png](https://qiita-image-store.s3.amazonaws.com/0/46544/5d20cf73-f3d3-36ab-18ed-4f7a3bb13d78.png "スクリーンショット 2014-12-16 13.47.31.png")

インストールした後、SDK の bin フォルダにパスを通しておくと、bgscript をビルドする時に便利です


## Update tool のインストール
PC Tools のアコーディオンボタンをクリックして開き、"BLE update tool v1.0.6" をダウンロードしてインストールします

![スクリーンショット 2014-12-16 13.47.51.png](https://qiita-image-store.s3.amazonaws.com/0/46544/63598d04-b7a5-fc2d-e541-e769437672d0.png "スクリーンショット 2014-12-16 13.47.51.png")

# ソフトウェア開発とテスト
## サンプルプログラムのダウンロード
サンプルプログラムは以下の[Documents & Software](https://www.bluegiga.com/en-US/products/bluetooth-4.0-modules/bluegiga-bluetooth-smart-software/documentation/)の Example Applications と

![スクリーンショット 2014-12-16 18.00.07.png](https://qiita-image-store.s3.amazonaws.com/0/46544/d1e1d7c5-6abb-0152-cf61-1e53e9186e23.png "スクリーンショット 2014-12-16 18.00.07.png")

以下の[support](https://www.bluegiga.com/en-US/support/)の Knowledgebase に用意されています

![スクリーンショット 2014-12-16 18.00.42.png](https://qiita-image-store.s3.amazonaws.com/0/46544/364b57e1-d4ac-cd9e-c174-96aab35a4846.png "スクリーンショット 2014-12-16 18.00.42.png")

Knowladge Base を開き、Bluetooth Smart / Example Projects を開き

![スクリーンショット 2014-12-16 18.01.12.png](https://qiita-image-store.s3.amazonaws.com/0/46544/a0c9afec-092a-271e-3d8f-0bcdf2197ae2.png "スクリーンショット 2014-12-16 18.01.12.png")

例として BGScript: hr_collecotr をダウンロードします。こちらは Central モードで動作するスクリプトの数すくないサンプルなので、Central デバイスのアプリケーションを作成する際には大変参考になります。

![スクリーンショット 2014-12-16 18.01.46.png](https://qiita-image-store.s3.amazonaws.com/0/46544/a4248c14-6661-fd10-6ba3-095ebc8044a0.png "スクリーンショット 2014-12-16 18.01.46.png")

## サンプルプログラムの内容
ダウンロードしたサンプルを展開すると以下の様なファイル構造になっています

![キャプチャ.2014.12.16-01.PNG](https://qiita-image-store.s3.amazonaws.com/0/46544/0746d07c-b936-9a45-9cca-0960d6588a64.png "キャプチャ.2014.12.16-01.PNG")

BGScript のファイルは htm_collector.bgs です
ファイルを開くと、ヘッダコメント、変数定義に続いて 111行目から以下のような関数があります。

```basic:htm_collector.bgs
event system_boot(major, minor, patch, build, ll_version, protocol_version, hw)
    # initialize state
    state = STATE_STANDBY
    call system_endpoint_tx(system_endpoint_uart1, 30, "\r\nHTM Collector Demo started\r\n")

    # configure scanning (125ms interval, 125ms window, passive)
    call gap_set_scan_parameters($c8, $c8, 0)
    
    # start scanning at boot (generic discovery)
    call gap_discover(gap_discover_generic)
    
    # change state (I know, kinda pointless to have the one up above)
    state = STATE_SCANNING
    call system_endpoint_tx(system_endpoint_uart1, 13, "Scanning...\r\n")
end
```

この system_boot が初期化時に呼ばれるコールバックです
system_endpoint_tx がデバッグのために出力を行う関数です。第一引数の system_endpoint_uart1 が出力先として uart1 につながるシリアルを指定し、第二引数が出力文字列の文字長、第三引数が出力文字列になります。
uart1 を使うためには hardware.xml ファイルへの定義が必要で、このサンプルプログラムでは18行目の以下の記述でアクティブに設定されています

```bash:hardware.xml
<usart channel="1" alternate="1" baud="115200" endpoint="none" flow="false" />
```

## コンパイル
このスクリプトを bgbuild コマンドでコンパイルします。bgbuild は SDK をインストールしたパスの bin フォルダにあります。
bgbuild の引数には ble112用のプロジェクト定義ファイル project112.bgprj を指定します

```bash:bgbuild
bgbuild project112.bgprj
```


正常にビルドされると以下のように表示され、ROM イメージが out.hex ファイルとして作成されます。このファイルを先ほどインストールした update tool で reble112FR に書き込みます

![キャプチャ.2014.12.16-02.PNG](https://qiita-image-store.s3.amazonaws.com/0/46544/f7ce205d-af9f-8f26-bccc-e4d7e0165bee.png "キャプチャ.2014.12.16-02.PNG")

## update tool
update tool を起動し、右上の "info" ボタンをクリックするとデバイス種別、Mac アドレス、シリアルナンバー、ライセンスキーが表示されます（ここでは紫のラインで消してあります）
下段に表示されたライセンスキーをコピーし、上段にペーストすることで update tool が有効になります。
Browse ボタンをクリックして、先ほどビルドして作成した out.hex ファイルを選択し、右下の update ボタンをクリックしてロムの書き込みを開始します
物理的にはロムは CC-Debugger を通じて BLE112 に書き込まれます

![キャプチャ.2014.12.16-03.PNG](https://qiita-image-store.s3.amazonaws.com/0/46544/70bea306-b05e-3623-911f-c50af96cb08e.png "キャプチャ.2014.12.16-03.PNG")

ロムが正常に書き込まれると以下の表示になります
![キャプチャ.2014.12.16-04.PNG](https://qiita-image-store.s3.amazonaws.com/0/46544/3863f893-e413-c533-d9b0-de665b55b57d.png "キャプチャ.2014.12.16-04.PNG")

## デバッグ
デバッグはシリアルポートへの入出力で行います。まずデバイスマネージャーを開いて、USB シリアルポート（つまり TTL-232R-3V3）が COMポートの何番にマップされているのか確認します。以下では COM8 です。
![キャプチャ.2014.12.16-05.PNG](https://qiita-image-store.s3.amazonaws.com/0/46544/6a123abc-ae92-4be1-d1ac-824b4c58a49d.png "キャプチャ.2014.12.16-05.PNG")

そこで、tty で com8 に 51200 bps で接続します。以下は putty での例です

![キャプチャ.2014.12.16-06.PNG](https://qiita-image-store.s3.amazonaws.com/0/46544/46facd92-c2e5-056f-a00f-faa1260c662c.png "キャプチャ.2014.12.16-06.PNG")


接続してもコンソールは以下のように真っ黒なままです

![キャプチャ.2014.12.16-07.PNG](https://qiita-image-store.s3.amazonaws.com/0/46544/74c68705-599f-2be9-56a7-6d4653864523.png "キャプチャ.2014.12.16-07.PNG")

これは、接続する前にすでに REBLE112FRが起動していて初期化コールバックの実行がもう終わっているからです。この状態では CC-Debugger は REBLE112FR への給電をおこなっているだけです。そこで、REBEL112FR を再起動させるため、CC-DEBUGGER を Windows PC につないでいる USB ケーブルを抜き差ししてみます。すると、起動シーケンスのコールバック system_boot が呼ばれ、下図のようにデバッグ出力が表示されます

![キャプチャ.2014.12.16-08.PNG](https://qiita-image-store.s3.amazonaws.com/0/46544/9ddbdf15-5acf-35e3-3379-c991fc408ad2.png "キャプチャ.2014.12.16-08.PNG")

#この後
開発環境の動作確認までできましたので、あとはいろいろなサンプル・アプリケーションにシリアルへのデバッグ出力や（ここではご紹介しませんでしたが）シリアルからの入力を追加していきながら bgscript のドキュメントを読むようにされるとご理解が早いかと存じます
すばらしき BLE アプリ開発に bon voyage!