Node-REDのobnizノードがバージョンアップした!


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