Peripheral: サービス・キャラクタリスティクスの登録

実際に外部から接続を受け付けるためにはサービスやキャラクタリスティクスを用意してobnizに設定する必要があります。

Service/Characteristicクラス

サービスやキャラクタリスティクスは専用のクラスが用意されています。

例えば、UUIDが1234のサービスはこのように作成できます。

var service = new obniz.ble.service({ uuid : "1234" });

service.advDataにはble.advertisementで出力するのに必要なadvertisement情報が格納されているので、そのままadの出力に利用できます。

var service = new obniz.ble.service({ uuid : "1234" });
obniz.ble.advertisement.setAdvData(service.advData);

キャラクタリスティクスの作成にも同じようにuuidが必要で、さらに値をdataを使って作成します。

var characteristic = new obniz.ble.characteristic({ uuid : "7777", data: [1, 2, 3]});

登録

キャラクタリスティクスはservice.addCharacteristic()にてサービスに追加できます。またサービスはperipheral.addService()にてペリフェラルに追加できます。ペリフェラルに追加することで誰かから接続されたときにこのサービスやキャラクタリスティクスが相手から見え、読み書きできるような状態となります。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  await obniz.ble.initWait();
  var service = new obniz.ble.service({ uuid : "1234" });
  var characteristic = new obniz.ble.characteristic({ uuid : "7777", data: [1, 2, 3]});
  service.addCharacteristic(characteristic);
  obniz.ble.peripheral.addService(service);

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

接続通知

自分がペリフェラルということは実際に他のデバイスから接続されることがあります。接続されたことを知るにはperipheral.onconnectionupdatesを利用します。このプロパティに設定された関数が接続時に呼び出されます。引数には相手のアドレスや接続状態などが含まれます。設定した関数は接続時だけでなく切断時にも呼び出されます。接続時はdata.status=”connected”となり、切断時はdata.status=”disconnected”となります。

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

  obniz.ble.peripheral.onconnectionupdates = function(data){
    if (data.status === "connected") {
      console.log("connected from remote device ", data.address)
    } else if (data.status === "disconnected") {
      console.log("disconnected from remote device ", data.address)
    }
    
  };

  var service = new obniz.ble.service({ uuid : "1234" });
  var characteristic = new obniz.ble.characteristic({ uuid : "7777", data: [1, 2, 3]});
  service.addCharacteristic(characteristic);
  obniz.ble.peripheral.addService(service);

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