Central:ペアリング

自動でペアリングを行う

obniz.jsにはペアリングを自動で行う仕組みが入っています。

characterisicsやdescriptorを読み書きする際に、認証エラーが帰ってきた場合、obniz.jsは自動でペアリングを行おうと試みます。自動で行うので、設定は不要です。その代わり、passkey入力やbonding(鍵情報の保存)を行うことはできません

自動ペアリング時の設定はこちらのようになっています

  • IO capability: NoInputNoOutput
  • OOB data: Authentication data not present
  • Authentication requirement: Bonding – No MITM
  • Max encryption key size: 16octet

これ以外の設定(passkeyを入力したいなど)の場合は、マニュアルのペアリングを実行してください。

手動でペアリングを行う

手動でペアリングを行う場合は、peripheral.pairingWait関数を使用します。
オプションで引数がありますが、何も指定しなくても動作します。


await obniz.ble.initWait({});
obniz.ble.scan.onfind = async function(peripheral){
  if(peripheral.localName == "my peripheral"){
      await peripheral.connectWait();
      console.log("success");
      const keys = await peripheral.pairingWait();
      // Please store `keys` if you want to bond.
   }
}
await obniz.ble.scan.startWait();

pairingWait関数は文字列を返します。これペアリングで交換した鍵情報です。2回目以降のペアリングで、1回目のペアリング時の鍵情報を使用する場合は、pairingWait関数の引数に指定します


const keys =  "xxxxxx"; 
await obniz.ble.initWait({});
obniz.ble.scan.onfind = async function(peripheral){
  if(peripheral.localName == "my peripheral"){
      await peripheral.connectWait();
      console.log("success");
      await peripheral.pairingWait({keys: keys});
      console.log("paired");
   }
}
await obniz.ble.scan.startWait();

passkeyの数字を使用してペアリングを行う

数字を入力してペアリングを行う場合、pairingWaitの引数にpasskeyCallbackを指定します。passkeyが必要になった段階でコールバック関数が呼ばれますので、ユーザーからの入力を受け付けてreturnしてください

  await obniz.ble.initWait({});
  obniz.ble.scan.onfind = async function(peripheral) {
    console.log(peripheral.localName);
    if (peripheral.localName === "my peripheral") {
      await peripheral.connectWait();
      console.log("success");
      let passkeyCallback = async () => {
        //HTML prompt
        const pass = 016393;
        return pass;
      };
      // pairing with user input passkey.
      await peripheral.pairingWait({ passkeyCallback });
      console.log("paired");
    }
  };
  await obniz.ble.scan.startWait();