M5Stackで温湿度センサーを作る
作業部屋の湿度を感じることが多いのですが、気づいたら気にならない時期になってます。。
除湿機を買おうか悩んでいたのですが、実際どの程度湿度変化があるのか気になり、
温湿度センサーを作ってみることにしました。
画面があると色々と便利なので、M5Stackを使ってみます。
BLE、Wi-Fi使えるので、幅広げるのも楽そうかなと思っています。
本記事では、M5Stackで温度・湿度・気圧を取得するところまで進めます。
ハードウェア構成
- M5Stack BASIC V2.7
- M5Stack用温湿度気圧センサユニット Ver.3(ENV Ⅲ)
環境構築
PlatformIOを業務で使っていたので、PlatformIOを使って環境構築します。
前提として、Visual Studio Codeの拡張機能にPlatformIOインストール済みです。
PlatformIOのインストールはこちらを参考にしてください。
困った時は、他記事で丁寧に環境構築が書かれているので、参考にしてください。
こちらなど
PlatformIOのプロジェクト作成
以下設定でプロジェクトを作成しました。
- Name: env-sensor
- Board: M5Stack Core ESP32
- Framework: Arduino
プロジェクトを作成すると、以下のようなディレクトリ、ファイルが自動生成されます。
.
├── include
│ └── README
├── lib
│ └── README
├── platformio.ini
├── src
│ └── main.cpp
└── test
└── README
M5Stackライブラリのインストール
PlatformIOのライブラリ画面から以下ライブラリをインストールします。
M5Stack by M5Stack
書き込みの確認
適当なソースコードを用意して、Uploadの確認をします。
確認用のソースコードは、PlatformIO/Libraries/M5Stack/Examples/Display
のサンプルコードをmain.cppにコピペしました。
これで、M5Stackに書き込めることを確認しました。
書き込み方法
PlatformIOの書き込みは以下方法があります。
- PlatformIOのサイドメニュー(PlatformIOのプロジェクトとしてVS Codeを開いている時)
- VS Code下部のアップロードアイコン(→)
- コマンド (
pio run -t upload
)
pioコマンドは、source ~/.platformio/penv/bin/activate
を実行すると使えます。
温湿度の取得
実際にセンサ値を取得するソースコードを実装します。
センサ値を取得するためのソースコードをダウンロード
GitHubに M5Stack用温湿度気圧センサユニット Ver.3(ENV Ⅲ) の制御コードが置かれているので、ダウンロードします。
M5Stack用温湿度気圧センサユニット Ver.3(ENV Ⅲ)のGitHub
自分の環境では、以下のように保存しました。
.
└── src
└── main.cpp
└── sensor
├── DHT12.cpp <-- 追加
├── DHT12.h <-- 追加
├── M5_ENV.h <-- 追加
├── QMP6988.cpp <-- 追加
├── QMP6988.h <-- 追加
├── SHT3X.cpp <-- 追加
└── SHT3X.h <-- 追加
main.cpp のソースコードを下記に記載します。
#include <M5Stack.h>
#include "sensor/M5_ENV.h"
SHT3X sht30;
QMP6988 qmp6988;
float temperature = 0.0;
float humidity = 0.0;
float pressure = 0.0;
void setup()
{
M5.begin();
M5.lcd.setTextSize(2);
Wire.begin();
qmp6988.init();
sht30.init();
M5.lcd.println("ENV III Unit Test");
}
void loop()
{
pressure = qmp6988.calcPressure();
if (sht30.get() == 0)
{
temperature = sht30.cTemp;
humidity = sht30.humidity;
}
else
{
temperature = 0.0;
humidity = 0.0;
}
M5.lcd.fillRect(0, 20, 100, 60, BLACK);
M5.lcd.setCursor(0, 20);
M5.lcd.printf("T: %2.1f \r\nH: %2.0f%% \r\nP:%2.0fPa\r\n",
temperature, humidity, pressure);
delay(1000);
}
ここまでで、M5Stackにソースコードをアップロードすると、M5Stackで温度・湿度・気圧を確認することができます。
まとめ
M5Stackとセンサを用いて、温度・湿度・気圧を取得することができました。
今後、BLEやWi-Fiを用いてWebやスマホからセンサ値を確認できるようにする予定です。