Transmit/Receive Datas

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

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

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

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

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

DevkitCobniz
16(RX)0(TX)
GND3(GND)
#include <obniz.h>
void setup() {
  Serial.begin(115200);
  obniz.start();

  //RX:16 TX: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側にメッセージを送れます。

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