メインコンテンツへスキップ

Sensing Kitの使用方法について

コメント

4件のコメント

  • 正式なコメント
    Yuki Sato CEO

    付属センサーのそれぞれの操作方法はパーツライブラリを参照ください。

    https://obniz.com/ja/doc/guides/obniz-sensing-kit/

    にて付属のセンサーを見つけることができ、それぞれ同じ型番のものがライブラリにあります。例えば温度センサーiBS01Tの場合は以下でサンプルはこのようになります。

    https://obniz.com/ja/sdk/parts/iBS01T/README.md

    let IBS01T = Obniz.getPartsClass('iBS01T');
    await obniz.ble.initWait();
    obniz.ble.scan.onfind = (p) => {
        if (IBS01T.isDevice(p)) {
            let data = IBS01T.getData(p);
            console.log(data);
        }
    };
    await obniz.ble.scan.startWait(null, { duplicate: true, duration: null });

    これらのセンサーは全てbleのadvertisementでデータを送ってくるためobnizで常時bleのスキャンを行えれば継続的にセンサー値を取得することができます。

    BLEを使って継続スキャンするとなるとnodejsでサーバー稼働させることになります。
    その場合のExampleはこのようなものになります。

    https://github.com/obniz/obniz/tree/master/examples/nodejs/peripherals/ble/mutiple-scan

    少し古いExampleなので今はより効率的な書き方がありますが、この通りで問題なく動作させることができます。

    > obniz.ble.scan.startWait() のあとに記述した obniz.onloop 内で人感センサーの getData(periph).event を読んでみたのですが、値が固定で変わらず…

    おそらく、onfindで見つかったperipheralをglobal変数として保有して、onloopでアクセスしたのだと思いますが、そのときに参照できるのは発見した瞬間のadvertisementが入っているperipheralとなります。

    advertisementでデータを飛ばすiBSシリーズのようなセンサーの場合、こちらから好きなタイミングでデータを取ることはできず数十秒に一度勝手に飛んでくる電波を拾い(advertisementを拾い)、データを解析して読み取ることしかできません。

    なので、常にスキャンし続けて、onfindで同じデバイスからデータが飛んできたときにそれを最新の値として使う という使い方になります。

    別の関数から最新の値を読み取りたい場合は、global変数にonfindで見つけたときに人感センサーなどの値を入れておき、その変数を別の場所で読み取る という方法となります。

    こちらのフォーラムの内容も参考になるかもしれません。

    https://support.obniz.com/hc/en-us/community/posts/4410480048025-BLEデバイス-との-任意のタイミングでの通信について

  • OJK

    詳細なコメントありがとうございます。

    > advertisementでデータを飛ばすiBSシリーズのようなセンサーの場合、こちらから好きなタイミングでデータを取ることはできず数十秒に一度勝手に飛んでくる電波を拾い(advertisementを拾い)、データを解析して読み取ることしかできません。

    やはりそういうことになるのですね…
    人を感知したらすぐに反応するような用途で考えていたのですが、そういった用途では使えなさそうですね。ビーコン(iBS04i)も所持しているのですが、こちらも近づいたら即反応する…という用途を考えていました。

    0
  • Yuki Sato CEO

    "即反応"の程度の問題となります。

    センサーの発信方法の話なので、obnizとはあまり関係がないのですが、例えばiBSシリーズの場合はiBS01だと以下がドキュメントです。

    https://www.ingics.com/doc/Beacon/BC0001_Sensor_Beacon_iBS01_Specification.pdf

    iBSの場合は彼らが出している専用のスマホアプリからの設定で送信間隔の変更が可能です。

    iBS04も同じです。

    http://pengyouglobal.com/documents/BLE_Beacon_iBS04_Specification.pdf

    User configurable from 100ms~1 min.
    Default: 5 s

    とあるので、100msec間隔に設定すれば秒間10は飛ぶので期待するような反応ができると思います。
    そこまで早くなると今度はobnizを含めたインターネット側の遅延の方が問題になるかもしれませんが、インターネットを使う限り発生する遅延になるので避けるのが困難です。

    0
  • OJK

    ありがとうございます。

    人感センサ(iBS02PIR)の仕様も見つけました。
    https://www.ingics.com/doc/Beacon/BC0004_Sensor_Beacon_iBS02_Specification.pdf

    Advertising intervalの初期値は10sとなっているのですが、数十秒から数分待つこともあるので、Node.jsの環境で試してみます。

    0

サインインしてコメントを残してください。