はじめに
本記事は、Omron環境センサ(BAG型)の記事と同内容を、
Omron環境センサ(USB型)で実施した記事です。
環境センサとは?
Omronの環境センサは、温度、湿度、照度、気圧、騒音など、
複数のセンサーをひとまとめにしたデバイスです。
(左:BAG型の2JCIE-BL01、 右:USB型の2JCIE-BU01)
今回は、右側のUSB型のデータをRaspberryPiから取得します。
必要なもの
・RaspberryPi(今回はPi3Model Bを使用)
・Python実行環境(今回はpyenvでPython3.7.6使用)
・Googleアカウント(スプレッドシートを使うのに必要)
・Omron 環境センサ(USB型の2JCIE-BU01)
手順
①RaspberryPiとセンサのBluetooth接続確認
②環境センサの測定値をPythonで取得
③PythonからGASのAPIを叩いてスプレッドシートにデータ書き込み
④スクリプトの定期実行
詳細
①RaspberrypiとセンサのBluetooth接続確認
環境センサの認識確認
・環境センサのUSBポートへの接続
環境センサをUSBポートに差し込み、ランプが一瞬点くことを確認してください
・Bluetooth機器のスキャン
RaspberryPiで下記コマンドを実行
sudo hcitool lescan
LE Scan ...
CC:DD:BB:AA:66:77 Rbt
というように、「Rbt」という名前がでてきたら、これが環境センサのMACアドレスです。
出てこなければUSBの接触やRaspberryPiのBluetooth有効を確認してください。
②環境センサの測定値をPythonで取得
bluepyでの認識確認
bluepyは、PythonでBluetooth Low Energy(BLE)にアクセスするためのライブラリです(クラス定義)
電池のないUSB型では、BAG型のようなブロードキャストモードへの変更が不要なため、作業の手間は少なく済みます。
・必要なパッケージのインストール
下記をインストールします
sudo apt install libglib2.0-dev
・bluepyのインストール
下記コマンドでpipでインストールします
pip install bluepy
・bluepyに権限を付与
スキャンにはbluepyにSudo権限を与える必要があります。
bluepyのインストールされているフォルダに移動し、
cd ~.pyenv/versions/3.7.6/lib/python3.7/site-packages/bluepy
※上記は、pyenvでPython3.7.6をインストールした場合。
環境により場所は異なるので注意(参考)
下記コマンドでbluepy-helperにSudo権限を付与する
sudo setcap 'cap_net_raw,cap_net_admin+eip' bluepy-helper
センサ値取得スクリプトの作成
センサ値取得のため、下記のスクリプトを作成します
from bluepy import btle
import struct
def get_env_usb_data(macaddr):
peripheral = btle.Peripheral(macaddr, addrType=btle.ADDR_TYPE_RANDOM)
characteristic = peripheral.readCharacteristic(0x0059)
(seq, temp, humid, light, press, noise, eTVOC, eCO2) = struct.unpack('<Bhhhlhhh', characteristic)
sensorValue = {
'SensorType': 'Omron_USB_EP',
'Temperature': temp / 100,
'Humidity': humid / 100,
'Light': light,
'Pressure': press / 1000,
'Noise': noise / 100,
'eTVOC': eTVOC,
'eCO2': eCO2
}
return sensorValue
ブロードキャストモードのBAG型ではアドバタイズデータからセンサデータを取得していましたが、
コネクトモードのUSB型ではPeripheralクラスによる通信でデータを取得します。
メインスクリプトの作成
センサ値取得スクリプトを呼び出すため、メインスクリプトを作成します
from bluepy import btle
import omron_env_usb_connect
######オムロン環境センサ(BAG型)の値取得######
PERIPHERAL_MAC_ADDRESS = '①で取得したMACアドレス'
sensorValue = omron_env_usb_connect.get_env_usb_data(PERIPHERAL_MAC_ADDRESS)
#試しに温度を表示
print(sensorValue['Temperature'])
コンソールから実行してみます
python omron_env_toSpreadSheet.py
26.48
これで、Pythonでセンサ測定値を取得することができました。
なおユーザーズマニュアルによると、取得した値の単位は下図のようになっています
③PythonからGASのAPIを叩いてスプレッドシートにデータ書き込み
BAG型の記事ご参照ください
④スクリプトの定期実行
BAG型の記事ご参照ください
※注意点:DockerコンテナからのBluetooth取得
Dockerコンテナ内からBluetoothのデータを取得する場合、docker run
時のオプションとして--net=host
を付ける必要があります(Docker composeの場合network_mode: "host"
と指定)。これにより、該当のDockerコンテナはDockerネットワークでなくホストのネットワークが使用されるため、Docker composeで他のコンテナと通信する際には様々な制約が発生する事にご注意ください