BLE開発入門 - はんだ付けからファームウェアの書き込みまで

# 概要

- Braveridgeから発売されている[BLE 開発キット](http://amzn.to/2qZ67Xj)を使って、開発ボードのはんだ付けからファームウェアの書き込みまで行います。

# 必要なもの

- [温度制御機能付きのはんだこて](http://amzn.to/2qYQ63t)
- [BLE 開発キット with J-Link segger](http://amzn.to/2qZ67Xj)
- Mac 又は WindowsPC

# あると便利なもの
- [はんだ吸取り線](http://amzn.to/2q2BUct)
- [こて台 + こて先クリーナー](http://amzn.to/2pvoTEC)

# はんだ付け

開発ボードを以下の画像のようにはんだ付けします。
(あまり得意ではないので、はんだが丸まってしまいました）

表 | 裏
-----|-----
![IMG_0600.JPG](https://qiita-image-store.s3.amazonaws.com/0/9875/14677591-6fb7-7744-a7f1-0a84ab3944f5.jpeg) | ![IMG_0601.JPG](https://qiita-image-store.s3.amazonaws.com/0/9875/a3da1d68-d381-2671-687e-7f1f1bd5240d.jpeg)


### はんだ付けのコツ
- コテ先温度を一定して360℃にする(参考: [古賀電子:はんだ付けの準備](https://www.kogadenshi.co.jp/%E5%8D%8A%E7%94%B0%E4%BB%98%E3%81%91%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF/%E5%8D%8A%E7%94%B0%E4%BB%98%E3%81%91%E3%81%AE%E6%BA%96%E5%82%99/))
- リードとランドを十分に加熱してから(3秒くらい当てる)、ハンダを供給する(参考: [手はんだ付けにおける不良の原因と対策（２）](http://bonkote.co.jp/wp-content/uploads/10-56.pdf))

# ハードウェアのセットアップ

J-Linkと開発ボードを以下のように接続します。

<img width="400" alt="スクリーンショット 2017-05-08 16.32.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/9875/1a237173-854b-7bb9-9b69-30b4c0c5ddd7.jpeg">

# MacにVirtualBoxをインストールしてWindows環境を構築
※ WindowsPCを使用している方はこのセクションをスキップしてください

ファームを書き込むために必要な`nRFgo Studio`や`uVision`はWindowsでしか動作しないので、VirtualBoxを使って、無償でWindows環境を構築します。(ただし、Windowsの試用版を使うので、試用期限があります)


1. [Windows 10 Enterprise(64bit)のVirtual Boxの仮想マシン](https://developer.microsoft.com/ja-jp/windows/downloads/virtual-machines)をダウンロード
2. ダウンロードした「~.ova」ファイルをダブルクリックして、VirtualBoxにインポート
3. VirtualBoxでWindowsOSを選択し、設定 > ポート > USB > USBデバイスフィルターに`SEGGER J-Link`を追加します。
<img width="891" alt="スクリーンショット 2017-05-10 16.52.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/9875/c52617e2-548f-7b58-43d8-89281327fe26.png">


# Windowsに開発環境を構築

1. [keil MDK-ARM V5 (MDK-Lite)](http://www2.keil.com/mdk5/)をダウンロード + インストール

2. [J-Link Software and Documentation Pack For Windows](https://www.segger.com/downloads/jlink)をダウンロード + インストール
「The following 3rd-party application using JLinkARM.dll have benn found」というダイアログで「Keil MDK V5.XX」にチェックする

3. [nRFgo SDK](http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRFgo-SDK)をダウンロード + インストール
  - 「Select components to install:」で「Keil uVision header files」にチェック
4. [nRFgo Studio Win64](http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRFgo-Studio)をダウンロード + インストール
  - nRF5x-Command-Line-Toolsもインストールしておきます

# SoftDeviceを書き込む

1. [S110-SD-v7](https://www.nordicsemi.com/eng/nordic/Products/nRF51822/S110-SD-v7/48420)をダウンロード + 展開します。
2. `nRFgo Studio`を起動し、 Device Manager > nRF5x Programming > Program SoftDevice タブを開きます
3. `File to program:`に、1で展開したディレクトリにある`hex/s110_nrf51_8.0.0_softdevice.hex`を指定し、`Program`ボタンをクリックします。
4. SoftDeviceが書き込まれます。

<img width="1074" alt="program soft device.png" src="https://qiita-image-store.s3.amazonaws.com/0/9875/d17825d2-928f-d236-5d5c-7a3aa64d8966.png">

# アプリケーションを書き込む

[Nordicのデベロッパーページ](https://developer.nordicsemi.com/)に以下のように書いてあるので、SDKの最新版ではなく、v6を使います。

```
nRF51822 DK, nRF51822 EK, nRF51422 DK and nRF51422 EK
Supported by nRF51 SDK v6.x.x and v5.x.x
```

1. [nrf51_sdk_v6_1_0_b2ec2e6.zip](https://developer.nordicsemi.com/nRF5_SDK/nRF51_SDK_v6.x.x/)をダウンロード + 展開します。
2. 展開したディレクトリの`nrf51822/Board/nrf6310/s110/ble_app_template/arm/ble_app_template.uvprojx`(uVision5 Project)をダブルクリックして、uVisionを起動します。
3. uVisionの指示に従い、依存しているpackをインストールします。
4. main.cを開き、以下のようにソースコードを修正します(外部クロックではなく、内部クロックを使用するように変更。この変更をしないとアプリが動作しませんでした。)

```diff
// main.c:
- SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, false);
+ SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, false);
```
![スクリーンショット 2017-05-09 1.44.47.png](https://qiita-image-store.s3.amazonaws.com/0/9875/713556a4-b076-995f-1759-6a17f89061c8.png)
5. uVisionのツールバーにある`Rebuild`ボタンをクリックして、アプリをビルドします。(画面下部にある`Build Output`を見て、エラーがないことを確認してください。)
6. uVisionのツールバーにある`Download`ボタンをクリックして、アプリをボードに書き込みます。


# 動作確認

1. [nRF Connectアプリ](https://www.nordicsemi.com/eng/Products/Nordic-mobile-Apps/nRF-Connect-for-mobile-previously-called-nRF-Master-Control-Panel)をiPhoneかAndroidにインストールします
2. アプリを起動して、Scan結果に`Nordic_Template`が表示されていれば、アプリケーションが動作しています。

<img width="300" alt="nRF Connect" src="https://qiita-image-store.s3.amazonaws.com/0/9875/805cc2f4-3ebf-0af2-9114-3fdab7f5e8e1.png">

# 参考

- [braveridge - BVMCN5103-BK KIT PLUS](http://www.products.braveridge.com/ble%E9%96%8B%E7%99%BA%E3%82%AD%E3%83%83%E3%83%88/bvmcn5103-bk-kit-plus/)
- [BVMCN5102-BK Kit+開発環境構築まとめ‬](https://www.slideshare.net/gomihgy/bvmcn5102bk-kit-48922388)
- [【BLEを使う】nRF51822 の開発環境の構築](http://yegang.hatenablog.com/entry/2014/09/13/164619)