1.はじめに
製造現場では、温度や湿度を記録したい場面が多くあります。例えば
- 工場内の温度が時間とともにどのように変化しているか
- 加工機周辺の温度が上昇していないか
- 製品や材料の保管環境が適切か
- 空調の運転によって温湿度がどのように変化するか
といったことを調べる場合です。市販の温湿度データロガーを使用する方法もありますが、M5Stackに温湿度センサーを接続すると、比較的簡単に温湿度を測定して記録できます。
今回は、M5Stack Core2に温湿度センサーを接続し、温湿度を測る → 画面に表示する → microSDカードにCSV形式で保存する という一連の流れを試してみます。
本記事では、高精度な温湿度計測システムを作ることを目的としていません。M5Stackと身近なセンサーを使って、 「現場のデータを取ってみる」 ことを目的とします。
2.今回行うこと
今回のシステムでは、温湿度センサーで取得した温度と湿度をM5Stack Core2のLCDに表示します。さらに、測定した値を一定時間ごとにmicroSDカードへ保存します。全体の流れは次のようになります。
温湿度センサー
↓
M5Stack Core2で温度・湿度を取得
↓
LCDに表示
↓
microSDカードにCSV形式で保存
保存したCSVファイルをパソコンに取り込めば、Excelなどを使って温度・湿度の時間変化をグラフにすることもできます。
3.使用する機器
今回使用する主な機器を表1に示します。
| 機器 | 用途 |
|---|---|
| M5Stack Core2 | データ取得・表示・保存 |
| 温湿度センサー | 温度・湿度の測定 |
| microSDカード | 測定データの保存 |
| USB Type-Cケーブル | PCとの接続・電源供給 |
| パソコン | プログラムの作成・書き込み |
温湿度センサーには、M5Stackから販売されているGROVE接続タイプのセンサーユニットなどを使用すると、配線が簡単です。今回は、温湿度センサーとしてM5StackのENV-III Unitを使用します。ENV-IIIでは温度、湿度、気圧を測定できますが、今回の実習ではセンサーによるデータ取得の基本を学ぶため、温度と湿度のみを使用します。
4.使用するライブラリのインストール
今回使用するENV-IIIをプログラムから扱うため、Arduino IDEに次のライブラリをインストールします。
| ライブラリ | バージョン | 用途 |
|---|---|---|
| M5UnitUnified | 0.5.5 | M5Stackの各種Unitを共通的に扱うためのライブラリ |
| M5Unit-ENV | 1.7.1 | ENV-IIIから温度・湿度などを取得するためのライブラリ |
Arduino IDEの画面左側にある**「ライブラリマネージャ」**のアイコンをクリックします。検索欄に M5UnitUnified と入力し、検索結果から バージョン0.5.5 を選択して「インストール」をクリックします。
続いて、検索欄に M5Unit-ENV と入力し、バージョン1.7.1 を選択して「インストール」をクリックします。
5.温湿度センサーの接続
M5Stack Core2のGROVEポートに温湿度センサーを接続します。GROVE対応センサーの場合、4本の信号線が1本のケーブルにまとめられているため、ブレッドボードなどを使わずに接続できます。
接続するには、まず、M5Stack Core2の電源を切ります。そして、microSDカードスロットにmicroSDカードを挿入し、温湿度センサーをGROVEケーブルで接続します。
接続後、USB Type-Cケーブルを使ってM5Stack Core2とパソコンを接続します。
6.Arduino IDEへのプログラム入力
Arduino IDEを起動します。前回の記事 「M5Stackで工場のデータを測ってみる ― 0.PC環境・M5Stack動作確認」 で設定したM5Stack Core2の開発環境を使用します。
Arduino IDEに次のプログラムを入力します。
#include <M5Unified.h>
#include <Wire.h>
#include <SD.h>
#include <M5UnitUnified.h>
#include <M5UnitUnifiedENV.h>
m5::unit::UnitUnified Units;
m5::unit::UnitSHT30 sht30;
const char* CSV_FILE = "/temp_humidity.csv";
const uint32_t INTERVAL_MS = 10000;
uint32_t startMs = 0;
uint32_t lastMs = 0;
void setup() {
auto cfg = M5.config();
M5.begin(cfg);
M5.Display.setTextSize(2);
M5.Display.setTextColor(WHITE, BLACK);
M5.Display.fillScreen(BLACK);
Wire.begin(32, 33, 400000);
Units.add(sht30, Wire);
if (!Units.begin()) {
M5.Display.println("ENV sensor error");
while (true) delay(1000);
}
if (!SD.begin(4, SPI, 25000000)) {
M5.Display.println("microSD error");
while (true) delay(1000);
}
if (!SD.exists(CSV_FILE)) {
File f = SD.open(CSV_FILE, FILE_WRITE);
if (f) {
f.println("elapsed_s,temperature_C,humidity_percent");
f.close();
}
}
startMs = millis();
lastMs = millis() - INTERVAL_MS;
}
void loop() {
M5.update();
Units.update();
uint32_t now = millis();
// 10秒経過していなければ何もしない
if (now - lastMs < INTERVAL_MS) {
return;
}
lastMs = now;
// 現在の温湿度を取得
float temp = sht30.temperature();
float hum = sht30.humidity();
uint32_t elapsed = (now - startMs) / 1000;
// 画面表示
M5.Display.fillScreen(BLACK);
M5.Display.setCursor(0, 30);
M5.Display.printf("Temperature\n%.1f degC\n\n", temp);
M5.Display.printf("Humidity\n%.1f %%\n\n", hum);
M5.Display.printf("Elapsed: %lu s", elapsed);
// microSDへ保存
File f = SD.open(CSV_FILE, FILE_APPEND);
if (f) {
f.printf("%lu,%.1f,%.1f\n", elapsed, temp, hum);
f.close();
}
}
今回のプログラムでは、大きく分けて次の処理を行います。
- M5Stack Core2を初期化する
- 温湿度センサーを初期化する
- 温度と湿度を取得する
- LCDに測定値を表示する
- microSDカードに測定値を保存する
- 一定時間後に再び測定する
最初からプログラムをすべて理解する必要はありません。
まずはプログラムを書き込み、**「センサーから値を取得して表示できる」**ことを確認してみます。
7.M5Stack Core2へのプログラム書き込み
M5Stack Core2をUSBケーブルでパソコンに接続します。Arduino IDEで、使用するボードとポートを確認します。ボードにはM5Stack Core2を選択します。
続いて、Arduino IDEの「書き込み」ボタンをクリックします。プログラムのコンパイルと書き込みが始まります。書き込みが正常に終了すると、Arduino IDEの画面下部に書き込み完了を示すメッセージが表示されます。
うまく書き込めない場合
次のことを確認します。
- M5Stack Core2とPCがUSBケーブルで接続されているか
- データ通信に対応したUSBケーブルを使用しているか
- M5Stack Core2がボードとして選択されているか
- 正しいCOMポートが選択されているか
8.温度と湿度を表示
プログラムのコンパイルと書き込みが終わると、M5Stack Core2に書き込まれたプログラムが自動的に起動して、温湿度センサーから取得した温度と湿度がM5Stack Core2のLCDに表示されます。
例えば
Temperature
25.3 degC
Humidity
48.2 %
のように表示されます。M5Stack Core2にはバッテリーが内蔵されているため、パソコンからUSBケーブルを抜いても動作します。
センサー部分を手で軽く覆うなどすると、温度や湿度の値が変化することを確認できます。
ここまでで、 センサー → M5Stack Core2 → LCD というデータの流れを確認しました。
9.microSDカードに保存される測定データ
M5Stack Core2をパソコンとUSBケーブルで接続していると、M5Stack Core2を電源オフできません。このため、M5Stack Core2からUSBケーブルを抜いてから電源オフし、microSDカードスロットからmicroSDカードを取り出します。
microSDカードには、一定時間ごとに測定した温度と湿度がCSV形式で記録されます。保存されたファイルをパソコンで開くと、例えば次のようなデータが得られます。
elapsed_s,temperature_C,humidity_percent
0,25.3,48.2
10,25.4,48.3
20,25.4,48.5
30,25.5,48.6
elapsed_sは測定開始からの経過時間、temperature_Cは温度、humidity_percentは相対湿度です。
今回は、M5Stack Core2単体で簡単に記録できる構成を重視し、時刻ではなく測定開始からの経過時間を記録する方法とします。ファイルはCSV形式で保存されているため、Excelなどの表計算ソフトで読み込み、グラフ化するなどのデータ処理ができます。
10.工場における活用方法
今回の装置は簡易的なものですが、製造現場ではさまざまな使い方が考えられます。例えば
- 工場内の温湿度変化の確認
- 加工機周辺の環境温度の記録
- 材料保管場所の温湿度確認
- 空調運転前後の温湿度比較
- 昼夜の温度変化の確認
などです。まず、簡易的にデータを取得してみることで、 「本格的な計測を行う必要があるか」 を判断するための予備調査にも利用できます。
11.今回のまとめ
今回は、M5Stack Core2と温湿度センサーを使って、センサー値の取得 → LCD表示 → CSV保存 という基本的なデータ計測の流れを試しました。M5Stackを使うと、センサーから取得した値をその場で確認できるだけでなく、microSDカードに保存して、後からパソコンで解析することもできます。今回行った 「測る」「表示する」「保存する」 という流れは、温湿度以外のセンサーでも基本的には同じです。
次回は距離センサーを使用して、 「M5Stackでワークの有無を検出してみる」 ことに挑戦します。距離を測るだけでなく、設定したしきい値を使って、ワークが「ある/ない」を判定してみます。
注意事項
今回製作する装置は、M5Stackと市販センサーを利用した簡易的な測定装置です。
測定値は、使用するセンサーの精度、設置位置、周囲環境などの影響を受けます。品質保証や製品検査、安全管理など、測定値の信頼性が要求される用途では、用途に適した校正済みの測定機器を使用してください。


