Wio Node と Twilio Studio で簡単な IoT システムを組んでみる

# はじめに
積みボードと化していた、[Seeed Wio Node](https://www.seeedstudio.com/Wio-Node-p-2637.html) をいい加減使おう！ということで触ってみたら、思っていた以上に簡単に IoT システムを作れることがわかり、せっかくなら [Twilio](https://twilio.kddi-web.com/) と絡めてできないかな？と思ったのがきっかけです。

今回の IoT システムは、***「電話をかけると、Wio Node に接続されている温湿度センサの値を取得し、温湿度を音声で教えてくれる」***という、IoT ならよくある構成でございます。

電話使った IoT システムって、デモするとウケが良かったり、IoT の例としては結構わかりやすくて個人的におすすめです。

# 前提条件

* Twilio のアカウントを開設済みであること。<br>初めての方は、[トライアルアカウント](https://jp.twilio.com/docs/usage/tutorials/how-to-use-your-free-trial-account)を利用されることをお勧めします。
* Twilio の基本的な知識があること。<br>Phone Number の取得方法や Studio で作成した Flow へ Phone Number で取得した電話番号を割り当てる、といった手順については記載しません。
* Wio Node の初期セットアップについては、SHINYA さんの [WIO NODE + AZURE LOGIC APPSでお手軽IOT【WIO NODE初期設定編】](https://shinya.nagoya/2018/03/03/wio-node-azure-logic-apps%E3%81%A7%E3%81%8A%E6%89%8B%E8%BB%BDiot%E3%80%90wio-node%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A%E7%B7%A8%E3%80%91/) を参考にセットアップしました。
* スマートフォンの OS バージョンやメーカーによって、Wio Node との接続がうまくいかない場合があります。ご注意ください。

## 必要なデバイス

|名称|説明|価格(執筆時)|
|:-----------|:-----------|:-----------|
|Wio Node|デバイス本体|[1,231円](https://www.switch-science.com/catalog/2799/)|
|Grove 温湿度センサ(SHT31)|Wio Node へつなげるセンサー|[1,544円](https://www.switch-science.com/catalog/2853/)|
|スマートフォン (Android/iOS)|Wio Node のセットアップで使用|-|

# 手順

## Wio Node の設定

温湿度センサ(SHT31) を PORT0 へ接続し、アプリにて PORT0 に Temperature&Humidity Sensor (SHT31) を選択し、Wio Node のファームウェアを更新します。
<img width="320" alt="20181201_131438000_iOS.png" src="https://qiita-image-store.s3.amazonaws.com/0/49240/86c5a28f-2d0c-4303-4214-8592a31098f4.png">
更新が完了すると、 "View API" と表示されますので、温度取得の API と 湿度取得の API の URLを確認します。

<img width="320" alt="20181201_131449000_iOS.png" src="https://qiita-image-store.s3.amazonaws.com/0/49240/edbc3956-ba37-d3aa-d124-7b4bc3b632da.png">
<img width="320" alt="20181201_131506000_iOS.png" src="https://qiita-image-store.s3.amazonaws.com/0/49240/2ed8382f-97fd-59ee-4657-5fdc3f8708e8.png">

## Twilio の設定

### Studio Flow

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/49240/fddfc7b7-4265-c5a7-3683-a45288c60a16.png)

Wio Node からの取得失敗時は、失敗しましたの案内を流して終了します。
ちゃんとエラー系を組もうかと思ったけど、Studio 初心者なので勘弁してください。

### ウィジェット設定

#### say_welcome (Say/Play)

接続時のウェルカムメッセージ再生

|item|value|
|:-----------------|:-----------------|
|WIDGET NAME|say_welcome|
|SAY OR PLAY MESSAGE|Say a Message|
|TEXT TO SAY|こんにちは。こちらはワイオ・ノードです。|
|LANGUAGE|Japanese|
|MESSAGE VOICE|[Polly]Mizuki または [Polly]Takumi|
|NUMBER OF LOOPS|1|

#### http_temp (HTTP Request)

Wio Node に接続されている温湿度計の**温度**を取得

|item|value|
|:-----------------|:-----------------|
|WIDGET NAME|http_temp|
|REQUEST METHOD|GET|
|REQUEST URL|温度取得の API<br>https://us.wio.seeed.io/v1/node/GroveTempHumiSHT31I2C0/temperature?access_token=XXXXXXXXXX|
|CONTENT TYPE|From URL Encode|
|REQUEST BODY||

#### say_temp_ok (Say/Play)

温度取得成功時の音声案内

|item|value|
|:-----------------|:-----------------|
|WIDGET NAME|say_temp_ok|
|SAY OR PLAY MESSAGE|Say a Message|
|TEXT TO SAY|温度は {{widgets.http_temp.parsed.temperature}} 度です。|
|LANGUAGE|Japanese|
|MESSAGE VOICE|[Polly]Mizuki または [Polly]Takumi|
|NUMBER OF LOOPS|1|

#### say_temp_ng (Say/Play)

温度取得失敗時の音声案内

|item|value|
|:-----------------|:-----------------|
|WIDGET NAME|say_temp_ng|
|SAY OR PLAY MESSAGE|Say a Message|
|TEXT TO SAY|温度の取得に失敗しました。|
|LANGUAGE|Japanese|
|MESSAGE VOICE|[Polly]Mizuki または [Polly]Takumi|
|NUMBER OF LOOPS|1|

#### http_humi (HTTP Request)

Wio Node に接続されている温湿度計の**湿度**を取得

|item|value|
|:-----------------|:-----------------|
|WIDGET NAME|http_humi|
|REQUEST METHOD|GET|
|REQUEST URL|湿度取得の API<br>https://us.wio.seeed.io/v1/node/GroveTempHumiSHT31I2C0/humidity?access_token=XXXXXXXXXX|
|CONTENT TYPE|From URL Encode|
|REQUEST BODY|| 

#### say_humi_ok (Say/Play)

湿度取得成功時の音声案内

|item|value|
|:-----------------|:-----------------|
|WIDGET NAME|say_humi_ok|
|SAY OR PLAY MESSAGE|Say a Message|
|TEXT TO SAY|湿度は {{widgets.http_humi.parsed.humidity}}  パーセントです。|
|LANGUAGE|Japanese|
|MESSAGE VOICE|[Polly]Mizuki または [Polly]Takumi|
|NUMBER OF LOOPS|1|

#### say_humi_ng (Say/Play)

湿度取得失敗時の音声案内

|item|value|
|:-----------------|:-----------------|
|WIDGET NAME|say_humi_ng|
|SAY OR PLAY MESSAGE|Say a Message|
|TEXT TO SAY|湿度の取得に失敗しました。|
|LANGUAGE|Japanese|
|MESSAGE VOICE|[Polly]Mizuki または [Polly]Takumi|
|NUMBER OF LOOPS|1|

#### say_thanks (Say/Play)

音声サービス終了メッセージ再生

|item|value|
|:-----------------|:-----------------|
|WIDGET NAME|say_thanks|
|SAY OR PLAY MESSAGE|Say a Message|
|TEXT TO SAY|ご利用いただきありがとうございました。またのご利用をお待ちしております。|
|LANGUAGE|Japanese|
|MESSAGE VOICE|[Polly]Mizuki または [Polly]Takumi|
|NUMBER OF LOOPS|1|

# デモ

[![https://www.youtube.com/watch?v=hszKF23lm08](http://img.youtube.com/vi/hszKF23lm08/0.jpg)](https://www.youtube.com/watch?v=hszKF23lm08)
https://www.youtube.com/watch?v=hszKF23lm08

# おわりに

今回は時間がなかったのでこちらから電話をかけて確認という形になりましたが、できるなら温度のしきい値をトリガーとして逆に電話をかける動きも試してみたかったです。

また Seeed の Grove システムは多種多様なセンサが提供されていますので、PIRセンサで人を検知して電話をかけるとか、リードスイッチで扉の開閉をチェックするとかもできるので、どう Twilio と絡めていくか？というアイディアを考えるのも楽しいかと思います。