この記事はenebular Advent Calendar 2016の3日目の記事です。
現在、enebularで使われているNode-REDには、Wio Nodeのノード node-red-contrib-wio-seeed があるので、Wio Nodeを使うとセンシングデータを手軽に取得することが出来ます。そしてサーボやLEDなど出力もこれまた手軽です。
だいたいはコレで事足りるのですが、以下のようなケースでWio Nodeのノードうまく値が取れなかったり出力が動かなかったりするケースがあります。
- Wio Nodeアプリが更新されて使えるGroveセンサーが更新されたがうまく値が来ないケース
- Wio NodeのAPIサーバーが更新されてトークン取得が動作しないケース
- とりあえずView API画面で値が取れるのになんだかうまく動かないケース
このあたり。困る。Wio NodeデバイスもWio NodeのAPIサーバーも頻繁に更新されているので、ノード開発側もつぶさに追いかけるとなるとなかなかの手間になるかと思います。
ということで今回はWio NodeノードがうまくいかないときにNode-REDシンプルにデータを受け取る方法を書き留めます。
準備
Wio Nodeには光センサーのGroveを接続します。
View APIで操作してみる
ファームウェアを書き込んで成功したら、右上のView APIを開きます。
Wio Nodeの便利なところは、このView APIでテストするだけでも、簡単にデバイスとやり取りが出来るところですね!
取得してみてる状況。
View APIのURLを取得しておく
実はこの画面はリンク先が生成されます。Android版の場合は右上のマークをクリックしましょう。
共有したいものをクリックします。今回は別のPCでenebularを表示しているような想定で考えているのでメールで転送しましょう。
メールで届きました。
enebularを使うPCでURLへアクセスするとこのように表示されます。
これでコピペしやすい!
enebularと連携する
さてenebularとの連携です。プロジェクトを作ってフローを作成します。フローが表示されるので設定を始めます。
enebular をつかいはじめるときは、enebularアドベントカレンダー1日目で石川さんの書かれたenebular をつかいはじめる記事がわかりやすいです。
ということで、
プロジェクトを作って、
New Flowを押してフローを新規作成します。
View APIのURLを表示させます
まず、さきほどのView URLを表示します。光センサーを取得したURLをコピーします。
だいたいURLの名前の感じで把握できますが、
https://us.wio.seeed.io/v1/node/GenericAInA0/analog?access_token=
のところをコピーします。
ノードを作る
inject→http request→debugという形でフローを作ります。
injectノードはクリックして、このように1秒ごとに発動するように設定します。
http requestをクリックして設定のURL部分に先ほどのURLを設定します。
これで全てをつなげたのを確認して設定は完了です。デプロイしてみます。
動かしてみる
うまくいけば、1秒ごとに右のデバッグ画面に値が取得できます。
つづいて、光センサーを変化させてみましょう。
手で押さえて明るさを変えてみます。
無事、変化しました!
LED Barも設定した例
ためしにLED Barも設定した出力例もお伝えします。
UARTのGrove口に、
LED Barをつなげます。
ファームウェアを書き込んだらView APIでhttps://us.wio.seeed.io/v1/node/GroveLEDBarUART0/level/
からはじまるURLをコピーしておきます。Test Requestで1ケタの数字を送ってみて動作も確認しておきましょう。
フローはこのように10,5,1とinjectノードから来た値をfunctionノードでURL設定してLED Barへのhttp requestノードに流します。
injectノードはこのようにPayloadを10,5,1と設定します。
functionノードはURLの送り先を設定しつつ、injectノードからきた値に応じてURLを加工します。functionノードの中身は以下の通り。
// ここに https://us.wio.seeed.io/v1/node/GroveLEDBarUART0/level/からはじまる一文を加えます。 msg.url = "https://us.wio.seeed.io/v1/node/GroveLEDBarUART0/level/[level]?access_token= "; // 来た値を差し替え msg.url = msg.url.split("[level]").join(msg.payload); return msg;
http requestノードはMethodをPOSTにする設定だけします。
出来上がったらデプロイしてみます。
5の左側のボタンを押してみましょう。
無事動きました!
実はLED BarはWio NodeのNode-REDノードでは動作対応してないものなので、このようにシンプルにAPI URL経由行うことでやり取りが可能になります。
おわりに
ということで、Wio Nodeノードでもかなり楽しめるものの、Wio Nodeだけではうまく動かせないときのスキマを埋めるNode-REDフローTIPSをお伝えしました。
私はWio Nodeノードだけで組めるときはそれで完結させますが、ちょっと設定がハマりそうになったら今回の手法で一旦ざっくり組んで完成させてから、Wio Nodeノードに置き換える手法で、かなり安心して制作をすすめやすくなりました。
今回はenebularでのWio Nodeの扱い方を中心にお伝えしましたが、enebularはこの先の可視化グラフやクラウドと連携してこそ、さらなる真価を発揮します。
ですので、Wio Nodeのセンシングや出力によってデバイス側の動きについては、アイデアの熱量をそのままに気楽に作って可視化グラフやクラウドといったenebularのいろいろな活用を楽しんでみて下さい!