Central: サービスとキャラクタリスティクス

接続先のBLEペリフェラルに含まれるサービスとキャラクタリスティクスへのアクセス方法について。

obniz.jsでは接続完了後に自動的にペリフェラルの持つサービスとそれに紐づくキャラクタリスティクス・ディスクリプタを自動検索し、完了後に接続完了となるため、即座に全てのサービスやそれ以下に対する操作が可能です。

サービス

ペリフェラルに紐づくサービス(bleRemoteService)はperipheral.servicesに配列の形式で保存されています。peripheral.getService()を利用することでその中に含まれるあるUUIDをもつサービスの取得が可能です。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  await obniz.ble.initWait(); 
  var target = {
      uuids: ["fff0"],
  };
  var peripheral = await obniz.ble.scan.startOneWait(target);
  if(!peripheral) {
      console.log('no such peripheral')
      return;
  }
  try {
    await peripheral.connectWait();
    console.log("connected");
    console.log("number of services=" + peripheral.services.length);
    var service = peripheral.getService("1800")
    if (!service) {
        console.log("service not found")
        return;
    }
    console.log(service.uuid) // => 1800
  } catch(e) {
    console.error(e);
  }
}

キャラクタリスティクス

サービスに紐づくキャラクタリスティクス(bleRemoteCharacteristics)も似た形で取得可能です。service.characteristicsに配列の形式で保存されており、service.getCharacteristic()によりUUIDを用いたcharacteristicの取得が可能です。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  await obniz.ble.initWait(); 
  var target = {
      uuids: ["fff0"],
  };
  var peripheral = await obniz.ble.scan.startOneWait(target);
  if(!peripheral) {
      console.log('no such peripheral')
      return;
  }
  try {
    await peripheral.connectWait();
    console.log("connected");
    console.log("number of services=" + peripheral.services.length);
    var service = peripheral.getService("1800");
    var c = service.getCharacteristic("fff0");
    console.log(c.uuid); // => "fff0"
  } catch(e) {
    console.error(e);
  }
}