具体的なプラグインを用いた拡張機能を作成してみましょう。
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側にメッセージを送れます。
このように工夫することにより通信容量を抑えたり、高速なデータのやり取りが可能になります。ぜひプラグインを活用してみてください。