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分ぐらいエラーなしで動くこともあります。使い方に問題があるのかもしれませんが、エラーでよく止まります。短時間の接続確認のような使い方がよいように思えます。

前へ

CO2センサを使う⑨Windows10でBLEセントラル

次へ

Arduino夏休み<架空>ワークショップ②「温度計を作る」 3回で読み切りの1回目 パーツの選定