接続先のBLEペリフェラルに含まれるサービスとキャラクタリスティクスへのアクセス方法について。
obniz.jsでは接続完了後に自動的にペリフェラルの持つサービスとそれに紐づくキャラクタリスティクス・ディスクリプタを自動検索し、完了後に接続完了となるため、即座に全てのサービスやそれ以下に対する操作が可能です。
サービス
ペリフェラルに紐づくサービス(bleRemoteService)はperipheral.servicesに配列の形式で保存されています。peripheral.getService()を利用することでその中に含まれるあるUUIDをもつサービスの取得が可能です。
// Javascript Full Example
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の取得が可能です。
// Javascript Full Example
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);
}
}