複数台のobnizBLEGatewayを使用する場合も、システムは
ほとんど1台のときと変わりません。
システム構成としてはこちらのようになります。
基本的なプログラムの流れは下記のようになります。
- 複数のobnizデバイスとの接続を確立する
- BLEシステムを初期化する
- 周辺BLEデバイスをスキャンを実行する
- スキャン結果をデータベースなどに保存する
- 3〜4を繰り返す
具体的に書いてみるとこちらのようになります。
const Obniz = require('obniz');
var obnizIdList = [
"OBNIZ_ID_A_HERE",
"OBNIZ_ID_B_HERE",
"OBNIZ_ID_C_HERE",
"OBNIZ_ID_D_HERE"
]
for(let obnizId of obnizIdList){
var obniz = new Obniz(obnizId);
// obnizデバイスとの接続を確立する
obniz.onconnect = async function () {
//BLEシステムを初期化する
await obniz.ble.initWait();
obniz.ble.scan.onfind = async function(peripheral){
console.log(peripheral.localName);
// スキャン結果をデータベースなどに保存する
sendToDatabase(peripheral);
};
obniz.ble.scan.onfinish = async function(peripherals, error){
console.log("scan timeout!")
//周辺BLEデバイスをスキャンを実行する
// 30秒で終了してonfinishが呼ばれます
await obniz.ble.scan.startWait();
};
// 周辺BLEデバイスをスキャンを実行する
// 30秒で終了してonfinishが呼ばれます
await obniz.ble.scan.startWait();
}
}
function sendToDatabase() {
}
1台のときのプログラムとと殆ど変わらないことがわかるでしょうか。
こちらのプログラムも1台のときと同様に、カスタマイズすることでより細かいコントロールを行うことができます。
カスタマイズする際は、obnizjsのBLEの使い方を参考にしてください。
たとえばこちらの記事がそれぞれ参考になります
スキャン結果を絞りたい場合
条件付き検索でScanTargetを設定する通信量を削減したい
デバイスでフィルタリングをして通信量を削減する
- 30秒おきではなく、ずっとスキャンをしたい
条件付き検索でScanSettingを設定する
- 同一デバイスからのアドバタイズメントを何度も受け取りたい
条件付き検索でScanSettingを設定する