M5StickC

電子工作メモ

連休最終日に、電子工作のめも 
久々に部品を繋いで、プログラミング
この夏の記録を残そう
次のチャレンジは。https://beebotte.com/で、可視化をめざす。
それとRaspberry
 Piを利用する
そうそう、Node-Readで可視化も…。




  • DHT11

  • M5StickC


//--------------------------------------------------------------------------------
//  M5StickC 温湿度センサー制御 テストプログラム
//     M5StickC temperature / humidity sensor control test program.
//  
//  ボタン制御:なし
//
//  表示制御
//    温度、湿度を26ピクセルASCIIフォントで表示する
//
//--------------------------------------------------------------------------------

// ------------------------------------------------------------
// ライブラリインクルード部 Library include section.
// ------------------------------------------------------------
#include <M5StickC.h>                             // M5StickC 用ライブラリ
#include <DHT.h>                                  // DHTxx(温度センサー)制御用ライブラリ


// ------------------------------------------------------------
// 定数/変数 定義部 Constant / variable definition section.
// ------------------------------------------------------------
const uint8_t TEMP_MEAN = 26;                     // 温度測定結果の取得 Acquisition of temperature measurement results.
const int DHT_TYPE = DHT11;                       // センサーのタイプを定義
DHT dht(TEMP_MEAN, DHT_TYPE);                     // センサー初期化



float temp_val  = 0.0f;                           // 温度(℃)格納用
float himi_val  = 0.0f;                           // 湿度(%)格納用
float heatIndex  = 0.0f;                          // heatIndex
float discomfortIndex  = 0.0f;                    // discomfortIndex


// ------------------------------------------------------------
// 温度測定の関数 Temperature measurement function.
// Check_TEMP()
// ------------------------------------------------------------
void Check_TEMP() {
  delay(3000);

  bool isFahrenheit = true;
  float percentHumidity = dht.readHumidity();     // 湿度の取得
  float temperature = dht.readTemperature();      // 温度の取得

  // 温度と湿度どちらかの値が不正である場合はエラーをシリアルモニタへ出力
  if (isnan(percentHumidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // 温度(℃)の変換
  temp_val = temperature;                         // 温度(℃)の格納
  himi_val = percentHumidity;                     // 湿度(%)の格納

  
  // 温度(セ氏)と湿度(%)から Heat Index の算出
  // Heat Index とはアメリカ海洋大気庁(NOAA)が出している熱中症に関連する指標のようです。
  // see https://en.wikipedia.org/wiki/Heat_index
  heatIndex = dht.computeHeatIndex(temperature, percentHumidity, false);
  // 不快指数
//  discomfortIndex = computeDiscomfortIndex(temperature, percentHumidity);
  discomfortIndex = 0.81 * temp_val + 0.01 * himi_val * (0.99 * temp_val - 14.3) + 46.3;  //不快指数の算出

}

// ------------------------------------------------------------
// ディスプレイ出力用の関数 Function for Display output.
// display_output()
// ------------------------------------------------------------
void display_output(){

  // プログラムタイトル表示部分
  M5.Lcd.setTextSize(1);                          // テキストサイズの指定
  M5.Lcd.fillScreen(BLACK);                       // 画面の塗りつぶし Screen fill.
  M5.Lcd.setTextColor(WHITE, BLACK);              // テキストカラーの設定
  M5.Lcd.setCursor(0, 0, 2);                      // カーソル位置とフォントの設定
  M5.Lcd.print("Temp/Himi Sensor Ctrl");          // ディスプレイに表示(プログラム名)

  M5.Lcd.setTextColor(GREEN, BLACK);              // テキストカラーの指定
  M5.Lcd.setCursor(0, 20, 4);                     // カーソル位置とフォントカラーの設定
  M5.Lcd.print(String(temp_val, 1));              // ディスプレイに表示(温度)
  
  M5.Lcd.setTextColor(WHITE, BLACK);              // テキストカラーの指定
  M5.Lcd.setCursor(55, 25, 2);                    // カーソル位置とフォントカラーの設定
  M5.Lcd.print("C");                              // ディスプレイに表示(温度)
  
  M5.Lcd.setTextColor(GREEN, BLACK);              // テキストカラーの指定
  M5.Lcd.setCursor(80, 20, 4);                    // カーソル位置とフォントカラーの設定
  M5.Lcd.print(String(himi_val, 1));              // ディスプレイに表示(湿度)
 
  M5.Lcd.setTextColor(WHITE, BLACK);              // テキストカラーの指定
  M5.Lcd.setCursor(140, 25, 2);                   // カーソル位置とフォントカラーの設定
  M5.Lcd.print("%");                              // ディスプレイに表示(湿度)

  M5.Lcd.setTextColor(WHITE, BLACK);              // テキストカラーの設定
  M5.Lcd.setCursor(0, 42, 2);                    // カーソル位置とフォントの設定
  M5.Lcd.print("HeatIndex/DiscomfortIndex");      // ディスプレイに表示(プログラム名)

  M5.Lcd.setTextColor(MAGENTA, BLACK);              // テキストカラーの設定
  M5.Lcd.setCursor(0, 57, 2);                    // カーソル位置とフォントカラーの設定
  M5.Lcd.print(String(heatIndex, 1));              // ディスプレイに表示(湿度)
  M5.Lcd.setCursor(80, 57, 2);                    // カーソル位置とフォントカラーの設定
  M5.Lcd.print(String(discomfortIndex, 1));              // ディスプレイに表示(湿度)
 
}

void setup() {
  // --------------------------------------------------
  // 初期化 Initialize
  // --------------------------------------------------
  // M5StickCの初期化と動作設定 Initialization and operation settings of M5StickC.
  M5.begin();                       // 開始
  M5.Lcd.setRotation(3);            // 画面の向きを変更(右横向き)Change screen orientation (left landscape orientation).
  M5.Axp.ScreenBreath(9);           // 液晶バックライト電圧設定 LCD backlight voltage setting.
  M5.Lcd.fillScreen(BLACK);         // 画面の塗りつぶし Screen fill.

  // シリアルコンソールの開始 Start serial console.
  Serial.begin(115200);
  delay(500);

  dht.begin();                                    //温湿度センサー開始

}

void loop() {

  delay(2000);                                    // 遅延(2秒)
  Check_TEMP();                                   // 温度・湿度の取得
  display_output();                               // ディスプレイ表示更新
  
}

いいなと思ったら応援しよう!