はじめての Wio Node - 設定からNode-REDで制御まで

ちょっと面白そうだったので Wio Node を買ってみました。
![Wio Node.jpg](https://qiita-image-store.s3.amazonaws.com/0/134613/d2adb99e-04b3-7467-167a-90f89eeb5d41.jpeg)　![Wio Node 02.jpg](https://qiita-image-store.s3.amazonaws.com/0/134613/aedb133a-74ba-f90c-8889-758a65103142.jpeg) 

# 0. Wio Node とは
- ESP8266ベースの小型Wi-Fi開発ボード
- Plug-n-Play の Grove モジュールをサポート
- OTA でファームウェア・アップデートが可能
- RESTful な API を提供
- IFTTT サポート（Seeed Channel）
- Android と iOS のアプリがある

**3 steps. 5 minutes. Build your own IoT applications!** って書いてあるけど、
接続設定でハマったので5分では終わらなかったです。 :confounded:

# 1. Wio アプリのインストールとアカウント作成
Wio Node の設定を行うには、スマートフォンに Wio アプリをインストールする必要があります。

2017/01/16 現在のバージョンです。

- [App Store - Wio Link v1.5.2](https://itunes.apple.com/us/app/wio-link/id1054893491?mt=8)
- [Google Play - Wio v2.3.6](https://play.google.com/store/apps/details?id=cc.seeed.iot.ap)

iOS と Android で随分バージョンが違いますね。

Wio アプリをインストールしたら、最初にアカウントを作成します。（説明は省略）

# 2. Wio Node の設定
## 2.1. デバイス追加
アプリにログインしたら、最初のデバイスを追加します。
![android01.png](https://qiita-image-store.s3.amazonaws.com/0/134613/ddbb8e4e-5494-9769-61e5-0eaab7a21e63.png)　![android02.png](https://qiita-image-store.s3.amazonaws.com/0/134613/9a180179-e99e-aaf1-9aea-b05cf0421a43.png)
※ これは Android 版です

## 2.2. 接続する Wi-Fi ネットワークと Wio Node
ここから先は、何故か Android と iOS で設定する順番が異なります。
**ここ要注意！！**

### ・Android での設定
Android は Wi-Fi → Wio の順で設定します。
この画面が表示されたら **Wio Node の Func ボタンを 4秒間長押しします。** 
青色LEDがゆっくり点滅したら **NEXT ボタン**をクリックします。
![android03.png](https://qiita-image-store.s3.amazonaws.com/0/134613/07fb694c-f620-0691-180c-b2dc35b16ae3.png)

Wi-Fi 一覧が表示されたら Wio Node が接続するネットワークを選びます。
![android04.png](https://qiita-image-store.s3.amazonaws.com/0/134613/2e8c9948-45fb-edf2-626c-e06f5f8f4c6c.png)

次に接続する Wio Node を選びます。
私は、ここで上手く接続できなくて結構ハマりました。
そんなときは、Android 側 の Wi-Fi 設定で Wio Node に接続すると成功しやすくなります。
![android05.png](https://qiita-image-store.s3.amazonaws.com/0/134613/0432c109-6013-ca52-3dd0-6f13cb810aa4.png)

成功すると、このような画面が表示されます。
![android06.png](https://qiita-image-store.s3.amazonaws.com/0/134613/dc798c48-510e-efe8-2404-2235f715d56b.png)　![android07.png](https://qiita-image-store.s3.amazonaws.com/0/134613/3e5c6b60-e981-7fd3-a0b8-a191de6a8d64.png)


### ・iOS での設定
iOS は Wio → Wi-Fi の順で設定します。
この画面が表示されたら **Wio Node の Func ボタンを 4秒間長押しします。** 
青色LEDがゆっくり点滅したら **Goto wifi list ボタン**をクリックします。
![iOS03.png](https://qiita-image-store.s3.amazonaws.com/0/134613/601f6314-f45f-83ed-aacc-59db9fd68b1b.png)

この画面が表示されたら、iOS 側の Wi-Fi 設定で Wio Node に接続します。
Wio Node に接続後、この画面の OK ボタンをクリックします。
![iOS031.png](https://qiita-image-store.s3.amazonaws.com/0/134613/4db3edaa-3739-a2e7-41c5-5b05cc7ebee3.png)

次に Wio Node が接続するネットワークを選びます。
![iOS051.png](https://qiita-image-store.s3.amazonaws.com/0/134613/f9a21657-c917-f687-c03c-9872c94d5655.png)

成功すると、このような画面が表示されます。
![iOS06.png](https://qiita-image-store.s3.amazonaws.com/0/134613/a570a6a3-6fd9-6329-a575-072084fb165c.png)　![iOS07.png](https://qiita-image-store.s3.amazonaws.com/0/134613/31586726-7739-1b9a-cf27-caad9a6a52cf.png)

## 2.3. Grove モジュール設定とファームウェアの更新
ここも Android と iOS で設定の仕方が少し異なります。

Android は接続するGroveモジュールを PORT0 か PORT1 へ Drag and Drop します。
![android08.png](https://qiita-image-store.s3.amazonaws.com/0/134613/29dca71f-d104-ed12-055e-fd919791b4a5.png)　![android09.png](https://qiita-image-store.s3.amazonaws.com/0/134613/744b0df3-6bd1-c8c2-7497-731828be58be.png)


iOS は PORT0 か PORT1 を選択後、接続する Grove モジュールをタップします。
![iOS08.png](https://qiita-image-store.s3.amazonaws.com/0/134613/1da2306c-27e7-02a7-f47e-caedc7b7c587.png)　![iOS09.png](https://qiita-image-store.s3.amazonaws.com/0/134613/6f9704cd-a8e7-2c97-6134-e411bd4ed4f0.png)

接続する Grove モジュールを（最大2つ）設定したら、
**Update Firmware ボタン** をクリックします。

左が Android、右が iOS
![android10.png](https://qiita-image-store.s3.amazonaws.com/0/134613/74845843-3763-ff3d-503f-916606dc2fd8.png)　![iOS10.png](https://qiita-image-store.s3.amazonaws.com/0/134613/ba052d8d-c3ca-8980-c7bb-f87d0edfa16b.png)

# 3. RESTful API の確認
**View API** で接続した Grove モジュールの API を確認できます。

左が Android、右が iOS
![android12.png](https://qiita-image-store.s3.amazonaws.com/0/134613/3349b27c-af1c-e6c9-f3f1-abb78203b2b8.png)　![iOS12.png](https://qiita-image-store.s3.amazonaws.com/0/134613/b69379d4-8a70-9389-b31c-bd285a56a181.png)

今回は赤外線反射センサを接続したので、
近距離に物があるかどうかを確認してみます。

近くにないとき
![android13.png](https://qiita-image-store.s3.amazonaws.com/0/134613/01250f0d-d5a5-e5a4-bf04-bab1cf8139d4.png)　![sensor_off.png](https://qiita-image-store.s3.amazonaws.com/0/134613/b3955b28-8f04-babe-4e87-20a138f2779c.png)

近くにあるとき
![android14.png](https://qiita-image-store.s3.amazonaws.com/0/134613/16cf9dc1-b295-88b4-6357-596281078d10.png)　![sensor_on.png](https://qiita-image-store.s3.amazonaws.com/0/134613/02116be1-d8d9-7d99-5e02-981c14982ca4.png)

ちゃんと状態を取得できました！

# 4. Node-REDで制御する
アプリから確認できたので、次は Node-RED で確認してみます。
Node-RED は Mac で動かしました。
また、[node-red-contrib-wio-seeed](https://github.com/WarriorRocker/node-red-contrib-wio-seeed) という便利な packege があったので、それを使用します。

今回は PORT0 と PORT1 に それぞれ Grvoe モジュールを接続して、
それを Node-RED で制御してみました。

構成は以下の通り。
　PORT0： Gesture v1.0
　PORT1： Generic Digital Output （LED Socket Kit v1.3 を接続）

## 4.1. アクセス・トークンの取得
アクセス・トークンが必要なのですが、全然取得できなくてハマったのでメモしておきます。

1. Node-RED 上の Connection 設定から取得できなかった。
1. API Reference の [User login](http://seeed-studio.github.io/Wio_Link/#user-login) でも
取得できなかった。
1. API Reference の [Login to get the user token](http://seeed-studio.github.io/Wio_Link/#use-seeed-39-s-user-system) からログインしたら取得できた。

取得できたトークンはフローを作成するときに使用します。

## 4.2. フロー
フローはこんな感じです。
![node-red01.png](https://qiita-image-store.s3.amazonaws.com/0/134613/8ce83d67-26ec-51cc-c23e-bb17e078f488.png)
Connection 設定の **Manual Token** で先程取得したアクセス・トークンを設定します。
簡単ですが、Gesture センサからの Event（→：1、←：2、↑：3、↓：4、etc.）を
function で 0 or 1 に変換（値を2で割った余りに）して、
LED を ON/OFF してみました。

## 4.3. 動作確認
上手く動作しました！！
![07.gif](https://qiita-image-store.s3.amazonaws.com/0/134613/2444820f-7791-38ca-8a06-3113c1df7a64.gif)

お世辞にも反応が早いとは言えませんね。 (^^;

# 5. まとめ
何といっても価格が安いので（1,000円ちょっと）、手軽に試せそうですね。
ただ、Seeed のサーバー経由になっちゃう？ のがちょっとイヤです。
[Server Deployment Guide](https://github.com/Seeed-Studio/Wio_Link/wiki/Server%20Deployment%20Guide) に説明があったけど、サーバーを構築するのはちょっと大変そうです。
でも Arduino 化できるようなので、Arduino にしちゃったら関係ないですね。
今度は Arduino 化した Wio Node で何か作ってみようかなと思ってます。