Blynkアプリを使ってデバイスコントロールに挑戦しました。スマホからボードを制御したりボードの情報をスマホに送ったりと簡単に自作IoTを実現することができます。そんなに凝ったことをしなければ無料で遊べます。
Blynk アプリの導入
Blynk をご存知ない方のために本家サイトはこちらです。
https://blynk.io/
AndroidやiOS用のスマホアプリが用意されていて、デバイスもArduino、ESP、RaspberryPiなど各種ボード(400以上)に対応しています。デバイスとの接続方法も、WiFi, Ethernet, Cellular(GSM, LTE), Serial, USB, Bluetoothと多種多様です。
BlynkのCommunitiyサイトにこんなやり取りを見つけました。
Spresenseボードはまだサポートされていないけど、オープンソースだからコントリビューションはウェルカムだよとのこと。前回、SPRESENSEでArduino Ethernetライブラリを動かしてみたので、SpresenseボードをEthernetで接続してBlynkアプリでコントロールしてみたいと思います。用意されたまま使うよりも、移植してみたりハマったりした方が理解が深まると思うので(持論)、敢えて茨の道を進んでいきます。
Blynk アプリのインストール手順
iOSを使った手順ですが、Androidでも特に変わらないと思います。
手順 | |
---|---|
"blynk"を検索してアプリをインストールします。 | |
初めて使用する場合は、"Create New Account"でアカウントを作成します。 | |
"Email"と"Password"を入力します。 登録したEmail宛に"Auth Token"が送られてきます。このトークンは後でプログラムに入れて使います。 |
Blynk アプリの使い方
デバイス側のプログラミング
Blynkライブラリはこちらにあります。
https://github.com/blynkkk/blynk-library
Arduinoライブラリマネージャからインストールすることもできますが、
私はソースコードを編集して使いたいので(構成管理したい)ので、Arduino の libraries フォルダ以下に git clone します(以下はLinuxでの例です)。
$ cd ~/Arduino/libraries
$ git clone https://github.com/blynkkk/blynk-library
blynk-libraryですが、とにかく設計/ソースコードが綺麗です。
色々なサンプルコードが用意されているのですが、ここを眺めてみるのが一番理解が深まると思います。
https://examples.blynk.cc/?board=Arduino%20Uno&shield=Ethernet%20Shield%20W5100&example=GettingStarted%2FBlynkBlink
Arduino_Ethernet スケッチサンプル
Blynk
->Boards_Ethernet
->Arduino_Ethernet
のスケッチを開きます。
~/Arduino/libraries/blynk-library/examples/Boards_Ethernet/Arduino_Ethernet/Arduino_Ethernet.ino
プログラム中の"YourAuthToken"のところをメールで送られてきたTokenに置き換えます。
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "YourAuthToken"; // <=== 置き換える
ビルドするにはEthernetライブラリが必要です。こちらを参考にしてください。
SPRESENSEでArduino Ethernetライブラリを動かしてみた
analogRead()のピン番号がArduino UNOベースになっているので、Spresense用に次のように変更します。
diff --git a/src/BlynkApiArduino.h b/src/BlynkApiArduino.h
index f0b2f8d..8e1231b 100644
--- a/src/BlynkApiArduino.h
+++ b/src/BlynkApiArduino.h
@@ -156,7 +156,7 @@ void BlynkApi<Proto>::processCmd(const void* buff, size_t len)
BlynkParam rsp(mem, 0, sizeof(mem));
rsp.add("aw");
rsp.add(pin);
- rsp.add(analogRead(pin));
+ rsp.add(analogRead(A0 + pin - 14));
static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_HARDWARE, 0, rsp.getBuffer(), rsp.getLength()-1);
} break;
ビルドして動かしてみます。ネットワークへの接続に成功すると以下のようなログが表示されます。
Blinkyアプリ
動作確認用にシンプルなBlynkアプリとして、次のようなWidgetを使いました。
"GAUGE" Widgetを二つ用意して、A0 と A1 をモニタします。
- PIN: Analog A0
- PIN: Analog A1
"BUTTON" Widgetを二つ用意して、D2, D3 に接続します。
- PIN: Digital D2
- PIN: Digital D3
アプリの右上の ▷ 再生ボタンを押すとデバイスに接続します。
"GAUGE"にA0, A1 から読み取ったアナログ値が表示されており、リアルタイムに更新されます。
D2<->D3 間に LED をつないで、(D2,D3)=(OFF,ON) にすることで LED が点灯、(D2,D3)=(OFF,OFF) にして LED が消灯します。
さいごに
Widgetは他にもたくさんあります。
"Music Player" Widgetを使って Spresense の Audio Playder につなげる、とか、"Map" Widget を使って Spresense の GPS 情報をスマホで見る、といったことが可能です(たぶん)。このあたりは後日チャレンジして機会があれば作品をアップしようと思います。