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」を実行すると、次のように温度と湿度がシリアルモニタに表示されます。



