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