はじまり
結構長いあいだ在宅勤務を続けていると、自宅の情報をデータ化したくなるものです。
特に仕事スペースの快適さというのは気になるもので、以前から温湿度の表示がついた置き時計を置いてたんですが、以下のような課題がありました。
- 部屋を締め切ってエアコン付けていると、いつの間にか屋外のほうが快適になっている
- 冬場、脱衣所が寒すぎる
- どうも脱衣所がカビやすい
これらの課題に対処するため、とりあえずデータを取ってみようということで、室内・屋外・脱衣所の三ヶ所に温湿度計を置くことにしました。
完成品の紹介
このようになりました。
上から順に、室内・室外・脱衣所の温度と湿度が表示されます。
背景にうっすら色がついていて、不快指数を基準に、暑いほど赤く、寒いほど青く表示されます。
この画像だと、パッと見で「外のほうが暑いんだな」というのが分かるうえ、詳しく確認すると屋外よりも脱衣所のほうが湿度が上がっている事がわかります。
機材の紹介
特に案件じゃないのでアレですが、公式サイトにリンク張っておきます。
- 本体 : M5StickC Plus
- 本体の温湿度計 : M5Stack用温湿度気圧センサユニット Ver.3(ENV Ⅲ)
- 室内用の温湿度計 : SwitchBot 温湿度計
- 屋外用の温湿度計: SwitchBot 防水温湿度計
選定理由ですが、M5StickC Plusはとにかく必要十分な機能があったことが一番です。そこそこ安くて、ディスプレイが付いていて、本体に温湿度計が付けられること。
センサユニットはM5Stickの場合、Grove端子で外付けする”UNIT”タイプと本体に直接ドッキングする”HAT”タイプ(参考リンク)の2つが選べたんですが、購入時にHATに気づかなかったのでUNITになりました。結果的にはどっちでも良かったです。
SwitchBotは純粋に、屋外は屋外用、室内は室内用で買いました。
構築の手順
- SwitchBotの温湿度計を単体でセットアップします。スマホにアプリを入れてペアリングすれば良いです。
- M5StickC PlusとセンサユニットをGrove端子で繋ぎます。コネクタはセンサユニットに同梱されていて、つながるところにつなぐだけで良いです。
- センサのサンプルプログラムを走らせて動作確認します。M5Stackシリーズの各本体ごと・HAT/UNITで全部サンプル用意されているので、該当するものを選びます。
- M5StackからSwitchBotの温湿度計のデータを取る先人のプログラムを走らせて動作確認します。M5StackかM5StickC Plusかで少し手直しが要りますが、まぁまぁ動きます。
- 上記サンプルを元に、がんばってコーディングします。
- 完成です。
苦労ポイント
技術的なノウハウがあるものは個別記事にします。
その他で苦労した点としては、M5Stack用の温湿度センサー(SHT30)と、SwitchBotの温湿度計の表示にかなり差があったことですかね。
湿度の方はほぼ同じ値を示してたんですが、温度がどうしてもズレる。3つの温湿度計を同じ場所に置いてるのに全然値が違う。それも、SwitchBotの温度がかなり緩やかにしか変化しない。
で、どうもSwitchBotの温湿度計はセンサーの生データを出しているのではなく、直近30分ぐらいのデータを使って補正した値を出しているっぽい、というのが分かりました。
SwitchBotのアプリでも「初回起動時や手動校正するときは30分以上放置してね」とあり、同じ場所に長時間置かれることを前提とした表示のようです。
ということで、1時間ぐらい放置すると値が揃ってきて、それでもSHT30だけ数値がズレていたので、SHT30側がおかしいんだろうということで、M5Stick内でプログラム的に補正することにしました。
あとはまぁ、省電力のためにCPUの周波数を落とそうとしたら80MHz以下では起動すらしなかったり、Bluetoothから拾うデータが結構な頻度で欠損するので欠損が分かるようにしてみたりと、そんなところですね。
おわりに
今回初めてIoTデバイス作成にチャレンジしてみましたが、自分で作ったものが物体として生まれるとうれしいですね。
また、PCやスマホのアプリと違い、専用デバイスで常時表示されていると、ふと気になったときに気軽に確認できるし、すぐ目に入るので良いです。
結構実用的なものが作れたので満足しました。