BLE: セントラル-値の変更通知を受け取る

セントラル側からの一方的な読み書きの他にペリフェラル側から値の変更を通知する仕組みがBLEにはありNotifyと呼ばれています。

Notifyとは

Notifyはペリフェラルからセントラルに対して「このキャラクタリスティクスの値変わった」と変更を通知するための機能で、このような流れで利用できます。

  1. セントラルからペリフェラルに対して「このキャラクタリスティクスを監視したい」と設定しておきます。
  2. ペリフェラルは値が変わったら(変わってなくても)セントラルに対してNotifyを送れます。
  3. セントラルはそれを受け取ってから値を読み取ることで最新の情報を取得できます。

監視登録とデータの受け取り

実際にキャラクタリスティクスに対してnotifyを受け取るよう登録して、Notifyが来たときに値を読み取るようにプログラムするとこのようになります。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  await obniz.ble.initWait();
  var peripheral = await obniz.ble.scan.startOneWait({ localName: "Blank" });
  if(peripheral) {
    console.log("found");
    var connected = await peripheral.connectWait();
    if(connected){
      console.log("connected");
      var service = peripheral.getService("1111");
      var char = service.getCharacteristic("2222");
      char.onregisternotify = async () => {
        console.log("register finshed")
      }
      await char.registerNotifyWait((data) => {
        console.log("notify with data " + data.join(','));
      });
    }else{
      console.log("failed");
    }
  }
}

登録の解除

notifyの受け取りが不要になった場合は以下のように解除します。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  await obniz.ble.initWait();
  var peripheral = await obniz.ble.scan.startOneWait({ localName: "Blank" });
  if(peripheral) {
    console.log("found");
    var connected = await peripheral.connectWait();
    if(connected){
      console.log("connected");
      var service = peripheral.getService("1111");
      var char = service.getCharacteristic("2222");
      char.onregisternotify = async () => {
        console.log("register finshed")
        await char.unregisterNotifyWait();
        console.log("unregistrated success")
      }
      await char.registerNotifyWait((data) => {
        console.log("notify with data " + data.join(','));
      });
    }else{
      console.log("failed");
    }
  }
}


Next : BLE: Peripheral-start advertisement

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