CO2センサを使う⑨Windows10でBLEセントラル
Windows10(21H1)をセントラルにし、ESP32のペリフェラルにつなぎます。Pythonのbleakライブラリを利用します。執筆時点で、0.12.1(2021-07-07)でした。
第6回目と同じですが、PCは再インストールしています。そのため、pythonは3.9だけが入っているので、python3やpip3という表現は出てきません。
●ライブラリのインストール
コマンドプロンプトを立ち上げ、次のコマンドでライブラリをインストールします。
pip install bleak
●動作確認scan
import asyncio
from bleak import BleakScanner
async def run():
devices = await BleakScanner.discover()
for d in devices:
print(d)
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
をscan.pyで保存します。実行すると、ESP32ボードが見えます。アドレスを保存します。
●プログラム
アドレスの一致でデバイスを見つけます。送られてくるリトル・エンディアンの32ビット整数は、struct.unpack('<L', で整数に戻します。プログラムは、esp32_co2.pyで保存しました。
import struct
import asyncio
from bleak import BleakClient
address = "30:AE:A4:F8:0F:D2"
CO2_UUID = "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
async def run(address):
async with BleakClient(address) as client:
data_CO2 = await client.read_gatt_char(CO2_UUID)
CO2 = data_CO2[0:]
CO2 = struct.unpack('<L', CO2)[0]
print("{}ppm ".format(CO2))
loop = asyncio.get_event_loop()
loop.run_until_complete(run(address))
実行結果です。
●複数回測定してグラフを描く
グラフ用のライブラリをインストールします。
pip install matplotlib
20回測定をして、グラフを描きます。
import struct
import asyncio
from bleak import BleakClient
import time
import matplotlib.pyplot as plt
address = "30:AE:A4:F8:0F:D2"
CO2_UUID = "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
async def run(address):
async with BleakClient(address) as client:
count = 20
CO2_g=[]
x_g=[]
for x in range(1,count):
data_CO2 = await client.read_gatt_char(CO2_UUID)
CO2 = data_CO2[0:]
CO2 = struct.unpack('<L', CO2)[0]
print("{}ppm ".format(CO2))
CO2_g.append(CO2)
x_g.append(x)
time.sleep(1)
plt.plot(x_g, CO2_g, label="CO2")
plt.xlabel("time")
plt.ylabel("CO2 [ppm]")
plt.grid()
plt.show()
loop = asyncio.get_event_loop()
loop.run_until_complete(run(address))
実行結果です。