LoginSignup
12
16

Omron環境センサの値をRaspberryPiでロギング(USB型)

Last updated at Posted at 2020-05-08

はじめに

本記事は、Omron環境センサ(BAG型)の記事と同内容を、
Omron環境センサ(USB型)で実施した記事です。

環境センサとは?

Omronの環境センサは、温度、湿度、照度、気圧、騒音など、
複数のセンサーをひとまとめにしたデバイスです。
オムロン環境センサ.png
(左: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

センサ値取得スクリプトの作成

センサ値取得のため、下記のスクリプトを作成します

omron_env_usb_connect.py
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クラスによる通信でデータを取得します。

メインスクリプトの作成

センサ値取得スクリプトを呼び出すため、メインスクリプトを作成します

omron_env_toSpreadSheet.py
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でセンサ測定値を取得することができました。

なおユーザーズマニュアルによると、取得した値の単位は下図のようになっています
usb_env.png

③PythonからGASのAPIを叩いてスプレッドシートにデータ書き込み

BAG型の記事ご参照ください

④スクリプトの定期実行

BAG型の記事ご参照ください

※注意点:DockerコンテナからのBluetooth取得

参考

Dockerコンテナ内からBluetoothのデータを取得する場合、docker run時のオプションとして--net=hostを付ける必要があります(Docker composeの場合network_mode: "host"と指定)。これにより、該当のDockerコンテナはDockerネットワークでなくホストのネットワークが使用されるため、Docker composeで他のコンテナと通信する際には様々な制約が発生する事にご注意ください

12
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
16