InkbirdのBluetooth温度湿度計のアドバタイズデータから温度・湿度データを読み取る
目次
はじめに
以前、Windows10からINKBIRD温度湿度計データをBLE通信で取得するではBLEのGATT通信を使い、Inkbirdの温度湿度計からリアルタイムデータを取得しました。
その後、Inkbirdの温度湿度計がBLEでアドバタイズしているデータから温度湿度データを取得することができましたので、その実装例を公開します。
使用した機器
Windows10からINKBIRD温度湿度計データをBLE通信で取得すると同じです。
InkbirdのBluetooth温度湿度計
PC
Blutooth が使用可能な PC
事前に[Windows スタート]>[設定]>[デバイス]から Bluetooth を有効にしておきましょう。 なお、今回使用した PC はWindows10 Bluetoothの有効化
- ASUS UX310U NotebookPC
CPU: Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2.71 GHz
OS: WIndows 10 Pro 22H2
です。
- ASUS UX310U NotebookPC
スマホ
- Android もしくは iPhone + nRF Connect for Mobile アプリ
事前に Nordic Semiconductor 社のnRF Connect for Mobile https://www.nordicsemi.com/Products/Development-tools/nrf-connect-for-mobileをインストールしておきましょう。
準備
Inkbird温度湿度計のアドバタイズデータを確認する
スマホにインストールしたnRf Connectアプリを使い、Inkbird温度湿度計がBLE通信でアドバタイズしているデータを確認します。
- アプリを立ち上げSCANNERタブでデバイスをスキャンします。そして、spsと表示されたデバイスをタップします。
nRF Connectアプリでデバイスをスキャンする
- すると詳細が表示されるので、[RAW]をクリックします。
Inkbirdデバイスspsを表示する
- Raw data欄に表示されたデータ
0x0201060302F0FF04097370730AFF8208D71800E446E08
がアドバタイズデータです。このデータの詳細がDetailsに表示されています。この中のLEN:10の行に表示されているTYPE:0xFF
,VALUE:0x8208D71800E4465E08
がmanufacturerデータです。ITH-12Sのアドバタイズデータ
Pythonスクリプト作成
bleakパッケージのAPI調査
Python Bleakパッケージを利用してmanufacturerデータを取得します。
- BleakScanner.discover()の引数return_advをTrueにして呼びだすことで、アドバタイズデータを取得できます。
- 今回使用しているbleakパッケージのstable版(v.0.19.5)のドキュメントを確認すると、discover(return_adv=Ture)時の戻り値は検出したBLEDeviceをキー、AdvertisementDataをバリューとする辞書型データです。
- そして同ドキュメントのAdvertisementDataを調べるとmanufacturer_dataが[int,bytes]の辞書型データになるようです。
作成したPythonスクリプト
以上から、実際にスクリプトを作成し試した結果、下記のような実装をすることで温度・湿度のデータを取得することができました。
実行結果
(venv38) PS D:\projects\ble> python .\ble_adv_inkbird.py
49:22:08:15:10:2B
rssi:-57, temp:21.85, humid:55.45, now:2023-01-06 00:23:16.288976
-----------------
49:22:03:25:03:ED
rssi:-65, temp:21.59, humid:58.76, now:2023-01-06 00:23:16.288976
-----------------
(venv38) PS D:\projects\ble>
最後に
今回BLE通信のアドバタイズデータをスマホnRF Connectのように取得できれば、そのバイトデータを処理すればよいと思い調査しました。しかし、bleakパッケージでは見つけることができませんでした。そこで、イマイチですが今回のような形の実装になりました。
もしかしたら、Inkbirdのアドバタイズデータが標準に基づいていない部分があるのでしょうか?
BLE通信についての知識と経験が浅いので、今後も精進しようと思います。
購入先 Amazon https://www.amazon.co.jp/gp/product/B08WWPSTRS ↩︎
購入先 Amazon https://www.amazon.co.jp/gp/product/B09PDMH3FQ ↩︎