センサーの値を見える化する(1)
温度センサ:MDK001の値の見える化
どもです。
ここしばらく、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.コンセプト
今回の「見える化」は、下図のようなコンセプトで行います。
全ての処理は、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.見える化の結果
とある日の私の部屋の気温の変化を見てみます。
少し波形を解説します。
朝の早い時間での温度変化は、起床して部屋の換気をしてみたタイミングです。
また、夕方の大きな温度変化は、仕事から帰宅してエアコンを動かしたタイミングです。
その後気温が上昇していますが、これは就寝のためにエアコンを停止したタイミングです。
5.まとめ
今回、センサーの値をクラウドサービスにアップロードして見える化してみました。
初めての見える化ということで、MDK001から取得した気温をしました。
センサーの値を視覚的に認識できるようになり、変化が分かりやすくなりました。
しかし、データが1つだけなので、まぁ~、得られたグラフは面白くない。
今後は見えるデータを少し多くしていくと同時に、どのようなセンサーの値を見える化したら面白いか、ということも考えていきます。
ではっ!
ディスカッション
コメント一覧
まだ、コメントがありません