この記事は、IoTLT GWアドベントカレンダー 5/6 最終日の記事です。
RedMobileからタブレット内蔵の光センサーを取得してTello EDUを操作するメモです。
RedMobile とは
RedMobileとは @okhiroyuki さんが開発されている、Android アプリとして動くNode-REDです。
先日の東海大学講義では #RedMobile もデモして、授業後に学生さんから「スマホでも制御やセンサーに使えるRedMobile楽しそう!」という反響がありました。授業でIoT考える教材使うのもよさそうです。
この記事にある動画後編に詳細あります。https://t.co/1hF99SIMZV#nodered #noderedjp
— Tanaka Seigo (@1ft_seabass) April 23, 2019
センサーやデバイスの世界観を伝えるときにとても良く、大学の講義でも使いました。
まずローカルネットワーク内からアクセスしてフローを作ってデプロイで無事保存。
さらに!さくらインターネットにある別のNode-REDへMQTTつないで、タイムスタンプ折り返しさせて、しっかりデータ来た!!!最高では。#RedMobile #nodered #noderedjp pic.twitter.com/S6DrURc7mR— Tanaka Seigo (@1ft_seabass) March 11, 2019
MQTT連携が、Android タブレットと出来ると、なかなかに感動モノです。
今回やりたいこと
今回やりたいことは、RedMobileからタブレット内蔵の光センサーを取得してカバーの開閉を現実世界から取得してTello EDUを操作することです。
RedMobileからTello EDUを動かす
RedMobileからTello EDUを動かしましょう。まず、Androidタブレット上でRedMobileを起動します。
トップページでローカルのIPを確認します。192.168.1.XX:1880/red となっているところです。
ほかのPCからアクセスして、Tello EDUをNode-REDから station mode にして操作するメモ を試してみると、Tello EDUが操作できました。
RedMobileからTello EDUをタブレット内蔵の光センサーで操作する
離着陸が確認できたので、今度は、RedMobileからタブレット内蔵の光センサーを判定させて、カバーを閉じると光センサーがOFFと判定し、開くと光センサーがONと判定する仕組みを作ります。
フローはこちらです。
[{"id":"ba988ea4.ad77","type":"light","z":"2cf135fe.574a2a","name":"","x":270,"y":640,"wires":[["5ac8cb05.70b8d4"]]},{"id":"8bc69155.0aafa","type":"inject","z":"2cf135fe.574a2a","name":"per 1 sec","topic":"","payload":"","payloadType":"date","repeat":"1","crontab":"","once":false,"onceDelay":0.1,"x":130,"y":640,"wires":[["ba988ea4.ad77"]]},{"id":"536bf6c5.187778","type":"comment","z":"2cf135fe.574a2a","name":"light sensor control","info":"","x":130,"y":580,"wires":[]},{"id":"5ac8cb05.70b8d4","type":"rbe","z":"2cf135fe.574a2a","name":"","func":"deadbandEq","gap":"50","start":"","inout":"in","property":"payload.intensity","x":400,"y":640,"wires":[["7c75d0ec.315e"]]},{"id":"7c75d0ec.315e","type":"switch","z":"2cf135fe.574a2a","name":"intensity","property":"payload.intensity","propertyType":"msg","rules":[{"t":"lt","v":"5","vt":"num"},{"t":"gt","v":"100","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":540,"y":640,"wires":[["d3b53325.13b0f"],["a99b908f.91adc"]]},{"id":"3db37036.df3dc","type":"udp out","z":"2cf135fe.574a2a","name":"","addr":"192.168.XX.YY","iface":"","port":"8889","ipv":"udp4","outport":"","base64":false,"multicast":"false","x":1090,"y":740,"wires":[]},{"id":"d3b53325.13b0f","type":"change","z":"2cf135fe.574a2a","name":"land","rules":[{"t":"set","p":"payload","pt":"msg","to":"land","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":670,"y":620,"wires":[["e63d329e.f46ac"]]},{"id":"a99b908f.91adc","type":"change","z":"2cf135fe.574a2a","name":"takeoff","rules":[{"t":"set","p":"payload","pt":"msg","to":"takeoff","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":670,"y":660,"wires":[["e63d329e.f46ac"]]},{"id":"b901e62.c65cd18","type":"ui_button","z":"2cf135fe.574a2a","name":"","group":"de1c8cd.f50bd7","order":0,"width":0,"height":0,"passthru":false,"label":"command","tooltip":"","color":"","bgcolor":"","icon":"","payload":"command","payloadType":"str","topic":"","x":660,"y":740,"wires":[["e63d329e.f46ac"]]},{"id":"a2c02b84.ab3338","type":"debug","z":"2cf135fe.574a2a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":1050,"y":680,"wires":[]},{"id":"e63d329e.f46ac","type":"function","z":"2cf135fe.574a2a","name":"<HUB>","func":"\nreturn msg;","outputs":1,"noerr":0,"x":860,"y":680,"wires":[["a2c02b84.ab3338","3db37036.df3dc"]]},{"id":"de1c8cd.f50bd7","type":"ui_group","z":"","name":"デフォルト","tab":"c333b8c3.a77b28","disp":true,"width":"6","collapse":false},{"id":"c333b8c3.a77b28","type":"ui_tab","z":"","name":"ホーム","icon":"dashboard","disabled":false,"hidden":false}]
インポートできるフローも用意しました。
RedMobileには光センサーを取得できるノードがインストールされています。こちらをinhjectノードで1秒ごとに動かして動作させると intensity という値で光センサーの値が帰ってきます。
Report by Exception(例外データの報告)ノードというものがあり rbe ノードというのですが、ペイロードの値が変化した場合だけデータを送信するスグレモノです。
今回は変化量が大きいときに値が飛ぶようにします。これはカバーを開閉させて、開いたときはだいたい100以上上昇、閉じたときは0になるというのが確認できたのでそうしています。現場に合わせて実装する必要がありそうです。
こちらの intensity と書かれている switch ノードは手前の rbe ノードを受けて開閉合わせて値を見ています。
開いたときは100以上、閉じたときは0になるが一応5以下という判定です。
HUBはわかりやすくフローを集めるための空ノードです。UDPはTello EDUのIPに振り向けましょう。
動作させてみる
こちらで動かしてみると、以下のように動作できました!
今回は光センサーで取得しましたが、RedMobileでは様々なセンサーが取得できます。
加速度センサーや、バイブレーション、バッテリー残量などなど色々ありますね!
ありがとうございます!「豊富なセンシングを持つデバイス」としてスマホやタブレットが使えると、実装制約が緩やかになって発想が発展しやすくなるので、良いですね。
実を言うと加速度センサーで最初やろうとしたら、敏感すぎてで動画撮りにくかったのでこうしましたw#noderedjp #RedMobile
— Tanaka Seigo (@1ft_seabass) May 5, 2019
RedMobileを使うとNode-REDの接続性を活かしつつも、センサーの集合体としてのスマホの様々な現実を捉える能力を軸にして、いろいろな仕組みが作れるので、面白いですね。
Tello EDUは現実世界のキッカケと連携すると、いろいろな可能性が見えてくると思っているので、このような連携ができるのに RedMobile うってつけです。
引き続き、検証を進めていきます!
それでは、よき Node-RED & RedMobile & Tello EDU Lifeを!