CO2センサを使う⑩ラズパイでBLEセントラル
ラズパイでセントラルのプログラムを動かす事例は、次の記事で解説しました。
センサ・シリーズ 温湿度①SHT31 その5 BLEセントラル
●環境
- Raspberry Pi 4 ModelB 2MB
- OS Raspberry Pi OS(32ビット)5.10.17
- Python3 3.7.3
- bluepyライブラリ 1.3.0
●bluepyのインストール
ここでは、セントラルのプログラムを書くために、bluepyライブラリをインストールします。このBLEライブラリは、pythonでセントラルのプログラムだけが書けます。
ラズパイ4は最新の状態にしておきます。次の2点をインストールします。
$ sudo apt-get install python3-pip libglib2.0-dev $ sudo pip3 install bluepy |
GitHubにあるサンプルblescan.pyをエディタに読み込み、scan.pyの名前で保存します。
$ sudo python3 scan.py |
で、アドバタイジングしているBLEペリフェラルを探します。見つけてきました。Device Addrをメモしておきます。
上記のscan.pyでデバイスのアドレスがわかりました。なので、アドレスで直接コネクトします。見つからなかったときのエラー処理は記述していません。
●プログラム
from bluepy import btle
import struct
import time
# Service_UUID = "6e400001-b5a3-f393-e0a9-e50e24dcca9e"
CO2_UUID = "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
deviceAddr = "30:AE:A4:F8:0F:D2"
peri = btle.Peripheral()
peri.connect(deviceAddr, btle.ADDR_TYPE_PUBLIC)
print('connect')
co2Information = peri.getCharacteristics(uuid=CO2_UUID)[0]
while 1:
try:
readCo2 = co2Information.read()
CO2 = struct.unpack('<L', readCo2)[0]
print(CO2)
except: # BrokenPipeError: [Errno 32] Broken pipe
print('err! continue')
time.sleep(2)
peri.disconnect()
30分ぐらいエラーなしで動くこともあります。使い方に問題があるのかもしれませんが、エラーでよく止まります。短時間の接続確認のような使い方がよいように思えます。