1
2

JavaScriptのコードをobnizノードで使えるように書き換える

Last updated at Posted at 2024-05-11

Node-REDのobnizノードの使い方は少しクセがあるのでクセを把握しておきましょう。

obnizノードの使い方概要

  • 設定ノードという裏側のノードがいて、ここでピンアサイン(各ピンに何を設定するのか)などの初期化処理を記述すること
  • 表側に見えて使えるノードはobniz repeatノードobniz functionノードの2種類
  • 2種類のノードは使い分けが必要で、それぞれのノードの中にJavaScriptノードを記載する
    • センサーなどの数値を常に取得したいインプット系の処理はobniz repeatノードを使う
    • LEDやスピーカーなどアクチュエーターやインジケーターを操作したいアウトプット系の場合はobniz functionノードを利用

といった流れです。

こちらも参照ください

obnizノードの使い方概要

書き換え例

例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 IDを入れてある設定項目の下にあります。
スクリーンショット 2024-05-11 18.39.24.png

  • 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);
}
1
2
0

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
1
2