M5Stack Core2 for AWSでCO2センサ温湿度センサ「SHT21」を使って温湿度を検出します。プログラムの開発は、「Arduino IDEでM5Stack Core2 for AWSの開発環境の構築」で構築したArduino IDEを用い、温湿度センサ「SHT21」は、M5Stack Core2 for AWSのポートAを使用し、I2Cを使って接続します。

M5Stack Core2 for AWSとSHT21との接続

M5Stack Core2 for AWSと温湿度センサ「SHT21」の結線を次に示します。「Raspberry Pi 3に温湿度センサ「SHT21/SHT11」を接続」にSHT21の仕様と接続ピン番号を示します。「M5Stack Core2 for AWSでMH-Z19Cを使ってCO2の検出」にPort Aの信号名称を示します。

M5Stack Core2 (Port A) SHT21
5V VDD
GND VSS
SDA SDA
SCL SCL

M5Stack Core2 for AWSと温湿度センサ「SHT21」の接続画像を次に示します。

M5Stack Core2 for AWSとSHT21との接続確認プログラム

M5Stack Core2 for AWSでI2Cアドレスをスキャンするプログラム「i2c_scanner_M5Core2.ino」を次に示します。「Pro MicroによるOLEDディスプレイ への表示」ですでにI2Cアドレスをスキャンするプログラム「i2c_scanner.ino」をすでに作成しましたが、M5Stack Core2 for AWSでは「I2Cインタフェースには、G21,G22の内部用と、Port AにつながっているG32,33共用ピン(デフォルトI2C)の2系統がある」、「Port Aに対して、5vを供給するために電源管理「AXP192」を制御する必要がある」の理由のために使用できません。

  • 1行目で「M5Core2.h」をインクルードします。
  • 8行目と9行目でM5Stack Core2 for AWSの設定とPort Aに対して、5vを供給します。
  • 12行目でSerial設定を無効にします。Serial設定はすでに行われており、通信速度は115200bpsになります。
  • 35-58行目はPort A用、60-83行目は内部用で、それぞれWireとWire1を使用します。

i2c_scanner_M5Core2.ino

#include <M5Core2.h>
#include <Wire.h>

#define SDA  4
#define SCL  5

void setup() {
  M5.begin(true, true, true, false);
  M5.Axp.SetCHGCurrent(AXP192::kCHG_100mA);

  Wire.begin();
 // Serial.begin(9600);
//  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner External");

  Serial.println("     0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F");
  for (byte n = 0; n <= 0x7F; n++) {  // I2Cアドレスを指定
    adrCheck(n);                      // デバイス有無を調べ結果を出力
  }
  Serial.println();
  
  Serial.println("\nI2C Scanner Internal");

  Serial.println("     0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F");
  for (byte n = 0; n <= 0x7F; n++) {  // I2Cアドレスを指定
    adrCheck_wire1(n);                      // デバイス有無を調べ結果を出力
  }
  Serial.println();
}

void loop() {

}

void adrCheck(byte adr) {
  byte    dummy;

  if ((adr & 0x0F) == 0) {
    print_hex2chr(adr);
    Serial.print(":");
  }
  Serial.print(" ");
 
  if (adr < 8 || adr > 0x77) {
    Serial.print("xx");
  } else {
    Wire.beginTransmission(adr);
    Wire.write(&dummy, 0);
    if (Wire.endTransmission() == 0) {
      print_hex2chr(adr);
    } else {
      Serial.print("--");
    }
  }
  if ( (adr & 0x0F) == 0x0F) {
    Serial.println();
  }
}

void adrCheck_wire1(byte adr) {
  byte    dummy;

  if ((adr & 0x0F) == 0) {
    print_hex2chr(adr);
    Serial.print(":");
  }
  Serial.print(" ");
 
  if (adr < 8 || adr > 0x77) {
    Serial.print("xx");
  } else {
    Wire1.beginTransmission(adr);
    Wire1.write(&dummy, 0);
    if (Wire1.endTransmission() == 0) {
      print_hex2chr(adr);
    } else {
      Serial.print("--");
    }
  }
  if ( (adr & 0x0F) == 0x0F) {
    Serial.println();
  }
}
 
void print_hex2chr(byte x) {
  Serial.print((x >> 4), HEX);
  Serial.print((x & 0x0F), HEX);
}

プログラム「i2c_scanner_M5Core2.ino」を実行すると、次のようにI2Cアドレスがシリアルモニタに表示されます。
【PortA用】
0x40: SHT21

【内部用】
0x34: Axp192
0x38: CST Touch
0x51: BM8563
0x68: IMU6886

温湿度検出プログラムの作成

温湿度検出プログラム「SHT21_Demo.ino」は「e-radionicacom/SHT21-Arduino-Library」からzipファイル形式でダウンロードし、メニューから「スケッチ」→「ライブラリをインクルード」→「.zip形式のライブラリをインクルード」を開き、ダウンロードしたzipファイルを読み込みます。

温湿度検出プログラム「SHT21_Demo.ino」は、次のようにメニューから[ファイル | →「スケッチ例」→「SHT21-arduino-xxx」にある 「SHT21_Demo」をベースにします。

M5Stack Core2 for AWSで実行するために次のように変更します。

  • 1行目で「M5Core2.h」をインクルードします。
  • 110行目と11行目でM5Stack Core2 for AWSの設定とPort Aに対して、5vを供給します。
  • 15行目でSerial設定を無効にします。M5Stack Core2 for AWSの場合Serial設定はすでに行われており、通信速度は115200bpsになります。

SHT21_Demo.ino

#include <M5Core2.h>
#include <SHT21.h>  // include SHT21 library

SHT21 sht; 

float temp; 	// variable to store temperature
float humidity; // variable to store hemidity

void setup() {
  M5.begin(true, true, true, false);
  M5.Axp.SetCHGCurrent(AXP192::kCHG_100mA);


  Wire.begin();		// begin Wire(I2C)
//  Serial.begin(9600); // begin Serial
    ・・・

温湿度検出プログラムの実行

温湿度検出プログラム「SHT21_Demo.ino」を実行すると、次のように温度と湿度がシリアルモニタに表示されます。