BLEデバイス との 任意のタイミングでの通信について
obniz BLE/Wi-FI Gateway にてBLE デバイスと通信する場合
-
Official comment
その関数はスキャンにより新しいペリフェラルが見つかった場合に呼ばれるもので、必ずしもその中で全ての処理を書かないといけないわけではありません。
例えば、見つけたもの全てに接続し、成功したものはconnectedオブジェクトに入れるようにプログラムすることで、接続中ペリフェラルにどこからでもアクセスできます。
const connected = {}
obniz.ble.scan.onfind = async (peripheral) => {
peripheral.ondisconnect = () => {
delete connected[peripheral.address];
}
await peripheral.connectWait();
connected[peripheral.address] = peripheral;
}async obniz.ble.scan.startWait();
let lastTime = Date.now();obniz.onloop = async () => {
if (lastTime + 10 * 1000 < Date.now()) { // every 10 seconds
lastTime = Date.now();
for (const p of connected) {
// every connected peripherals
}
}
}とても単純な例ですが、上記のようにすれば、10秒ごとに接続中ペリフェラルを確認できます。
任意のタイミングで接続中ペリフェラルに測定開始や終了を送る上で、まず常時接続が必要であれば1. スキャンしつづけ、発見次第接続、切断されたら再接続するようにする。
2. 接続に成功したらオブジェクトに入れるなどでどの関数からでもアクセスできるようにする。
3. 任意のタイミングで接続中ペリフェラルにコマンドを送信する。のようになります。
-
ご指摘の通り
obniz.onloop = async () => {} を利用することで、任意のタイミングでコマンドを送れるようになりました。
ありがとうございました。
0
Please sign in to leave a comment.
Comments
2 comments