Node-REDのobnizノードをバージョンアップしましたので、使い方概要を書いていきたいと思います。
バージョンアップ概要
- obnizとの通信用のjsonデータを書かなくて良くなった!楽!
- obnizにアウトプットしかできなかった(ディスプレイに文字出すとかLEDつけるとか)のが、インプットもできるようになった!
- JavaScriptSDKでできることが全部そのままできるようになった!
- 互換性なくなった!
インストール方法
NodeREDの右上のメニューから、パレットの管理を選びます
「ノードを追加」タブにてobnizと検索します。
node-red-contrib-obnizがv0.6.1で出てきますので、右側の「ノードを追加」ボタンを押します
左側に青いobnizノードが2つ出てくればインストール成功です
使い方
ノードの種類
obnizノードが2つあります。
obniz repeatはセンシングなど、常にデータを取り続けることがしたいとき、
obniz funcはフロー上のきっかけでなにか動作させたいときに使います。
どちらのノードもプロパティを開くと、obnizの設定と、コードを書く画面が出てきます。
まずはobnizの設定をしましょう。
obnizの設定
obniz repeatノード、もしくはobniz functionノードのプロパティから、"新規にobnizを追加"を指定して右側の編集ボタンを押すとobnizの設定画面に行くことができます。
ここでobnizの設定を行います。
よく使う項目は3個です
-
obnizID
使用するobnizデバイスのobnizIDを入れます -
DevieType
使用するobnizデバイスの種類を選択します -
初期化処理
obniz.wiredやobniz.ble.initなど、起動時に1度だけ行いたい処理を記載します。
obnizIDとDevieTypeはおそらく迷わないと思うので割愛して、初期化処理だけ詳しく説明したいと思います。
初期化処理
functionノードと同じような感覚で、初期化処理を記載します。
ここではobniz
変数とobnizParts
変数が割り当てられていて、そのまま使うことができます。
awaitにも対応しているので、obnizをJavaScriptSDKで使うときと同じように書くことができます。
変数名 | 説明 |
---|---|
obniz | new Obniz("OBNIZ_ID")で作られたobnizインスタンスが割り当てられます |
obnizParts | すべてのobniz関連ノードで共通のオブジェクトが割り当てられます。 初期は空オブジェクト {} です。obniz.wiredで作られたパーツインスタンスを格納するのにご利用ください |
たとえば、M5StickCに外付けLEDをつけた際は、こんなコードを書くことになります。
obnizParts.led = obniz.wired("LED",{anode:0});
obniz repeatの設定
obniz Repeatノードの設定は、主に3つです
-
obniz
上記obnizの設定で作成したobnizを選択します -
interval
繰り返しの間隔時間を指定します(ミリ秒) -
コード
繰り返しで行う動作を設定します
コードでは、obnizの初期化処理のときと同じく下記変数が割り当てられていて、使うことができます
変数名 | 説明 |
---|---|
msg | 空オブジェクト {}
|
obniz | new Obniz("OBNIZ_ID")で作られたobnizインスタンスが割り当てられます |
obnizParts | すべてのobniz関連ノードで共通のオブジェクトが割り当てられます。 初期は空オブジェクト {} です。obniz.wiredで作られたパーツインスタンスを格納するのにご利用ください |
今回の例だと、obnizの初期化処理で obnizParts.led
を作成していますので、ここでは obnizParts.led
を使うことができます
nodeのデータ出力方法は2つあり、どちらもfunctionノードと同じ仕様になっています。
-
return msg
で発火 -
node.send(msg)
で発火
基本はreturn msg
を使ってもらえればと思いますが、非同期処理などがある場合は node.send(msg)
でも発火できます。
たとえば、m5stickCのボタンAが押されてるかどうかを1秒おきに発火させるにはこのように書きます。
msg.payload = await obniz.buttonA.isPressedWait();
return msg;
obniz functionの設定
obniz functionノードの設定は、主に2つです
-
obniz
上記obnizの設定で作成したobnizを選択します -
コード
発火時に行う動作を設定します
コードでは、他と同じく下記変数が割り当てられていて、使うことができます
変数名 | 説明 |
---|---|
msg | フローから受け取ったメッセージオブジェクト |
obniz | new Obniz("OBNIZ_ID")で作られたobnizインスタンスが割り当てられます |
obnizParts | すべてのobniz関連ノードで共通のオブジェクトが割り当てられます。 初期は空オブジェクト {} です。obniz.wiredで作られたパーツインスタンスを格納するのにご利用ください |
今回の例だと、obnizの初期化処理で obnizParts.led
を作成していますので、ここでは obnizParts.led
を使うことができます
nodeのデータ出力方法は2つあり、どちらもfunctionノードと同じ仕様になっています。
ここらへんはobniz repeatと一緒ですね。
-
return msg
で発火 -
node.send(msg)
で発火
基本はreturn msg
を使ってもらえればと思いますが、非同期処理などがある場合は node.send(msg)
でも発火できます。
たとえば、msg.payloadの値に応じてLEDを光らせたり、ディスプレイに文字を表示する場合はこのように書きます。
if(msg.payload > 100){
obnizParts.led.on();
}else{
obnizParts.led.off();
}
obniz.display.clear();
obniz.display.print(msg.payload);
また、obniz functionノードでデータのセンシングを行えば、発火されたときだけデータを取得しに行くということができるようになります
msg.payload = await obniz.buttonA.isPressedWait();
return msg;
まとめ
obnizノードが進化したので、だいぶ使いやすくなったと思います。
バグ連絡は twitter:@9wick まで!
pull-reqもお待ちしてます!
https://github.com/obniz/obniz-nodered-sdk