Skip to main content

BLEデバイス との 任意のタイミングでの通信について

Comments

2 comments

  • Official comment
    Yuki Sato CEO

    その関数はスキャンにより新しいペリフェラルが見つかった場合に呼ばれるもので、必ずしもその中で全ての処理を書かないといけないわけではありません。

    例えば、見つけたもの全てに接続し、成功したものは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. 任意のタイミングで接続中ペリフェラルにコマンドを送信する。

    のようになります。

  • Eisaku

    ご指摘の通り

    obniz.onloop = async () => {} を利用することで、任意のタイミングでコマンドを送れるようになりました。

    ありがとうございました。

     

    0

Please sign in to leave a comment.