Windows10からINKBIRD温度湿度計データをBLE通信で取得する
目次
はじめに
今回は Bluetooth 機能がついた温度・湿度計を Bluetooth 経由で PC と接続し、温度・湿度データを取得します。
これまで Bluetooth と言えば、iPhone を車載オーディオに接続し音楽を聞いたり、ワイヤレスヘッドフォンをノート PC と接続したり・・・、音楽用に使うイメージしかありませんでした。 いつものように Amazon のサイトを見ていると、INKBIRD という会社から Bluetooth 通信機能がついた温度・湿度計が発売されていることに気付きました。
そこで、Windows10 のノート PC の Bluetooth を使い、INKBIRD 温度・湿度計から温度・湿度データを取得してみます。
使用した機器
購入したもの
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をインストールしておきましょう。
準備
Python 仮想環境の構築
Windows10 上にインストールした python3.8 を使い、仮想環境を作成し、bleak パッケージ https://pypi.org/project/bleak/ をインストールします。なお、私がインストールした bleak のバージョンは 0.19.5 でした。
PS D:\projects\ble> python -m venv venv38
PS D:\projects\ble> .\venv38\Script\activate
(vnev28) PS D:\projects\ble> pip install bleak
省略
(venv38) PS D:\projects\ble> pip show bleak
Name: bleak
Version: 0.19.5
Summary: Bluetooth Low Energy platform Agnostic Klient
Home-page: https://github.com/hbldh/bleak
Author: Henrik Blidh
Author-email: henrik.blidh@nedomkull.com
License: MIT
Location: d:\projects\ble\venv38\lib\site-packages
Requires: async-timeout, bleak-winrt
Required-by:
(venv38) PS D:\projects\ble>
INKBIRD 温度湿度計を稼働させる
Amazon から INKBIRD の温度湿度計が届いたら、電池を入れて稼働させます。
- ITH-12S はボタン電池 CR2032 が付属していますので、上下(+-)を間違えないように取り付けます。
なお、電池を取り付けたらパネル右上の Bluetooth 通信が ON になっているこlinkとを確認します。もし ON になっていない場合は、Bluetooth のボタンを何度か押して ON にします。ITH-12Sバッテリ取付
ITH-12S Bleutooth通信ON
- IBS-TH2 は単 4 電池が 2 本必要です。付属のドライバーを使い、IBS-TH2 の裏蓋を開け単 4 電池を装着します。
IBS-TH2バッテリ取付
INKBIRD 温湿度計の Bluetooth 通信内容調査
MAC アドレス調査
Android または iPhone にインストールした nRF Connect を起動し、バッテリを入れた温度湿度計の MAC アドレスを確認します。下図の sps と表示されている欄に記載されている"49:22:**:**:**:**“の 16 進の数値が MAC アドレスです。このように 2 つ同時に稼働させると 2 つのどちら INKBIRD の MAC アドレスかわかりませんので、ITH-12S は Bluetooth 通信をボタンで OFF にし、MAC アドレスを確認します。nRF ConnectでMACアドレス確認
データ取得用 UUID 調査
UUID 共通部分の調査
温度・湿度データ取得用コードの調査
温度湿度データ取得のトライ
GitHub の bleak リポジトリ https://github.com/hbldh/bleakに実装例 https://github.com/hbldh/bleak/tree/develop/examplesが公開されています。 これらを参考にしながら、前節で調査した MAC アドレスおよび UUID 共通部分の先頭4バイトをデータ取得用 UUID に置き換えて、温度・湿度データの取得できるかトライします。
トライ用に作成した Python スクリプト
実行結果
実行すると、下記のように2つのINKBIRDから温度・湿度が取得できました。
(venv38) PS D:\projects\ble> python .\inkbird_ble.py
.\inkbird_ble.py:10: FutureWarning: is_connected has been changed to a property. Calling it as an async method will be removed in a future version
x = await client.is_connected()
Connected: True
bytearray(b'\x0f\t\xb5\x15\x00l\xeb')
23.19
55.57
(0, 108, 235)
Connected: True
bytearray(b'\x84\x08j\x17\x00\xf9\x92')
21.8
59.94
(0, 249, 146)
(venv38) PS D:\projects\ble>
最後に
Google で inkbird pythonと検索すると、IBS-TH1の温度湿度データをLinuxのbluepyを使って取得する記事がいくつか出てきます。
- https://qiita.com/c60evaporator/items/e7c3b2c65ad1664c832f
- https://qiita.com/junara/items/f396c1c4c15c78cde89f
- https://zenn.dev/yh1224/articles/ld2arlkd2v6azz4xg
今回はこれらを参考にWindows10でbluepyを試しましたが、そもそもbluepyがインストールすることができませんでした。
そんな中で見つけたのが、下記の記事でした。
ここではWindows10でbleakを使い、BLE通信でデータを取得する方法が記載されていました。今回のBLE通信の部分は実質同じものです。
今回苦労したのは、実測データを取得するためのUUIDを調べることでした。 この記事にはあっさりと書いていますが、実際には上から順に全て試しながら調べた結果です。
しかしながら、この記事を書きながら再度Google検索をしていたところ、なっ!なんとINKBIRDのアドバタイズパケットに温度・湿度データの他にもバッテリーレベルを取得している実装3がGitHub上のCUSTOM_COMPONENTS/BLE Monitorのリポジトリhttps://github.com/custom-components/ble_monitorにて公開されていることがわかりました。 CUSTOM_COMPONENTSのリポジトリを参考にアドバタイズパケットから温度・湿度データが取得できたら、また報告します。
購入先 Amazon https://www.amazon.co.jp/gp/product/B08WWPSTRS ↩︎
購入先 Amazon https://www.amazon.co.jp/gp/product/B09PDMH3FQ ↩︎
アドバタイズパケットから温度湿度等を取得する実装は下記公開されています。https://github.com/custom-components/ble_monitor/blob/master/custom_components/ble_monitor/ble_parser/inkbird.py ↩︎