今年も始まりましたアドベントカレンダー!
enebularウフル社員版の初日のネタということで、最近ウフルが運営したハッカソンに向けて開発・提供したPrivate Nodeについて紹介します。
Private Nodeは、自作のノードを簡単に無料/有料で共有できるenebularの機能です。最近、無料のPrivate Nodeであれば、無料プランのプロジェクトでも使用できるようになっています。
GrovePi用Private Node開発の経緯
11/27~28に福井で開催された地方創生ハッカソン in 福井に技術メンターとして参加してきました!コロナも落ち着いてきたということで、ひさびさのオフラインのイベントです。
今回のハッカソンでは、アイディアからすぐに動くものが作れるように、ウフルからRaspberryPiとセンサーやスイッチ、ブザーなどのGroveモジュールとアプリケーションの開発用にenebular editor(Node-RED)を提供しています。
が・・。
準備している段階で、用意しているGroveモジュールを扱うためのノードがなかったことに気付きました。あると思っていたものは古くなっていてアップデートも行われておらず使用できないという状況に・・。
Groveモジュールと共に用意しているGrovePi+は、単純にRasperryPiのI/OがGroveコネクタになっているわけではなく、マイコンが介してI2Cでやり取りしているので、RaspberryPiのI/Oノードでは対応できません。
このままでは、すぐに動くものが作れる!
というわけにはいきませんので、専用のノードを作りました。
対応すべきGroveモジュール
ハッカソンで用意したのは、RaspberryPiとGrovePi+ starter kit for Raspberry Pi、その他いくつかのGroveモジュールです。
Groveモジュールは以下のラインナップです。
- デジタル入力
- デジタル出力
- アナログ入力
- I2C
GrovePi+について
GrovePi+にはArduinoなどにも使われているマイコンATmega328が搭載されていて、RaspberryPiには無いアナログ入力を補っています。デジタル入出力とアナログ入力の信号はATmega328を介してI2Cでやりとりする様になっています。
詳しくはGrovePi+のブロック図が参考なると思います。
このGrovePi用のノードとして、接続されるGroveモジュールごとに扱えるノードを開発しました。
開発したGrovePi用ノード
GrovePi用ノードはenebularのPrivate Nodeとして作りました。Private Nodeであれば、enebularのプロジェクトに入れていれば自動的にenebular editorのノードパレットに追加されます。
作ったノードは、enebularのDiscoverに登録しましたので、インポートすれば誰でもRasperryPi上のenebular editorもしくはenebular-agentのフローで使用できますので、ぜひ使ってみて下さい。
enebular Discover grovepi-nodes
使用方法
ノードごとに使い方を説明します。
GrovePi デジタル入力ノード
スイッチなどの単純なON/OFFのGroveモジュールで使用できるノードです。
入力が変化するとmsg.payloadに0または1が出力されます。
プロパティではGrovePiボードをconfigノードとして指定します。configノードとしては名前を設定するぐらいで、フロー内で使用するノードですべて同じconfigノードを使用していればOKです。あとはGroveモジュールが繋がっているコネクタ番号を指定するだけです。
GrovePi LEDノード
Grove-LED用のノードです。単純にデジタル出力に対して、ON/OFFをコントロールできるので、Grove-リレーやGrove-ブザーでも使用できます。
入力のmsg.payloadが"off"、false、0、"reset"、"stop"のときはデジタル出力として0を出力、それ以外のときは1を出力します。
プロパティではGrovePiボードconfigノードの指定とGroveモジュールが繋がっているコネクタ番号を指定するだけです。
GrovePi ブザーノード
Grove-ブザー用のノードです。ノードが呼ばれると設定した時間のあいだONになります。(msgの内容はなんでもOKです)こちらもGrove-ブザー以外でも使用できます。
プロパティではGrovePiボードconfigノードの指定とONにする時間とGroveモジュールが繋がっているコネクタ番号を指定します。
GrovePi アナログノード
アナログ出力のGroveモジュール用のノードです。0~1023の間で読み取った値がmsg.payloadに出力されます。Grove-音センサやGrove-回転角センサ、Grove-光センサで使用できます。
プロパティではGrovePiボードconfigノードの指定とGroveモジュールが繋がっているコネクタ番号と読み込む周期を設定します。
GrovePi 温湿度センサノード
GROVE-デジタル温度・湿度センサ用のノードです。温度、湿度、熱係数をmsg.payloadに出力します。
プロパティではGrovePiボードconfigノードの指定とGroveモジュールが繋がっているコネクタ番号と周期を設定します。
GrovePi 超音波距離センサーノード
Grove-超音波距離センサー用のノードです。msg.payloadにcm単位の検出力を出力します。
プロパティではGrovePiボードconfigノードの指定とGroveモジュールが繋がっているコネクタ番号と周期を設定します。
GrovePi 3軸デジタル加速度センサー(±16g)ノード
Grove-3軸デジタル加速度センサー(±16g)用のノードです。msg.payloadにX,Y,Z軸の加速度を出力します。
プロパティではGrovePiボードconfigノードの指定とGroveモジュールが繋がっているコネクタ番号と周期を設定します。
GrovePi RGBバックライト液晶モジュールノード
Grove-RGBバックライト液晶モジュール用のノードです。msg.payloadの内容を表示します。msg.colとmsg.rowで表示位置、msg.colorでバックライトの色を指定できます。
プロパティではGrovePiボードconfigノードの指定とGrovePiのボードをconfigノードとして登録するのみです。
最後に
開発したGrovePi用PPrivate Nodeはウフルオフィシャルとして公開しているものではありません。それなりにテストは行っていますが、あくまでプロトタイピングを簡単にする手段としてご使用下さい。
逆にバグの修正や対応を追加してほしいGroveモジュールなどの要望があれば手軽に対応したいと思っています。