Node-REDのobnizノードの使い方は少しクセがあるのでクセを把握しておきましょう。
obnizノードの使い方概要
- 設定ノードという裏側のノードがいて、ここでピンアサイン(各ピンに何を設定するのか)などの初期化処理を記述すること
- 表側に見えて使えるノードは
obniz repeatノード
とobniz functionノード
の2種類 - 2種類のノードは使い分けが必要で、それぞれのノードの中にJavaScriptノードを記載する
- センサーなどの数値を常に取得したいインプット系の処理はobniz repeatノードを使う
- LEDやスピーカーなどアクチュエーターやインジケーターを操作したいアウトプット系の場合は
obniz functionノード
を利用
といった流れです。
こちらも参照ください
書き換え例
例1. スピーカーの利用
例えば以下のようなスピーカーを扱うコードがあった場合
元のスピーカー利用のコード
公式ドキュメントに記載のあったコードを使ってみます。
// Javascript Example
var speaker = obniz.wired("Speaker", {signal:0, gnd:1});
speaker.play(1000); //1000hz
await obniz.wait(1000);
speaker.stop();
↑のコードを分解して、設定ノードとobniz functionノードに書き換えましょう。
Node-REDで使えるようにobnizノードに書き換え
- obnizの設定ノード
設定ノードではobnizPartsというグローバル変数に設定情報を入れています。
obnizParts.Speaker = obniz.wired("Speaker",{ signal:0, gnd:1 });
こちらを設定ノードの初期化という項目に
- obniz functionノード
センサーではなくスピーカーなのでobniz functionノードを選定します。
obnizParts.speaker.play()といった形でグローバル定義しているところから関数を参照して利用できます。
obnizParts.speaker.play(1000); //1000hz
await obniz.wait(1000);
obnizParts.speaker.stop();
といった書き換えになります。
書き出したJSONはこちらです。
[{"id":"4e3fcc47958b6fed","type":"obniz-function","z":"6fb5714eef9f6d67","obniz":"8816e09b9d1479f7","name":"","code":"obnizParts.Speaker.play(1000); //1000hz\nawait obniz.wait(1000);\nobnizParts.Speaker.stop(); // 音をとめる","x":400,"y":400,"wires":[[]]},{"id":"4326f4a9b12a3397","type":"inject","z":"6fb5714eef9f6d67","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":180,"y":340,"wires":[["4e3fcc47958b6fed"]]},{"id":"8816e09b9d1479f7","type":"obniz","obnizId":"4927-6126","deviceType":"obnizboard1y","name":"","accessToken":"","code":"obnizParts.Speaker = obniz.wired(\"Speaker\",{ signal:0, gnd:2 });"}]
例2. CdS照度センサー
例えば以下のようなスピーカーを扱うコードがあった場合
const Obniz = require('obniz');
const obniz = new Obniz('obnizのデバイスID');
obniz.onconnect = async () => {
obniz.io0.output(true); //io0を5vに
obniz.io2.output(false); //io2をGNDに
//io1をアナログピンに
obniz.ad1.start((voltage) => {
console.log(`changed to ${voltage} v`);
});
//一回だけ取得
var voltage = await obniz.ad0.getWait();
console.log(voltage);
}
- obnizの設定ノード
obniz.io0.output(true); //io0を5vに
obniz.io2.output(false); //io2をGNDに
- obniz repeatノード
const voltage = await obniz.ad1.getWait();
obniz.display.print(voltage)
msg.payload = voltage;
return msg;
といった書き換えになります。
Node-REDのノードはmsg.payloadに値を詰めて、return msgで次のノードに情報を渡します。
やりたいこと
HC-SR04という超音波センサーを使いたいです。
距離の値を取得してデバッグノードに渡す処理を書きたいのでやり方を教えて下さい。
参考までに公式ドキュメントにあったJavaScriptコードはこちらです。
// Javascript Example
const hcsr04 = obniz.wired("HC-SR04", {gnd:0, echo:1, trigger:2, vcc:3});
while(true) {
let avg = 0;
let count = 0;
for (let i=0; i<3; i++) { // measure three time. and calculate average
const val = await hcsr04.measureWait();
if (val) {
count++;
avg += val;
}
}
if (count > 1) {
avg /= count;
}
console.log(avg);
await obniz.wait(100);
}