Sensing Kitの使用方法について
基本的な質問で恐縮なのですが、Sensing Kitに付属している人感センサーなどのセンサーの使用方法やサンプルプログラムなどについてまとめられているウェブページ等はありますでしょうか。
obnizのリファレンスやWebApp(https://obniz.com/ja/webapp/2330)のプログラムを見て、ペリフェラルを検出するところまではできるのですが、例えば、人感センサー(ibs02PIR2)の値を継続的に取得する方法がわかりません。
-
正式なコメント
付属センサーのそれぞれの操作方法はパーツライブラリを参照ください。
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デバイス-との-任意のタイミングでの通信について
-
詳細なコメントありがとうございます。
> advertisementでデータを飛ばすiBSシリーズのようなセンサーの場合、こちらから好きなタイミングでデータを取ることはできず数十秒に一度勝手に飛んでくる電波を拾い(advertisementを拾い)、データを解析して読み取ることしかできません。
やはりそういうことになるのですね…
人を感知したらすぐに反応するような用途で考えていたのですが、そういった用途では使えなさそうですね。ビーコン(iBS04i)も所持しているのですが、こちらも近づいたら即反応する…という用途を考えていました。0 -
"即反応"の程度の問題となります。
センサーの発信方法の話なので、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 -
ありがとうございます。
人感センサ(iBS02PIR)の仕様も見つけました。
https://www.ingics.com/doc/Beacon/BC0004_Sensor_Beacon_iBS02_Specification.pdfAdvertising intervalの初期値は10sとなっているのですが、数十秒から数分待つこともあるので、Node.jsの環境で試してみます。
0
サインインしてコメントを残してください。
コメント
4件のコメント