データの送受信

具体的なプラグインを用いた拡張機能を作成してみましょう。
Uartを使用し、エラーがあったときにのみデータをobnizCloudに送信するプログラムを作成します。

プラグインを活用することで今までのobnizでは難しかった通信容量の削減や高速な通信速度時にデータのロスをなくせます。

データの送受信

プラグインには

  • obnizCloudにデータを送信する
  • obnizCloudからデータを受信する

2つの機能があります。

プラグイン側では以下のように送受信が可能です。

#include <obniz.h>

// on data received from obnizCloud.
void onCommand(uint8_t* data, uint16_t length){
  Serial.println("\nonCommand");
  Serial.write(data,length);
}

void setup() {
  Serial.begin(115200);
  obniz.start();

  // receive data from obnizCloud
  obniz.commandReceive(onCommand);
}

void loop() {
  if (obniz.isOnline()) {
    uint8_t *text = "Hello";
    obniz.commandSend(text, strlen(text)); // send data to obnizCloud
    delay(1 * 1000);
  }
}

また、obniz.jsを利用して以下のようにプラグインとの送受信が可能です。

// receive from target device
obniz.plugin.onreceive = data => {
  console.log(data);
};

// send to target device
obniz.plugin.send("obniz.js send data get device?")

UARTを利用した例

Uartの通信相手は今回作例ではobniz Boardを用いていますが、実際に使用する際にはそれぞれの機器になります。

まずはプラグインのコードになります。
UartのRXが16ピン、TXが17ピンにあります。obniz Boardがオンラインの時にUartを読み込み、今回のプログラムでは正しいデータは a それ以外のデータは異常としてメッセージを送るようにします。

接続方法は、次の通りです。

ESP32-DevKitC obniz Board
16(Rx) 0(TX)
GND 3(GND)
#include <obniz.h>
void setup() {
  Serial.begin(115200);
  obniz.start();

  //RX:16 TX:17
  obniz.pinReserve(16);
  obniz.pinReserve(17);
  Serial2.begin(115200);
}

void loop() {
  if (obniz.isOnline()) {
    if (Serial2.available()) {
      uint8_t inByte = Serial2.read();
      Serial.write(inByte);
      if(inByte != 'a'){
        Serial.print(" Error");
        obniz.commandSend((uint8_t*)&inByte,1);
      }
      Serial.println("");
    }
  }
}

次にobniz.jsのコードになります。
ボタンが2つあり、一方は正しくUartを送信し、もう片方はエラーが発生します。エラーが発生すると、コンソールにエラーが発生した旨が通知されます。

また、Arduino IDEのシリアルモニターを確認すると受信したデータを確認できます。

<div id="obniz-debug"></div>
<div class="uart">
<h3 class="text-center">Uart Serial</h3>
<button style="width:49%"class="btn btn-primary" id="send_ok">OK Uart A send</button>
<button style="width:49%" class="btn btn-outline-primary" id="send_error">Error Uart B send</button>
</div>

<script>
    //test obniz
    let obniz = new Obniz("obnizID");
    obniz.onconnect = async function () {
        obniz.uart0.start({tx: 0, rx: 1, gnd:2, baud:115200, drive:"3v" });

        $("#send_ok").click(function() {
            obniz.uart0.send("a");
        });

        $("#send_error").click(function() {
            obniz.uart0.send("b");
        });
    };

    let plugin = new Obniz("plugin_obnizID");
    plugin.onconnect = async function () {
        plugin.plugin.onreceive = data => {
            console.log(`uart error data : ${data}`);
        };
    };
</script>

現状ボタンを用いてテストしていますが、イメージできたでしょうか?
プラグイン側でプログラムを組めば容易にデータによって処理を変えてobniz.js側にメッセージを送れます。

このように工夫することにより通信容量を抑えたり、高速なデータのやり取りが可能になります。ぜひプラグインを活用してみてください。