Howto

「オムロン 環境センサ(USB)」からUSB通信を用いたデータ収集

このHowtoでは、Armadillo-IoT G3 で 「オムロン 環境センサ」の「形2JCIE-BU01」からUSB通信を用いてデータ収集を行う手順について紹介します。
Armadillo-X1でも同様に動作させることができます。

オムロン 環境センサ 2JCIE-BU01

オムロン 環境センサ 2JCIE-BU01 (以下環境センサと記載)は、以下のセンサを搭載しています。

  • 温度
  • 湿度
  • 照度
  • 気圧
  • 騒音
  • 3軸加速度
  • eTVOC(総揮発性有機化合物濃度)

PC等(※)から電源を供給すると自動で各情報の計測を開始します。
※ PCの他、USB電源アダプタなどで代用することができます

USB接続したPC等からUSB経由でセンサーデータを習得することもできますが、BLE経由(アドバタイズ、又はGATT)での取得も可能です。
今回は以下の接続構成で、ArmadilloとUSB接続した1台の環境センサと通信を行います。

BU01_USB通信接続図

詳細な仕様につきましては、ユーザーズマニュアルをご確認ください。

USB接続した環境センサからデータを取得する

ArmadilloとUSB接続した環境センサからデータを取得します。
本Howtoでは例として、取得したデータをcsvに出力する方法をご紹介します。

環境センサと通信を行うための準備

環境センサと通信を行うため、Armadilloに環境センサをttyUSBデバイスとして認識させます。
Armadilloに環境センサをUSB接続し、[lsusb]コマンドでデバイス情報を確認します。

[armadillo ~]# lsusb
Bus 002 Device 003: ID 1e2d:005a
Bus 002 Device 002: ID 0424:3503 Standard Microsystems Corp.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0590:00d4 Omron Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

環境センサが正常に接続されているならば、「Omron Corp.」という情報のデバイスが表示されます。
これが環境センサのデバイス情報になります。
このデバイス情報から「USB ID」(上記例では[0590:00d4])を確認します。

確認したUSB IDを「/sys/bus/usb-serial/drivers/ftdi_sio/new_id」に記入します。

[armadillo ~]# echo 0590 00d4 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id
ftdi_sio 1-1:1.0: FTDI USB Serial Device converter detected
usb 1-1: Detected FT-X
usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0*

今回の例では、環境センサがデバイス「ttyUSB0」に割り当てられました。
このデバイス名はご利用の環境によって変化する場合があります。

イベント検知を用いたttyUSB割り当ての自動化

「/sys/bus/usb-serial/drivers/ftdi_sio/new_id」はrebootを行う度に初期化されるため、環境センサの挿入イベントをトリガとした自動化を行います。
本Howtoではudevのrulesファイルを用いて実現します。

以下のようにrulesファイルを作成します。

[armadillo ~]# vi /etc/udev/rules.d/10-2jcie-bu01-usb.rules

ACTION=="add", \
SUBSYSTEMS=="usb", \
ATTRS{idVendor}=="0590", ATTRS{idProduct}=="00d4", \
RUN+="/bin/sh -c 'echo 0590 00d4 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id'"

rulesファイルに記載された各キーの役割について、以下に記載します。

  • ACTION:イベントを発生させたアクションの名前を照合します。
  • SUBSYSTEMS:一致するデバイスサブシステム名を検索します。
  • ATTRS:一致する{}内のsysfs属性を検索します。
  • RUN:実行するコマンドを設定します。

追加したrulesファイルを適用させます。

[armadillo ~]# udevadm control --reload

これによりUSB挿入や再起動後に、自動で環境センサが認識されるようになります。

ftdi_sio 1-1:1.0: FTDI USB Serial Device converter detected
usb 1-1: Detected FT-X
usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0*

データ収集プログラムを用いて環境センサからデータ取得

このHowtoでは、以下の処理を実行するCプログラムを使用します。

  • 引数から以下のデータを受け取り、USB通信設定を行う。
    • 環境センサが認識されているデバイス名(必須)
    • モード(必須)
    • csvファイルのフルパス(任意)
  • 引数のモードによって以下のデータ取得コマンドを作成
    • モード0:最新データ取得
    • モード1:メモリに保存されている全データ取得
  • データ取得コマンドを環境センサに送信し、レスポンスを待つ。
    タイムアウト1秒で10回までリトライを行う。
  • 引数にcsvファイルのフルパスがある場合、csvファイルにデータ出力。
    指定されていない場合、標準出力にデータ出力。

以下にサンプルプログラムとファイル構成を記載します。

  • 2jcie-bu01-usb
    • Makefile
    • common.h
    • data_output.c
    • data_output.h
    • main.c
    • sensor_data.c
    • sensor_data.h

Armadillo上で上記のファイルをダウンロードし、以下の手順でコンパイルして下さい。

[armadillo ~]# tar xzvf 2jcie-bu01-usb.tar.gz
[armadillo ~]# cd 2jcie-bu01-usb
[armadillo ~]/2jcie-bu01-usb# ls
Makefile  common.h  data_output.c  data_output.h  main.c  sensor_data.c  sensor_data.h
[armadillo ~]/2jcie-bu01-usb# make

コンパイルした実行ファイル(2jcie-bu01)を、以下のように引数を指定して実行します。

[armadillo ~]/2jcie-bu01-usb# ./2jcie-bu01 /dev/ttyUSB0 1 /home/atmark/memory_data-20190219.csv
Mode : Get Memory Data
Program all success.

今回は環境センサのメモリに保存されている全データをcsvファイルに出力します。
出力したcsvファイルは以下の仕様でデータ保存しています。

  • 1秒毎のサンプリング
  • 昇順

出力したcsvファイル例を以下に記載します。

[armadillo ~]# vi /home/atmark/memory_data-20190218.csv
Temperature, Relative humidity, Ambient light, Barometric pressure, Sound noise, eTVOC, eCO2, Discomfort index, Heat stroke
22.58,32.83,185,1011.579,53.40,0,402,67.23,16.97
22.58,32.83,183,1011.578,52.62,0,402,67.23,16.97
22.56,32.89,185,1011.580,52.92,0,402,67.21,16.98
22.53,32.92,183,1011.575,53.28,0,402,67.18,16.95
22.52,32.97,178,1011.572,55.28,0,402,67.17,16.95
22.51,33.00,176,1011.565,53.96,0,403,67.16,17.04
22.50,33.01,176,1011.563,53.39,0,400,67.15,17.03
22.50,33.01,174,1011.559,65.65,0,405,67.15,17.03
22.50,32.99,176,1011.558,54.71,0,400,67.15,16.93
22.50,32.95,180,1011.558,58.02,0,400,67.15,16.93
22.51,32.93,180,1011.557,88.59,0,400,67.16,16.94
...