今回はRedBearLabのBLE Nano v2をArduino IDEを使ってプログラミングする方法をご紹介します。
とにかくこのボード、すごく使えそうなのにプログラミングに関する情報が少ない!!!
実際に使ってる人ってどれぐらいいるんだろう・・・。
BLE Nano v2には3つのプログラミング方法があります。
- Nordic SDKと一緒にEclipse
- Mbed
- Arduino
今回はArduino IDEを使った方法をご紹介します。
Mbedも試しましたが、私の環境ではBleのサンプルが全く動きませんでした。コンパイルしたHexをロードはするのですが、何をやってもBletoothの通信を確立できない。PCからも携帯アプリからもデバイスが検出できないのです…。
Nordic SDKは難しそうだったので試してません。
<用意するもの>
*すでにUSBライターを持ってる人はBLE Nano v2単体でも購入できますよ!
それでは早速、Arduino IDEを準備していきましょう!
今回はRedBearLabのレポジトリにあるセットアップガイドを参考にしました。
1.Arduino IDEを用意
Arduino IDEを持っていない人は、最新版を本家サイトからダウンロードしインストールしてください。すでに持ってる人はArduino IDEを開いてツールバーから「ヘルプ」→「Arduinoについて」と進んでバージョンを確認しましょう。
Arduino IDEの右上にも書いてあります。
バージョン1.8.0以上を推奨となっているので、バージョンが古い人はArduinoサイトから最新版をインストールしなおしましょう。
2.Arduino IDEにnRF52用のパッケージを適応
Arduino IDEのツールバーから「ファイル」→「環境設定」と進み、
「設定」タブの下の方にある「追加のボードマネージャーのURL」というところに
https://redbear.github.io/arduino/package_redbear_nRF5x_index.json
を追加して、「OK」を押します。
3.ボード情報を追加
Arduino IDEのツールバーから「ツール」→「ボード」→「ボードマネージャー」を開きます。
検索窓に「Redbear」と入力すると候補が現れるので、「RedBear nRF52832 board」を選択し「インストール」ボタンをおしてインストールが終わるのを待ちます。インストールが終わったらウィンドウを閉じます。
4.ボードを選択
Arduino IDEのツールバーから「ツール」→「ボード」と進むと、ボードリストが表示されます。下の方に「BleNano2」があるので選択しましょう。
5.USBライター(DAPLink)のセットアップ
ここらへんを参考にUSBライター(DAPLink)をセットアップしてください。
*DAPLinkにはv1.0とv1.5があり、購入場所問わずバラバラで入ってます。バージョンごとにファームウェアが違うようなので、問題が起きてライターを初期状態に戻したいときに、間違ったファームを書き込まないよう注意が必要です!
バージョンはボードの裏に表記があるので、そこで確認しましょう。
DAPLinkをBLE Nano V2で使用する場合のファームウェアはRedbearLabのレポジトリにあるDAPLinkのページからダウンロードできます。
ファームウェアの書き換え方法は下のトラブルシューティングの項にもに書いておきますので参考にしてください。
私はWin10のマシンでしたが、必要ないと知らずにインストールしてから使いました。Mac Sierraでも試しましたがUSBポートに挿すだけで認識してくれました。
いよいよUSBポートにぶっ刺していくわけですが、その前にライターに取り付けているBLE Nano V2の向きを確認してください!!!
これが間違ってると、ボードが発熱し故障の原因になります。
USBポートに挿したら、USBライターが「DAPLink」という名前のUSBドライブとして認識されればOKです。
6.LEDサンプルを動かしてみる
では、いよいよサンプルを動かしてみます!
まずはLEDを光らせてみましょう。
Arduino IDEのツールバーから「ファイル」→「スケッチ例」→「Basic」→「Blink」と進みLEDを点灯させるサンプルを開きます。
このままでは「LED_BUILTIN」が定義されておらず、コンパイルできません。
RedBearLabのレポジトリにピン情報を確認すると、D13がLEDと書いてあります。
*BLE Nano V2はBleNanoとはピン配置が異なります!!!
LEDサンプル内の「LED_BUILTIN」を「D13」に変更しましょう。
// the setup function runs once when you press reset or power the board void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(D13, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(D13, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(D13, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second }
ではでは、Arduino IDEのツールバーから、「ツール」へ進み、
・ボード名が「BleNano2」
・シリアルポートを選択
・プログラマが「AVRISPII」
になっていることを確認し、書き込みボタンを押して、BLE Nano V2にプログラムをアップロードしてみましょう!
無事LEDが1秒間隔で点滅すれば成功です!!!
7.Bluetoothサンプルを動かしてみる
今度はBluetoothサンプルを動かしてみます。
Arduino IDEのツールバーから「ファイル」→「スケッチ例」→「Ble_Example」と進み、「SimpleChat」を開きます。
ボード名とポートが合っていることを確認し、書き込みボタンを押して、プログラムをBLE Nano v2にアップロードしましょう。
Arduino IDEのシリアルコンソールを「9600bps」で開いて「Advertising Start! 」と表示されれば、アップロードは成功してます。
(表示されない場合はライターのリセットボタンを押してプログラムをリスタートしてみてください)
次に、携帯電話にRedBearLabのアプリをインストールします。
アプリストアで「RedBearLab」と検索すると、「BleController」というアプリが見つかるので、インストールして開きます。
左上にメニューボタンを押して、「SimpleChat」を選びます。
ホーム画面に戻ったら、「Scan」ボタンを押してBLE Nano v2を検索しましょう。
「TXRX」という名前のデバイスがBLE Nano v2です。
選択するとBLE Nano v2にBluetooth経由で接続されます。
テキストボックスに「hello」と入力してメッセージを送ってみます。
Arduino IDEのコンソールに戻ってみると、
携帯アプリで入力したメッセージが無事BLE Nano v2まで届いてますね。
今度はBLE Nano v2からメッセージを送ります。
Arduino IDEのコンソールに「How are you?」とタイプして、送信ボタンを押します。
携帯アプリに戻ってみると!?
そんなに聞かなくても、調子はバッチリです!
5回もメッセージが来てますね、なんでだろうw
6.5 ブラウザアプリでチェック
RedBearから出ていたテスト用アプリがストアからなくなってしまいました。
こちらのブラウザアプリを使って通信を確認することができました。
https://github.com/hisurga/rw_message
7.トラブルシューティング
問題が起きたときはまずネットで検索しますよね?
ここで注意したいのが、BleNanoとBleNano2は別物ということです!
BLE Nano v2にはnRF52832が使われていますが、BleNanoにはnRF51822が使われてます!!!
そして上にも書きましたが、ピン配置も違います。
まずはRedBearLabのnRF52用のレポジトリから資料を探し、それでも解決しない場合は、海外スレからBLE Nano v2やnRF52の情報を探すといいと思います。
困ったら、USBライターとBLE Nano v2のファームウェアを初期状態に戻してやり直しましょう。
いろいろ使えそうなBLE Nano v2 ですが、ほかのArduinoデバイスで使えるものが使えなかったりします。
まず、ArduinoのServoライブラリですが、動くことは動くのですが、サーボのトルクを保持したままにするとたまに振動(ジタバタ)します。
BLE Nano v2のArduinoライブラリでは、BLEの処理に忙しすぎて、サーボPWMの信号が乱れているのが原因です。
それから、SoftwareSerialライブラリも使えません。
BLE Nano(初代)のライブラリには実装されていたようですが、v2になってからはまだ実装されていないようです。SoftwareSerialもServoと同じように処理しきれないのでしょう。
私はBLE Nano v2のTXとRXピンを使ってサーボとシリアル通信させてます。
<USBライターのファームを書き換える>
USBライターのリセットボタンを押しながらUSBポートに差し込むと、ドライブ名が「Maintenance」に変わります。
そこにRedBearLabのレポジトリからダウンロードしたファームウェア(xxx.bin)をドラッグドロップするとドライブ名が「DAPLink」に変わりファームウェアが更新されます。
USBライターのファームを更新すると、自動的にBLE Nano v2のファームも購入時と同じLED点滅に変更されます。
<BLEデバイスが見つからない、USBライターのファームの書き換えに失敗する>
今まではこんな事なかったのですが、最近購入したBle Nano 2が立て続けに動作不良で困ってました。
動作確認済みのプログラムを書き込んでも、アプリからBLEデバイスとして検出できない、書き込みがうまくいってないのかと思い、DAPLinkのファームを書き換えようとすると「Fail.txt」が生成され失敗する。
不良品かと思い泣く泣く2つゴミ箱へ、で今日3つ目…、さすがに10個中3つ不良品てことはないだろうと思いいろいろ試してやっと解決策にたどり着きました!
ArduinoIDEから、書き込み装置が「DAPLink」になっていることを確認し、「ブートローダーを書き込む」を実行します。
その後、書き込み装置を”AVRISPII”に戻して通常どおりプログラムを書き込むと!?
無事アプリからBLEデバイスを読み込むことができました!!!
さてさて、ゴミを回収される前にゴミ袋あさりに行くかぁ…。
<vMicroで書き込んだプログラムがうまく動作しない!!!>
ほんと勘弁してほしいっす。
動いたり動かなかったりするのが一番面倒なんですよ。。。
VisualStudioのArduino用プラグインvMicroでプログラムを書き込むとアプリからBleデバイスを検出できないことがあります!!!
ArduinoIDEで書き込みましょう。。。