06.CoreInkで温湿度・気圧測定


6.CoreInkで温湿度・気圧測定

M5Stack CoreInkにセンサーを接続し、温度、湿度、気圧を測定する。

センサー

M5Stack用環境センサユニット ver.2(ENV II)
  • 温湿度センサ(SHT30)内蔵
  • 絶対大気圧センサ(BMP280)内蔵
  • 温度測定範囲 : (0~60)±0.2℃
  • 動作温度範囲 : 0~40℃
  • 湿度測定範囲 : (10~90)±2%
  • 気圧測定範囲 : (300~1100)±1hPa
  • I2C通信 : SHT30は0x44, BMP280は0x76
  • GROVE互換インターフェース
  • Groveケーブル1本付
  • 単価 : 税込572円
  • 公開日 : 2020/6/30
https://www.switch-science.com/catalog/6344/

説明

  • センサーは付属ケーブルでCoreInk底面に挿すだけ。
  • Adafruitのライブラリを使用。
  • CoreInkの仕様より画面更新周期は15秒以上にする。

スケッチ


#include <M5CoreInk.h>       // M5Stack CoreInkを使用 
#include <Adafruit_SHT31.h> //温湿度センサ(0~60)±0.2℃,(10~90)±2%
#include <Adafruit_BMP280.h> // 気圧センサ (300~1100)±1hPa
Adafruit_SHT31 sht3x = Adafruit_SHT31(&Wire);  //
Adafruit_BMP280 bme = Adafruit_BMP280(&Wire);  //
Ink_Sprite InkPageSprite(&M5.M5Ink);  //
float tmp = 0.0;                      // 浮動小数点 温度変数
float hum = 0.0;                      // 浮動小数点 湿度変数
float prs = 0.0;                      // 浮動小数点 気圧変数
char Strbuff[64];                     // 文字列
    
void setup() {
  M5.begin();                         // E-Ink,RTC,I2C,ブザーを初期化
  if (!M5.M5Ink.isInit()) {           // 初期化出来なければ
    Serial.printf("エラー Ink Init");  // シリアルモニタに表示
    while (1) delay(100);             // ずっと待つ
  }
  M5.M5Ink.clear();                   // 画像クリア
  delay(1000);                        // 1秒待つ
  if ( InkPageSprite.creatSprite(0, 0, 200, 200, true) != 0 ) {
                                      // 画像領域が作成できなければ
    Serial.printf("エラー Ink Sprite creat");  // シリアルモニタに表示
  }
  Wire.begin();      // Wireライブラリ初期化 ()はマスタとしてバスに接続
  Serial.println("ENV Unit2 test");    // シリアルモニタへ表示
  while (!sht3x.begin(0x44)) {         // SHT31が見つからなかったら
    Serial.println("not find SHT31");  // シリアルモニタへ表示
  }
  while (!bme.begin(0x76)) {           // BMP280が見つからなかったら
    Serial.println("not find BMP280"); // シリアルモニタへ表示
  }
}

void loop() {
  tmp = sht3x.readTemperature();       // センサーの温度を読取る
  hum = sht3x.readHumidity();          // センサーの湿度を読取る
  prs = bme.readPressure() / 100;      // センサーの圧力を読取る 単位変換
  Serial.printf("%4.1f'C %2.0f%% %4.0fhPa\r\n", tmp, hum, prs);//シリアルモニタへ表示
  sprintf(Strbuff, "  %4.1f'C  %2.0f%%  %4.0fhPa  ", tmp, hum, prs);  // 文字列作成
  InkPageSprite.drawString(0, 20, Strbuff);  // (x,y)に文字列を描く
  InkPageSprite.pushSprite();                // 画面更新
  delay(15000);                              // 15秒待つ(小さくしない事)
}