18
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-10-12

Node-REDのobnizノードをバージョンアップしましたので、使い方概要を書いていきたいと思います。

バージョンアップ概要

  • obnizとの通信用のjsonデータを書かなくて良くなった!楽!
  • obnizにアウトプットしかできなかった(ディスプレイに文字出すとかLEDつけるとか)のが、インプットもできるようになった!
  • JavaScriptSDKでできることが全部そのままできるようになった!
  • 互換性なくなった!

インストール方法

NodeREDの右上のメニューから、パレットの管理を選びます
スクリーンショット 2020-10-13 11.25.22.png

「ノードを追加」タブにてobnizと検索します。

node-red-contrib-obnizがv0.6.1で出てきますので、右側の「ノードを追加」ボタンを押します

スクリーンショット 2020-10-13 11.25.31.png

左側に青いobnizノードが2つ出てくればインストール成功です
スクリーンショット 2020-10-13 11.26.47.png

使い方

ノードの種類

obnizノードが2つあります。

obniz-repeat.png

obniz-function.png

obniz repeatはセンシングなど、常にデータを取り続けることがしたいとき、
obniz funcはフロー上のきっかけでなにか動作させたいときに使います。

どちらのノードもプロパティを開くと、obnizの設定と、コードを書く画面が出てきます。
obniz-func-property.png

まずはobnizの設定をしましょう。

obnizの設定

obniz repeatノード、もしくはobniz functionノードのプロパティから、"新規にobnizを追加"を指定して右側の編集ボタンを押すとobnizの設定画面に行くことができます。

obniz-config.png

ここで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});

sample-config.png

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;

スクリーンショット 2020-10-12 12.58.37.png

スクリーンショット 2020-10-12 12.57.52.png

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);

スクリーンショット 2020-10-12 13.03.06.png

スクリーンショット 2020-10-12 13.05.51.png

また、obniz functionノードでデータのセンシングを行えば、発火されたときだけデータを取得しに行くということができるようになります

msg.payload = await obniz.buttonA.isPressedWait();
return msg;

スクリーンショット 2020-10-12 13.05.15.png

スクリーンショット 2020-10-12 12.57.49.png

まとめ

obnizノードが進化したので、だいぶ使いやすくなったと思います。
バグ連絡は twitter:@9wick まで!

pull-reqもお待ちしてます!
https://github.com/obniz/obniz-nodered-sdk

18
12
1

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
18
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?