ラズパイでオフィス環境をセンシングしてグラフ化するの簡易グラフ化編です。
前回取得したセンサー値を Ambient というグラフを作ってくれる
SaaSに送り、次のようなグラフを1つ作ってみます。
手順は次の通り。
ユーザー登録する
さきほどのリンクから行います。
チャネルを生成する
チャネルはデバイスからセンサー値を受信する単位です。
1つのチャネルで最大8つのセンサー値を受信できます。
チャネルとグラフは1:Nで対応します。
今回は次のようにしてみます。
項目 | 数 |
---|---|
デバイス(ラズパイ) | 1つ |
センサー値 | 5種 |
チャネル | 1つ |
グラフ | 1つ |
ひとまず上記リンクからチャネルを生成し、適当な名前を
付けてチャネルIDとライトキーを取得してください。
チャネルIDとライトキーはデータ送信時に必要になります。
マイコン側プログラミング
前回までの方法でセンサー値を取得してAmbientに送信します。
次項を参照してください。
データー送信
取得したセンサー値をAmbientの Pythonライブラリー で送信します。
ライブラリのインストールと用法はリンク先に
記載の通りですが、ざっくりと次の通り。
ライブラリのインストール
pip install git+https://github.com/AmbientDataInc/ambient-python-lib.git
送信
Pythonでざっくり作ってみます。
次のような感じです。
# -*- coding: utf-8 -*-
#
# https://github.com/adafruit/Adafruit_Python_BME280
# https://github.com/sim0nx/tsl2561
# https://github.com/UedaTakeyuki/slider/blob/master/mh_z19.py
# https://ambidata.io/refs/python/
#
from Adafruit_BME280 import *
from tsl2561 import TSL2561
import serial
import ambient
def send():
# 気温(℃)、湿度(%)、気圧(hPa)
bme280 = BME280(t_mode=BME280_OSAMPLE_8, p_mode=BME280_OSAMPLE_8, h_mode=BME280_OSAMPLE_8)
temperature = bme280.read_temperature()
humidity = bme280.read_humidity()
pressure = bme280.read_pressure() / 100
# 照度(lx)
illuminance = TSL2561().lux()
# co2濃度(ppm)
mhz19 = serial.Serial('/dev/ttyS0',
baudrate=9600,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
timeout=1.0)
mhz19.write("\xff\x01\x86\x00\x00\x00\x00\x00\x79")
res = mhz19.read(9)
co2 = ord(res[2])*256 + ord(res[3])
# 送信
# ここにチャネルIDとライトキーをセット
amb = ambient.Ambient( 9999, "xxxxxxxxxxxxxxxx")
amb.send({"d1": temperature,
"d2": humidity,
"d3": pressure,
"d4": illuminance,
"d5": co2 })
if __name__ == "__main__":
send()
上記の実行には Adafruit_BME280.py が必要なので同じ場所にコピーします。
正しく動作すると、Ambientで送信値がダウンロードできます。
動作確認できたらcronに仕込みます。
可視化(グラフ化)
グラフ作成は画面をいじってみるとすぐわかると思います。
画面右上にある次の2つのボタンから行います。
No. | ボタン | 主な設定項目 |
---|---|---|
(1) | チャネル設定 | 送信データの名前 |
(2) | チャート設定 | グラフの種類 ( 折れ線、棒グラフなど ) 表示対象データの選択 |
今回は次の通り設定しました。
ここまで行うと、次のようなグラフが出てきます。
https://ambidata.io/ch/channel.html?id=2813
以上で完成です。