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

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

characteristic.notify()

実は相手に送信するのはとても簡単で、

characteristic.notify();

これを呼ぶことでBLEで繋いでいる相手にNotifyを送ることが出来ます。
ただし、Notifyを送れるcharacteristicsはそれ用の属性を持っている必要があります。
具体的に言うと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
    }, 
  ],
});

これを使って、相手が接続したら数秒後に値を書き換えてNotifyを送るというのをやってみましょう。

接続後に更新・Notify

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

 // 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)
  };
}

早速プログラムを動かして、LightBlueなどアプリから接続してみましょう。前回までと同じく「obniz BLE」というデバイスです。
このプログラムでは誰かが接続した10秒後に値を[1,2,3]から[0xFF]に書き換えて、notifyを送ります。
なのでアプリでは繋いだらすぐに「Listen for notifications」をクリックして、notifyを受け取れるようにしておきます。

接続して、キャラクタリスティクスを見てみると値はこのようになっていると思います。

10秒経たないうちにListen for notificationsをクリックして待ちます。
すると、接続から10秒後に、このように値の変更が通知されると思います。

これを使えば接続してきた相手に新しい値があることを教えることが出来ます。
Notifyは値が変わってなくても送信可能ですので、
何かのきっかけをセントラル側に対して送ることにも使えます。



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