本セッションの登壇者
セッション動画
野良ハックチームのざっきーと申します。本日は、「マイクロコントローラで動かすNode-RED」というタイトルで発表させていただきます。こちらの資料は60ページを超えていますが、あとで共有いたします。
最初に発表されたのびすけさんの発表資料の中にModdable SDKの話があったと思いますが、それに関係する話になるので、そちらを念頭に置いて話を聞いていただけると助かります。
話の中身については「クラウド」「ローカル」「モバイル」「エッジ」「MCU」 - この5つのパートに分けて話をしていきます。

クラウド - 各プロバイダの無料枠を探し求めて
まず最初にクラウド環境についてです。クラウド環境は皆さんはすでにお仕事やプライベートなどで利用されてるかと思いますが、いろいろな環境がありますよね。

最近の出来事として、まずIBM Cloudについては、Cloud Foundryのランタイムの無料枠が廃止され、クレジットカードの登録が必須になりました。Salesforceに買収されたHerokuについては、2022年11月28日から無料枠が廃止され、私も無料枠ロスを経験しました。

12月になってから予告通り廃止になりました。

あらためて、「クラウド環境で無料で使える枠はないのかな…」といくつか調べてみました。まずはクラウドシェル環境ですね。
AWSは右上にアイコンがある通り、無料のシェル環境が使えます。ここでNode-REDを起動して、ngrokで外にエクスポートすることでNode-REDを利用できる環境になってます。

続いてAzureです。AzureもAWSと同様にクラウドシェルが使えますが、落とし穴がありまして、クラウドのシェル環境自体は無料ですが、データを保存するストレージ環境は有償なので、完全に無料ではないことに注意してください。

続いてGCPです。GCPも右上にシェルのアイコンがあり、ここから使えます。しかし利用の時間だけが制限されています。

私は仕事用やプライベート用のアカウントを持っていますが、アカウントごとにクラウドシェル環境を使える時間が違っているというところだけご注意ください。また、プレビューのポート番号ですが、Node-REDの場合には1880番に上がってきますので、ポート番号を2000番以上に設定を変更する必要があります。

続いてOracleのクラウド環境(OCI)です。こちらは、まだ無料で使えるインスタンスが残ってまして、こちらもクラウドシェル環境が用意されています。Oracle Cloudを使う方はまだ少ないかと思いますが、無料のインスタンスが2個まで使えるのでそこで使っている方が大半かなと思います。

続いてIBM Cloudです。IBM Cloudもクラウドシェル環境が整っていて、同様に使えます。先ほど紹介したCloud Foundryの無料枠がなくなってしまいましたが、クラウドシェル環境は引き続き無料で使えます。

続いて、クラウド環境の相対比較になります。実際、無料で使えるけど安定性とか品質、パフォーマンスはどうなのよっていう話がありますが、今回比較したのはAWS / Azure / Heroku / IBM Cloudの4つです。

実際に使うとなると、安定性はPostmanや、UptimeRobotを使って常に動いているかどうかの確認が無料でできます。あとは自分でGASなどを使ってレスポンスタイムを測ったりするなどして、無料でもおおむね安定して使えることがわかっています。

それから、クラウドの連続実行環境については、やはり常に稼働しているわけではなく、障害が発生したり、インスタンスが落ちたりすることがあるので、そのあたりはどうなのかという質問にお答えします。
私はセキュリティに関わる仕事をしていますので、たとえばフィッシングサイトが立ち上がった際にそれがレポートされるTwitterアカウントを監視し、それをトリガーにし、フィッシングサイトがテイクダウンされているかどうかチェックできるサイトを作っています。TwitterやLINE Botなどでも無料環境で十分使えるといえるかと思います。

先ほど紹介したクラウドサービスのほかにも、無料で使えるお試し環境やハンズオンなどで一時的に使える環境を提供しているサービスも、最近は厳しい状況になっています。よく使われていたKatacodaは、1時間ですが無料で潤沢なリソース環境を提供していましたが、2022年6月に終了してしまいました。Katacoda前提のハンズオンシナリオをたくさん提供していたのでそういった資産がまったく使えなくなってしまったのは悲しい出来事でした。
ただ、クラウドサービスはまだ残っていて、gitpod、日本のPaiza Cloud、コンテナ環境ではPlay with Docker、Play with Kubernetes、これは4時間制限で完全無料なので、このあたりを使ってハンズオンは継続できている感じです。

こちらが先ほど紹介したKatacodaの終了ページです。6月30日に予定通りクローズされました。

続いてgitpodです。gitpodもKatacodeと同じようにシナリオが作成できますので、ハンズオンなどで事前にシナリオさえ作っておけば、ワンクリックでシナリオを実行してハンズオンを始められるという状況にできます。

続いてPaiza Cloudです。こちらは、ブラウザの中にWindows環境が立ち上がっているような見た目で、ブラウザやシェル環境を立ち上げたりすることができるクラウドサービスです。

続いて**コンテナ環境(Play with Docker / Play with Kubernetes)**です。こちらは見た目はほぼ同じで、Docker環境でひとつのコンテナを立ち上げるか、複数のPodコンテナを立ち上げるかという違いで、ほぼ同じような使い方で使えます。

先ほど、一番最初に紹介したSalesforceが買収したHerokuのサービスについてですが、Herokuも無料枠がなくなってしまい、業界界隈ではそのHerokuからの移行先を模索しているような状況が続いています。
私もいくつか試してみたところ、Node-REDが起動できるような環境としては下図の青色にマーキングした以下のサービス「Render」「Railway」「Fly.io」「Koyeb」は使えるということが確認できていますので、この辺りでHerokuのDyno環境からの移行先が見つかるのではないかなと思います。

モバイル環境 - 有料アプリとして提供されているNode-RED環境
クラウドの話が長くなりましたので、本題のマイクロコントローラに向けて話を加速させていきたいと思います。
まずはモバイル環境です。モバイルについては、iOSとAndroidでNode-REDの環境 が用意されています。ただ有料アプリになりますので、いくらかのコーヒーを買っていただいて、製作者に還元していただければ同じような環境が使える状況になっています。

このモバイルのNode-RED環境のサンプルアプリケーションとして、いくつかの記事も書いていますので、もしご興味があればご覧ください。モバイル環境とクラウド、ローカルとの連携であったり、そういったものも問題なく使えるということが確認されています。

ローカル - アプリ利用がおすすめ
続いて、パソコンやサーバ、ローカル環境での話に移ります。ローカル環境の実行環境としては、たとえばパソコンのインストールした環境が汚れてしまうことが好ましくない方がいらっしゃると思います。なので、アプリとして提供されているNode-Red-Desktopや、enebularさんが提供しているenebular editorといったパッケージングされたものを使うと環境が汚れなくて気持ちよく使えるかなと思います。

エッジ - enebularの無償提供サービスがアツい
続いてエッジ環境です。こちらはラズパイとJetson Nanoを指しています。これまではマイクロコントローラが存在しませんでしたので、エッジ環境といえばラズパイかJetson Nanoの二択になっていますが、マイクロコントローラの話に向けて進めていきたいと思います。
エッジ環境については、たとえばAWS IoT agentを利用していただければデバイス証明書がエッジにインストールされて、その利用が非常に簡易になる使い勝手になっています。例として、AWS IoT agentをインストールして、複数台のラズパイを組み合わせてデジタルサイネージを実現した事例とラズパイで自宅のアロマを制御した事例を挙げておきます。


ほかにも、ラズパイを使ってカメラを設置し、その映像をシステムに配信したりということもできます。

これらの技術はNode-REDで実現されているわけですが、Node-REDの場合はFlow Editorというところでプログラミングをします。そのフロー自体を管理することが課題になってきますが、enebularのサービスを使えばそのフローを管理するという機能が完全に無料で提供されます。最近はenebularで機能追加があり、
- クラウドで実行される環境を提供
- agentで実行環境を提供
という2つの大きなアップデートがありました。

その機能のバックグラウンドにはAWS IoTが使われています。その前はユーザが自分でAWSを契約し、AWS IoTを有効化し、それをインストールして使うという非常に煩わしい手続きが必要でしたが、それが完全無償でenebularから提供されるおかげで、気軽にどちらの機能も使える状況になってきています。完全無料というのは初めてのサービスだと思います。

ただし、無料だからといって無制限に使えるわけではなく、1カ月の実行時間の制限には注意が必要かと思います。24時間/1カ月というのが決まっているので、これを超過すると使えなくなってしまいます。商用サービスで(enebularを)使う方はほとんどいらっしゃらないかとは思いますが、プライベートで使うにしてもやっぱり使えなくなってしまうと困るので、注意が必要です。

ほかにもエッジ環境でハードウェアを自作してそれを使うという環境も利用できます。ある雑誌連動企画で、雑誌を購入し、ラズパイのHATに挿すデバイスを購入していただければそのハードウェアデバイスを使えるという企画を実施したりしました。

あとはGPUが搭載されたJetson Nanoのエッジデバイスの上でも同じようにGPUリソースを使ってTensorFlowのモデルを動かして画像認識させるっていうようなこともNode-REDからできるわけです。

MCU - Moddable SDK + Node RED
最後、ようやく本日のテーマであるマイクロコントローラの話になります。
こちらは今日の最初の発表でのびすけさんから紹介があったModdable SDKとNode-REDが組み合わさった話になります。実際に、Node-REDのフローをModdable SDKの上で動かすというのが実際のカラクリになります。

こちらですが、10月7日に「Node-RED Con2022」が行われまして、そのうちの英語トラックで、実際にNode-REDをマイクロコントローラで動かすという非常にチャレンジングなプロジェクトの紹介がPeter Hoddieさんからありました。

この一般的なNode-REDとMCU-Editionの違いですが、ノーマルのNode-REDの場合にはNode.jsの上でFlow Editorを動かします。Node.jsはV8エンジンで動いているので、それをマイクロコントローラ上で動かすとなると、圧倒的にリソースが足りなくなるわけです。そこでModdable SDKを使って、XS(ExtraSmall)のJavaScriptエンジンの上でNode-RED Flowを動かすために変換処理が必要になってきます。実際にMCU Editionがどんなマイクロデバイス上で動くのかというと、以下のスライドの右側に書いてある、メジャーなESP32やRaspberry Pi Pico(RP2040)で動くとされています。おおむね入手性も高いですし、性能もそれなりに確保されている感じです。

仕組みですが、Node-REDのFlowは通常のV8のエンジンの上でFlowを作成してかまいません。そのFlowをJSONファイル形式でエクスポートできます。それをModdable SDKの中で読み込んだJSONファイルを変換しながらビルドして、マイクロデバイス上でインストールするという流れになっています。

試してみた感想ですが、やはりビルド環境を構築するのが大変でした。たとえばmacOSの場合はAppleが提供している開発環境のXcodeをきちんと動くような状況にしないといけないですし、Moddable SDKもインストールしないといけないし、ESP32の場合は、ESP-IDFという開発環境を用意しないといけないし、最後にNode-REDが必要となります。4つの環境構築をするのは非常に大変かと思います。現在、Moddable SDKのプロジェクトの中でDocker環境をターンキーソリューションとして準備しようというディスカッションが上がっていますので、近い将来、簡単にインストールして、Node-RED MCU editionが使えるようになるんじゃないかなという期待を持っています。
それから、Node-RED Flowの中から、Flowを変換してビルドしてデバイスにインストールするという手順がワンボタンで行えるnode-red-mcu-pluginというプラグインが開発されています。これは現在macOSとLinuxのみのサポートですが、Windows版も開発中です(注: 2023年1月16日時点で、Windows版のシミュレータを除き、macOS、Linux、Windowsでビルド/インストールできることを確認しています)。
最後に、マイクロデバイスで何をアプリケーションとして提供するかというと、やっぱり温度/湿度、気圧、振動、電圧/電流を測るセンサーデバイス類のサポートが期待されます。これは非常にユニークな取り組みで、通常のNode-REDの場合、サードパーティノードと呼ばれるようなセンサーデバイスごとにノードをインストールする必要がありますが、この取り組みは秀逸で、Node-RED MCUの中でセンサーノードだけが提供されて、その設定を変えるだけでどのセンサーデバイスも使えるというアーキテクチャになっています。この点は非常に素晴らしいと感じました。

見た目は変わらないですが、Node-REDを起動すると、右側のペインの中にMCUというタブが追加されるという感じです。ビルドボタンを押すと、Flowの変換→ビルド→マイクロデバイスへのインストールが行われる流れになっています。

サンプルをいくつかご紹介します。

GPIOは普通に使えますし、ネットワークの機能も提供されています。

ネットワークからマイクロデバイスに対して制御するということもできます。

それから、センサーデバイスで取ったデータをクラウドに上げて、それを可視化するようなFlowを作ったり、最近だとLEDを光らせるサードパーティノードもサポートされています。そういった細かいケースに関してはQiitaに記事を掲載していますのでもし興味がある方はご覧ください。



最後になりますけども、今ご紹介したNode-REDのMCU Editionを紹介する記事を「月刊I/O」(工学社)で3連載で掲載しています。先月(2022年12月号)が第1回目で、今月発売されるもので第2回、来月1月に最後の章を現在執筆しているところですので、こちらで簡単に概要は把握できるかなと思います。

月刊I/Oでは誌面の都合で紹介できなかったところは11月の「技術書展博覧会」で同人誌を書いていますので、ご興味ある方は見ていただけると嬉しいです。

駆け足でしたが、Node-RED MCU Editionについて紹介させていただきました。ご清聴ありがとうございました。