M5StickCと温湿度センサーで飽差表示する(M5Unified.h対応)
はじめに
過去に作成したプログラムを久しぶりに使おうとしたところ、コンパイルエラーになってしまいました。
そこで、備忘録を兼ねてM5Unified.h(M5Unifiedライブラリ)に対応した修正版プログラムを作成しました。
本記事は、過去の記事「M5StickCと温湿度センサーで飽差表示する」のプログラムをベースに、M5Unified仕様へ移植したものです。
※ハードウェアの接続方法や詳細な仕様については、上記のリファレンス記事をご参照ください。
主な変更箇所
M5.begin()の初期化処理をM5Unified推奨の書き方に変更- 画面描画クラスを
M5.LcdからM5.Displayへ変更 - 画面の向き(Rotation)を指定する数値を
M5Unifiedの仕様に統合
プログラム
#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);
}
投稿者の人気記事



-
Makato-kan
さんが
前の金曜日の15:35
に
編集
をしました。
(メッセージ: 初版)
ログインしてコメントを投稿する