Smart gadget SHT4x を使って電子百葉箱を作る ⑤ ラズパイでセントラル
Arduinoではないですが、ラズパイRaspberry Pi Zero 2 Wをセントラルにします。
●ライブラリのインストール
$ sudo pip install bluepy
BLEペリフェラルがアドバタイジングしているデバイスを見つけるスキャナを動かします。
https://github.com/IanHarvey/bluepy/blob/master/bluepy/blescan.py
blescan.pyの名称で保存します。
$ sudo python blescan.py
Smart gadget SHT4x(SHT40 Gadget)を見つけてきました(初めてのときは、ボタンを押す)。アドレスは、fb:b0:25:a6:9c:d9です。
●環境
- Raspberry Pi Zero 2 W (512Mバイト)
- 802.11b/g/n 無線LAN、Bluetooth 4.2 /BLE、オンボード・アンテナ
- OS Raspberry Pi OS(32ビット)5.15.61(Release date: September 6th 2022)
- Python3 3.9.2
- bluepyライブラリ 1.3.0
●セントラルのプログラム
デバイスのアドレスの一致でSmart gadget SHT4xを見つけます。
送られてくる実数は、IEEE-754のフォーマットで、単精度浮動小数点数の形式:binary32です。リトル・エンディアンなので、 struct.unpack('<f' で実数に戻します。
何らかの理由で接続が切れたら、エラー表示をするだけです。
from bluepy import btle
import struct
import time
T_Characteristic_UUID = "00002235-b38d-4985-720e-0f993a68ee41"
H_Characteristic_UUID = "00001235-b38d-4985-720e-0f993a68ee41"
deviceAddr = "fb:b0:25:a6:9c:d9"
peri = btle.Peripheral()
peri.connect(deviceAddr, btle.ADDR_TYPE_RANDOM)
print('connect')
Temp = peri.getCharacteristics(uuid=T_Characteristic_UUID)[0]
Humi = peri.getCharacteristics(uuid=H_Characteristic_UUID)[0]
while 1:
try:
readTemp = Temp.read()
temperature = struct.unpack('<f', readTemp)[0]
print(round(temperature,2))
readHumi = Humi.read()
humidity = struct.unpack('< f', readHumi)[0]
print(round(humidity,1))
except btle.BTLEException:
print('err! continue')
print("")
time.sleep(5)
peri.disconnect()
実行中の様子です。