BLE: ペリフェラル-値の更新を相手に伝える

obnizをBLEのペリフェラルとして使う場合、他の端末がBLEでobnizデバイスに接続して値の読み書きを行うことになります。
その値はBLE経由で相手が書き換えることも出来ますし(書き込み権限があれば)、obniz.js経由で書き換えることも可能です。
しかし、obniz.jsで書き換えた場合はBLEで繋がっている相手にその変更が伝わりません。
Notifyを使えば相手に「このキャラクタリスティクスの値が変わったよ!」と伝えることができます。

characteristic.notify()

以下の関数を使うことでnotifyを接続中のデバイスに送ることができます。

characteristic.notify();

ただし、Notifyを送れるcharacteristicsはnotifyが送れるような属性を持っている必要があります。
具体的にはpropertyで"notify"を持っている必要があり、ディスクリプタにCCCDというのが存在する必要があります。

いかが一例です。これはUUIDが7777で、[1,2,3]というvalueを持つキャラクタリスティクスです。
読み書きに対応しており、さらにnotifyに対応しています。

var characteristic = new obniz.ble.characteristic({
  uuid : "7777",
  data: [1, 2, 3],
  properties : ["read","write","notify"],  // add notify properties
  descriptors: [
    {
      uuid: '2902', //CCCD
      data: [0x00, 0x00],  //2byte
    }, 
  ],
});

実際に上記のcharacteristicに関するnotifyを送るのは以下のようになります。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {

  await obniz.ble.initWait();
 // create servce & characteristics
  var service = new obniz.ble.service({ uuid : "1234" });
  var characteristic = new obniz.ble.characteristic({
    uuid : "7777",
    data: [1, 2, 3],
    properties : ["read","write","notify"],  // add notify properties
    descriptors: [
      {
        uuid: '2902', //CCCD
        data: [0x00, 0x00],  //2byte
      }, 
    ],
  });
  service.addCharacteristic(characteristic);
  obniz.ble.peripheral.addService(service);

  // advertisement
  obniz.ble.advertisement.setAdvData(service.advData);
  obniz.ble.advertisement.setScanRespData({
    localName : "obniz BLE",
  });
  obniz.ble.advertisement.start();

  // on connection
  obniz.ble.peripheral.onconnectionupdates = function(data){
    console.log("remote device ", data.address, data.status)

    setTimeout(async function(){
      await characteristic.writeWait([0xFF])
      characteristic.notify();
    }, 10000)
  };
}


Next : Debug Method of obniz.js

You will Get in Few Days

Circuit for Starter “obniz Board” is available on Amazon and other online stores.
You can get it at below

Our products and resellers

Forum

Visit our developer’s forum to discuss and discover technologies.

Forum

Contact

Feel free to contact out support and technical team.

Contact us