LoginSignup
8
6

More than 3 years have passed since last update.

Shiftr.ioの画面をNoodlに埋め込んで最強IoTダッシュボードを作る

Last updated at Posted at 2019-10-05

本記事は、Noodlもくもく会 #0での成果物です。
メンターの@kmaepuさん・@kisaichi07さん、お褒めくださった参加者の皆様ありがとうございました。


TL;DR

shiftr.ioの画面をNoodlに埋め込むことができました。
1つの画面で、作ったIoT作品などを操作しながら、通信状況も確認できます。

サンプルページはこちら

shiftr.io in noodl

動機

Noodl

Noodlは、ノードを繋いで簡単にUIのプロトタイピングができるスウェーデン発のツールです。
外部との通信も簡単にできてしまうのが凄いところで、MQTTで通信するIoTデバイスとの相性がとても良いです。IoTで使っている例は、@kmaepuさんのアクアリウム管理IoTなどがあります。

筆者は最近入門し、ESP32と通信させたりして遊んでいます。

shiftr.io

無料で使えるMQTTブローカです。別のプログラムやIoTデバイスとNoodlを連携させたい……という願いが数分で叶います。
導入方法については以下の記事をご覧ください。

このサービス、シンプルながら通信状況が一目でわかるめちゃくちゃ優秀なダッシュボードが使えます。shiftr.io/tryをご覧になれば分かる通り、どのデバイスが繋がっていてどのtopicにデータを送っているか、リアルタイムで表示されるのです。
動きが面白くてずっと見ていられますし、通信の監視や問題箇所の切り分けにも使えて実用性も十分です。

shiftr.io in noodl
無限ループって怖くね?

課題:見るべき画面が多すぎる

Noodlとshiftr.ioを組み合わせて何か作ろうとすると、Noodlのエディタ・shiftr.ioの画面・(IoTモノなら)Arduino IDEやシリアル通信のモニタなどを確認しながら作業が進みます。

many-windows

通信できているか確認したいときなどは、Noodlとshiftr.ioを横に並べて見比べなければなりません。割と面倒です。

shiftr.ioの埋め込み機能を使うと……

ググってもほとんど言及されていませんが、shiftr.ioの画面をよく見るとEmbedなるボタンがあります。
スクリーンショット 0001-10-05 11.00.37.png
押すと埋め込みコードがコピーできる画面に飛びます。
スクリーンショット 0001-10-05 11.01.58.png

ところで、NoodlにHTML ContentというHTMLを書き込めるノードがあります。
スクリーンショット 0001-10-05 11.03.40.png
これをこうして……
koushite.png
こうじゃ
( ^ω^)
result-shuchu.png

解説

以降は真面目に解説します。
今回作ったプロジェクトはGitHubで公開しています。

HTML Contentにshiftr.ioを表示させる

シンプルなボタンが1つあるだけのプロジェクトを用意しました。Circleを押したとき・離したときに状態が変化し、/buttonトピックにJSONが送信されます。
スクリーンショット 0001-10-05 11.22.47.png

HTML Contentを作成して、画面の下半分に配置します。プロパティのContent > HTML > EditからHTMLのエディタが開けるので、shiftr.ioからコピペした埋め込みコードを貼り付けます。

Oct-05-0001 11-31-02.gif

この時点でshiftr.ioの画面が表示され、ブラウザで見るものと同様に表示されているのが分かります。

埋め込みコードの修正

生成された埋め込みコードは以下のようになっています。

<!DOCTYPE html>
<iframe src="https://shiftr.io/{user}/{namespace}/embed?zoom=1"
        width="600" height="400" frameborder="0"
        webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

widthheightが固定されていますが、Noodlの画面からはみ出してしまったのでそれぞれ100%に修正します。これでHTML Contentノード自体のサイズへ従うようになるので、Noodl側だけでレイアウト調整ができます。

また、webkitallowfullscreen mozallowfullscreen allowfullscreenの記述があると、埋め込まれた画面内に"Maximize"なるボタンが表示されます。
これを押すとshiftr.ioの画面が最大化されるのですが、Noodl自体がelectron(中身はChromeブラウザ)で作られているため、押すとNoodlのエディタごと最大化してしまいます :sweat_smile:

最大化機能が不要であればfullscreen関係の属性は削ってしまいましょう。埋め込まれた画面中にMaximizeボタンが出てこなくなります。

<!DOCTYPE html>
<iframe src="https://shiftr.io/{user}/{namespace}/embed?zoom=1"
        frameborder="0" width="100%" height="100%"></iframe>

きちんと画面内に収まっていい感じです。
スクリーンショット 0001-10-05 12.45.19.png

完成

これでshiftr.ioでの通信状況をNoodlから閲覧できるようになりました。
背景色や文字色をshiftr.ioに合わせて#1aaa54に設定すると統一感が出ます。

スクリーンショット 0001-10-05 12.49.07.png

あとは用途に合わせてボタンや表示エリアを作成すればOKです。

Tips

埋め込んだiframeは、Noodl側で画面サイズを変えても動的にサイズを変えてくれません。
画面サイズを変えたら、Noodl画面右上の再読み込みボタンを押しましょう

Oct-05-0001 12-55-12.gif

埋め込まれたshiftr.io画面でも、本家と同様にデバイスやトピックをドラッグで移動したり、スクロールで拡大縮小したりできます。
Oct-05-0001 13-00-46.gif

ただし、何かの弾みでドラッグやスクロールが効かなくなることがあります。原因は分かっていませんが、この場合もNoodl側で再読み込みすれば大抵直ります。

活用シーン

開発や動作確認に

Noodlで作業しながらリアルタイムで繋がっているデバイスや送られているデータを確認できます。
これが想像以上に快適で、動かない時もすぐに原因を把握できる(データが送られてない・マイコンのWi-Fi通信が切れているなど)ので開発がスピードアップすることでしょう。

スクリーンショット 0001-10-05 13.21.16.png

勉強会などでのデモに

IoTLTなどで発表していると、いざ壇上でデモしようという時に様々な原因で動かないという「デモあるある」が稀によく発生します。特に通信関係でうまくいかないケースは多いので、Noodlで確認できるようにしておくと良さそうです。

Noodlではブラウザでプレビューを表示できますが、同じLANに繋がっていれば他の端末からでもアクセス可能です。
つまり、PCでデモ発表しながら手元のスマホでこっそりモニターするなんてこともできます。

IMG_4369.JPG

連携がうまく動かない時などの保険として、手動で作品を動かすボタンをつけても面白いと思います。

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6