LoginSignup
1
1

More than 1 year has passed since last update.

二酸化炭素とかをMicroPythonでMachinistに送る

Last updated at Posted at 2021-08-23

可視化に悩む

センサを買ったけれどもグラフにしたり、アラートを出すにはどこかにデータを送ってためておく必要があった。
なんとなく検索して良さそうなサービスを探していたら、IIJさんのMachinistを見つけた。
Bearerでトークン付けてを送るだけなのでらくらく。

用意していたもの

  • M5Stack
  • M5Stack用環境センサユニット ver.2(ENV II)
  • TVOC/eCO2 ガスセンサユニット

手順

つなげる

Grove(I2C)のハブがあるので、買っておく。スイッチサイエンスさんとかにある。

コードを書く

UIFlowのBlocklyだとごちゃごちゃなコードが生成されるので、シュッとPythonモードにする。
Machinistのドキュメントに従って、dict型にセンサから得たデータをどんどん入れていく。

from m5stack import *
from m5ui import *
from uiflow import *
import wifiCfg
import urequests
import time
import unit
import ujson

setScreenColor(0x000000)
env2_1 = unit.get(unit.ENV2, unit.PORTA)
tvoc_1 = unit.get(unit.TVOC, unit.PORTA)


status = None
url = 'https://gw.machinist.iij.jp/endpoint'
headers={'Content-Type':'application/json',
         'Authorization':'Bearer <your token>'
        }

SSID = '<your own SSID>'
password = '<password of SSID>'

wifiCfg.doConnect(SSID, password)
label0 = M5TextBox(0, 0, 'Init', lcd.FONT_Default, 0xFFFFFF, rotate=0)

while status is 'Succeeded' or status is None:
  try:
    wifiCfg.reconnect()
    data = {'agent':'MySpace',
        'metrics':[
          {'name':'temperature','namespace':'Environment Sensor','data_point':{'value':env2_1.temperature}},
          {'name':'pressure','namespace':'Environment Sensor','data_point':{'value': float(('%.2f'%float(env2_1.pressure / 33.86)))}},
          {'name':'humidity','namespace':'Environment Sensor','data_point':{'value':env2_1.humidity}},
          {'name':'TVOC','namespace':'Environment Sensor','data_point':{'value':tvoc_1.TVOC}},
          {'name':'CO2','namespace':'Environment Sensor','data_point':{'value':tvoc_1.eCO2}},
          {'name':'H2','namespace':'Environment Sensor','data_point':{'value':tvoc_1.H2}},
          {'name':'Ethanol','namespace':'Environment Sensor','data_point':{'value':tvoc_1.Ethanol}}
          ]
        }
    label0.setText('sending...')
    res = urequests.post(
      url,
      json = ujson.dumps(data),
      headers = headers
    )
  finally:
    res = res.json()
    status = res['message']
    label0.setText(str(status))
    lcd.qrcode('https://app.machinist.iij.jp/dashboard', x=0, y=20, width=220, version=6)
  time.sleep(300)

とりあえず5分おきにMachinistに送るようにsleepを300秒に設定。
画面になにもないのと寂しいので、dashboardのURLに遷移するQRコードを表示。

参考文献

1
1
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
1
1