センサーの値を見える化する(1)
温度センサ:MDK001の値の見える化

2021年7月2日

どもです。

ここしばらく、PCツールとかの話が多かったのですが、久方ぶりに組み込み開発のネタです。
内容は、タイトルにもあるように、「温度センサの値の見える化」です。

1.作業環境

今回の作業環境です。

作業環境
H/W RaspberryPi3
OS Raspbian GNU/Linux 10 (buster)
ライブラリ libpigpio/libcgpio(0.3.0)
python3 ver.3.7.3
温度センサ MDK001

使用するライブラリのうち、libcgpioは自作したライブラリになります。
C言語でRaspberryPiのGPIOを使用するためのライブラリです。
GitHubで公開していますので、あわせて参照・使用していただければ幸いです。
使用するセンサ(MDK001)については、マルツさんのサイト、またはこのサイトから参照できるデータシートを参照して下さい。
MDK001の使い方については、過去のエントリ:温度センサの出力値の比較、あるいはQtでRaspberryPi/GUI開発(11)-SPI通信をしてみた(その3)を参照して下さい。

2.「見える化」の方法

2.1.コンセプト

今回の「見える化」は、下図のようなコンセプトで行います。
sensor_graph_visualization_001_01
全ての処理は、RaspberryPi3で行います。
C言語のアプリケーションでセンサー値を取得し、その値をpythonでクラウドサービスにアップロードします。
センサー値の取得は、これまでの資産を活用することも兼ねて、C/C++で実装したアプリを作成・使用します。
C/C++とpythonのデータの交換は、ファイルを介して行うことしています。
また、図には出ていませんが、クラウドサービスへのデータ送信はcronを用いた一定周期で行います。

2.2.クラウドサービス

今回、センサ値をグラフ化して「見える化」を実現します。
グラフは、「Ambient」というサービスを使用します。
コチラのサービスでは、ユーザ登録を行えば(制限はありますが)誰でも利用ができます。
また、データの登録のためのpythonのAPIが公開されており、データを送信/登録をとても簡単に行うことができます。
APIのダウンロード、インストールの手順については、こちらのチュートリアルを参照して下さい。

3.実装

今回、センサの値の取得は、過去のエントリで作成したコードを改修したものを用います。
ココでは長くなるので、割愛します。
pythonでのファイルからのデータ読み出しとデータの送信のコードを示します。

import ambient
            
def ReadSensorData():
    filename = 'mdk001.data'
    infile = open(filename, 'rb')
    intpart = infile.read(2)
    decpart = infile.read(2)
    infile.close()

    intvalue = int.from_bytes(intpart, byteorder='little')
    decvalue = int.from_bytes(decpart, byteorder='little')

    sensor_data = intvalue + (decvalue / 10000)

    return sensor_data

if __name__ == '__main__':
    sensordata = ReadSensorData();
    print('Sensor data = ', sensordata)

    try:
        am = ambient.Ambient(xxxx, 'yyyy')
        r = am.send({'d1': sensordata})
        print('sent to ambient : ret = %d' % r.status_code)
    except requests.exceptions.RequestException as e:
        print('request failed: ', e)

このコードは、ReadSensorData()でC/C++のアプリが書き込んだデータを読み出しています。
それ以外のコードは、Ambientのチュートリアルのモノを流用しています。
なお、コード内の「xxxx」と「yyyy」の部分には、それぞれ「チャンネルID」と「リードキー」を指定します。
これらは、「チャンネル」を作成した際に生成/指定される値になります。

4.見える化の結果

とある日の私の部屋の気温の変化を見てみます。
sensor_graph_visualization_001_02
少し波形を解説します。
朝の早い時間での温度変化は、起床して部屋の換気をしてみたタイミングです。
また、夕方の大きな温度変化は、仕事から帰宅してエアコンを動かしたタイミングです。
その後気温が上昇していますが、これは就寝のためにエアコンを停止したタイミングです。
sensor_graph_visualization_001_003

5.まとめ

今回、センサーの値をクラウドサービスにアップロードして見える化してみました。
初めての見える化ということで、MDK001から取得した気温をしました。
センサーの値を視覚的に認識できるようになり、変化が分かりやすくなりました。
しかし、データが1つだけなので、まぁ~、得られたグラフは面白くない。
今後は見えるデータを少し多くしていくと同時に、どのようなセンサーの値を見える化したら面白いか、ということも考えていきます。

ではっ!