こんにちは!こんばんは!
ちゃとらです(・ω・)/
M5StackにはIMU(慣性計測ユニット)が搭載されているので、加速度やジャイロなどが測定可能です。
温度も測定可能ですがばらつきがあり性能も微妙な感じなので、正確な値はあまり期待できません。
M5Stackに搭載されているMPU6886(IMU)で温度センサを使う方法を分かりやすく解説していきます!




今回扱うM5Stack
M5Stackの種類 | M5Stack FIRE(V2.6) |
値段 | 49.90ドル(税別) (販売価格は7700円程 投稿日現在) |
生産国 | 中国 |
サイズ | 5.4 x 5.4 x 3.05 cm |
僕は8000円ぐらいでM5Stack FIREを通販で購入しました。
M5Stackは機種によって搭載されているセンサが異なります。MPU6886では一応温度も測定可能です(湿度は測定できません)
ちなみに、MPU6886では加速度・ひねり(ジャイロ)・温度が測定可能ですが、磁力は測定できません。
温度センサの仕組みについて
メインに入る前に、温度センサの仕組みを少し解説します。
MPU6886のような慣性計測ユニットにはサーミスタという小型温度センサが搭載されています。
サーミスタは、温度が変わると電気の流れにくさ(抵抗)が変化する電子部品です。
引用元:株式会社芝浦電子|サーミスタってなに?
温度が高くなると電気が流れやすくなり、温度が低くなると電気が流れにくくなります
※したがって、サーミスタ内の電気の流れをみることで温度を知ることができます。
サーミスタは、小形で衝撃や振動に強く、温度に対する感度が高いため、私たちの暮らしを支えるさまざまな製品に使われています。
要はサーミスタとは、温度の変化によって抵抗値を変える機器のことです。
このサーミスタはエアコンや自動車、電子時計などに搭載されています。
使い方
MPU6886の温度センサを使うためには、何かライブラリをインストールしたり特別な設定は必要ないです。プログラムを書き込むだけで使うことができます。
ここでは、M5Stackのセットアップ(Arduino IDE)は完了していること前提で解説していきます。
M5Stackのセットアップ(Arduino IDE)がまだ完了していない人は以下の記事を参考にしてください!



プログラムを書いて実行
以下のプログラムをM5Stackに書き込んで動作させます。
// ↓の定義は#include <M5Stack.h>より前に!
#define M5STACK_MPU6886
#include <M5Stack.h>
// 取得する温度データを初期化
float temp = 0.0F;
// 温度に対するメッセージを初期化
String msg = "";
void setup()
{
M5.begin();
M5.Power.begin(); // Powerモジュールを初期化
M5.IMU.Init(); // IMUを初期化
M5.Lcd.setTextSize(3);
}
void loop()
{
// 温度データを取得
M5.IMU.getTempData(&temp);
// 温度を調整
temp = temp - 20.0;
// 画面をクリア
M5.Lcd.clear();
// 温度データをシリアル通信で送信
Serial.print("Temperature(*C):");
Serial.println(temp);
// 温度データをM5Stackに表示
M5.Lcd.setCursor(0, 50);
M5.Lcd.setTextColor(BLUE, BLACK);
M5.Lcd.println("Temperature:");
M5.Lcd.printf("%5.2f *C ", temp);
// 温度に対するメッセージをM5Stackに表示
M5.Lcd.setCursor(0, 125);
M5.Lcd.setTextColor(WHITE, BLACK);
M5.Lcd.println("Message:");
if(temp >= 32.0) msg = "Very hot!!";
else if(temp >= 28.0 && temp < 32.0) msg = "Hot!";
else if(temp >= 20.0 && temp < 28.0) msg = "Nice";
else if(temp >= 10.0 && temp < 20.0) msg = "Cold!";
else msg = "Very cold!";
M5.Lcd.print(msg);
delay(300);
}
14行目では、M5Stackの電源関係の機能を初期化をしています。
26行目で温度を調節しています。これが無いと27℃の環境でも47℃とか50℃とかキ〇ガイみたいな値になってしまうんですよね…
29行目でループの最初に画面をクリアしています。目がチカチカするのはコイツのせいですが、コイツがいないと例えばVery hot!!を表示後にHot!を表示すると、前の表示がクリアされないので処理が重なりHot! hot!!というおかしな表示をしてしまいます。
プログラムを作成できたら、シリアルポートとボードの設定を忘れずに行いましょう。
「ツール」→「シリアルポート」でM5Stackが接続されているポート番号を選び、
「ツール」→「ボード」→「ESP32 Arduino」で「M5Stack-Core-ESP32」を選びましょう。
それぞれ設定ができたら、M5Stackにプログラムを書き込みます。


こんな感じで表示されればOKです。また、シリアル通信で温度データを送信しているのでM5Stackがパソコンと接続されていれば、シリアルプロッタでグラフ表示させることもできます。


グラフ表示させるときは通信速度を115200bpsに設定します。
室温27℃の環境で測定しましたが、±5℃くらいの誤差が出てしまいます。
やっぱり、少し性能悪いっすね…
M5StackのMPU6886についての詳細が気になる人は以下のリンクを参考にしてください。
https://github.com/m5stack/M5Stack/blob/master/src/utility/MPU6886.cpp
まとめ
温度センサの性能としては、周辺機器のセンサの方が精密なんですよね…
今回はここまでです。
ちゃとら(・ω・)/
今回紹介した広告一覧