編集履歴一覧に戻る
Makato-kanのアイコン画像

Makato-kan が 2026年10月02日15時35分37秒 に編集

初版

タイトルの変更

+

M5StickCと温湿度センサーで飽差表示する(M5Unified.h対応)

タグの変更

+

M5StickC

+

M5StickC-PLUS

+

DHT11

+

家庭菜園

+

飽差

記事種類の変更

+

製作品

本文の変更

+

#### はじめに 過去に作成したプログラムを久しぶりに使おうとしたところ、コンパイルエラーになってしまいました。 そこで、備忘録を兼ねて`M5Unified.h`(M5Unifiedライブラリ)に対応した修正版プログラムを作成しました。 本記事は、過去の記事「[M5StickCと温湿度センサーで飽差表示する](https://elchika.com/article/6ee11466-f7c6-444c-b5b7-07a17521788a/)」のプログラムをベースに、`M5Unified`仕様へ移植したものです。 ※ハードウェアの接続方法や詳細な仕様については、上記のリファレンス記事をご参照ください。 #### 主な変更箇所 * `M5.begin()` の初期化処理を `M5Unified` 推奨の書き方に変更 * 画面描画クラスを `M5.Lcd` から `M5.Display` へ変更 * 画面の向き(Rotation)を指定する数値を `M5Unified` の仕様に統合 #### プログラム ```M5-DHT11-housa_Unified-001.ino #include <M5Unified.h> #include "DHT.h" #define DHTPIN 26 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { // M5Unifiedの推奨初期化手順 auto cfg = M5.config(); M5.begin(cfg); // 省エネ設定(40MHzに下げるとセンサー値が取得できなくなるため50MHzに設定) setCpuFrequencyMhz(50); esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON); dht.begin(); M5.Display.setRotation(0); M5.Display.fillScreen(BLACK); M5.Display.setTextColor(WHITE); M5.Display.setTextSize(3); pinMode(DHTPIN, INPUT_PULLUP); Serial.begin(9600); } void loop() { delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); // ※センサー未接続時のエラー処理(nan表示や異常値の対策)は省略しています float saturationPressure = saturationVaporPressure(t); float currentVaporPressure = vaporPressure(saturationPressure, t); float hd = vaporPresureDeficit(currentVaporPressure, h); M5.update(); M5.Display.fillScreen(BLACK); M5.Display.setCursor(10, 15); M5.Display.printf("%.2f", t); M5.Display.setCursor(10, 45); M5.Display.printf("%.0f", h); M5.Display.setCursor(80, 45); M5.Display.printf("%.1f", hd); delay(5000); } // 飽和水蒸気圧[hPa]の計算 (Tetensの近似式を使用) float saturationVaporPressure(float t) { return 6.1078 * (10 * (7.5 * t) / (t + 273.2)); } // 飽和水蒸気量[g/㎥]の計算 (理想気体の状態方程式による) float vaporPressure(float saturationPressure, float t) { return 217 * saturationPressure / (t + 273.2); } // 飽差[g/㎥]の計算 (飽和水蒸気量と相対湿度より計算) float vaporPresureDeficit(float currentVaporPressure, float h) { return currentVaporPressure * ((100 - h) / 100); } ```