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

 Scan/Discoverのページにある、


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))

 実行結果です。

前へ

CO2センサを使う⑧AdafruitのSCD-30ボードをESP32につないでBLEペリフェラルに

次へ

CO2センサを使う⑩ラスパイでBLEセントラル