Windows10でBLE SwitchBot温湿度計
SwitchBot温湿度計は、アマゾンで安価に入手できます。この記事では、matlabでアクセスしました。
CO2センサを使う⑥Windows10でBLEセントラル
の記事では、Windows10用BLEライブラリbleakを利用しました。この二つの記事から、ここでは、Windows10のPython3を用いてSwitchBot温湿度計の温度と湿度を読み出し、グラフを描きます。
●データの形式
この資料から、
- 0x57 Magic Number
- 0x0f 拡張コマンドを送るよ
- 0x31 ペイロード;Read the Display Mode and Value of the Meter
の3バイトを送りnotifyにすると、温度と湿度を送り返してくれます。送られてくるのは、次の4バイトです。
- ステータス 1 – OK
- 温度の小数点部分 0~9の数値
- 温度 MSBは符号、残りが0~127℃の数値
- 湿度 整数0~99
●ライブラリのインストール
コマンドプロンプトを立ち上げます。
pip3 install bleak
すでに古いバージョンが入ってたら、次のように最新の状態にします。
pip3 install --upgrade bleak
●プログラム
温度は零下を無視しています。ここライブラリでNotifyにする方法はわかりません。
アドレスは、「CO2センサを使う⑥Windows10でBLEセントラル」のscan.pyで取得しました。
アドレスの一致でつながると、サービスUUIDは使われないようです。command_CharacteristicUUID は書き込みのとき、data_CharacteristicUUID は読み出しのときに使われるキャラクトリスティックです。
import asyncio
from bleak import BleakClient
import time
import matplotlib.pyplot as plt
address = "D6:D3:6E:EF:4B:A2"
Bot_ServiceUUID = "CBA20D00-224D-11E6-9FB8-0002A5D5C51B";
data_CharacteristicUUID = "CBA20003-224D-11E6-9FB8-0002A5D5C51B";
command_CharacteristicUUID = "CBA20002-224D-11E6-9FB8-0002A5D5C51B";
async def run(address):
async with BleakClient(address) as client:
count = 20
Temperature_g=[]
Humidity_g=[]
x_g=[]
for x in range(1,count):
write_byte = bytearray(b'\x57\x0f\x31')
await client.write_gatt_char(command_CharacteristicUUID, write_byte)
data = await client.read_gatt_char(data_CharacteristicUUID)
# print(data)
Temperature_I = data[1]
Temperature_D = data[2] & 0b01111111
Humidity = data[3]
print("{:d}.{:d}`C {:d}%".format(int(Temperature_D), int(Temperature_I), int(Humidity)))
Temperature_g.append(Temperature_D)
Humidity_g.append(Humidity)
x_g.append(x)
time.sleep(2)
fig,ax1 =plt.subplots()
ax2 = ax1.twinx()
ax1.plot(x_g, Temperature_g, marker = "v", color = "red", label="Temperature")
plt.xlabel("time")
ax1.set_ylabel("temp [`C]")
plt.grid()
ax2.plot(x_g, Humidity_g, marker = "o", color = "green", label="Humidity")
ax2.set_ylabel("Humidity [%]")
plt.show()
loop = asyncio.get_event_loop()
loop.run_until_complete(run(address))
●実行
SwitchBot温湿度計は、本体の裏面にある小さな押しボタンを数秒押すと、アドバタイジング状態になります。