M5Stack用のセンサユニットの中に、「環境センサユニット」というものがありましたが(紹介記事は こちら)、このユニットに搭載されていた温湿度センサ「DHT12」が製造中止になったとのことで、この「環境センサユニット」も販売終了となってしまいました。
代替として、「M5Stack用環境センサユニット ver.2(ENV II)」というものが販売されていますので、今回はこのセンサユニットを使ってみようと思います。
このセンサユニットは、「PORT.A I2C」タイプなので、元々M5Stack BasicについているGROVEポート(PORT.A)につなぎます。
Arduino IDEのスケッチ例には、今のところ、このセンサユニット用のスケッチは入っていませんので、かわりにGitHubからサンプルプログラムをダウンロードします。
こちら にアクセスし、「ENVII.ino」、「Adafruit_Sensor.h」、「SHT3X.cpp」、「SHT3X.h」という4つのファイルをダウンロードし、「ENVII」というフォルダの中に格納します。
Arduino IDEで「ENVII.ino」を開き、M5Stackに書き込みます。
#include <M5Stack.h> #include <Wire.h> #include "Adafruit_Sensor.h" #include <Adafruit_BMP280.h> #include "SHT3X.h" SHT3X sht30; Adafruit_BMP280 bme; float tmp = 0.0; float hum = 0.0; float pressure = 0.0; void setup() { M5.begin(); Wire.begin(); M5.Lcd.setBrightness(10); M5.Lcd.setTextSize(3); Serial.println(F("ENV Unit(SHT30 and BMP280) test...")); while (!bme.begin(0x76)){ Serial.println("Could not find a valid BMP280 sensor, check wiring!"); M5.Lcd.println("Could not find a valid BMP280 sensor, check wiring!"); } M5.Lcd.clear(BLACK); M5.Lcd.println("ENV Unit test..."); } void loop() { pressure = bme.readPressure(); if(sht30.get()==0){ tmp = sht30.cTemp; hum = sht30.humidity; } Serial.printf("Temperatura: %2.2f*C Humedad: %0.2f%% Pressure: %0.2fPa\r\n", tmp, hum, pressure); M5.Lcd.setCursor(0, 0); M5.Lcd.setTextColor(WHITE, BLACK); M5.Lcd.printf("Temp: %2.1f \r\nHumi: %2.0f%% \r\nPressure:%2.0fPa\r\n", tmp, hum, pressure); delay(100); }
以下のとおり、正常に動作することが確認できました。
なお、私の手持ちの「環境センサユニット」は、M5StackとつなぐGROVEケーブルの長さを1メートル以上にすると正常動作しませんでしたが、今回購入した「環境センサユニット ver.2(ENV II)」は、2メートルのケーブルでつないでもきちんと動作しました。
ちなみに、以前の「環境センサユニット」のサンプルスケッチと、今回の「環境センサユニット ver.2」用サンプルスケッチのちがいは以下のとおりです。
#include <M5Stack.h> #include <M5Stack.h> #include <Wire.h> #include <Wire.h> #include "Adafruit_Sensor.h" #include "Adafruit_Sensor.h" #include <Adafruit_BMP280.h> #include <Adafruit_BMP280.h> #include "DHT12.h" | #include "SHT3X.h" DHT12 dht12; | SHT3X sht30; Adafruit_BMP280 bme; Adafruit_BMP280 bme; void setup() { void setup() { M5.begin(); M5.begin(); Wire.begin(); Wire.begin(); M5.Lcd.setBrightness(10); M5.Lcd.setBrightness(10); while (!bme.begin(0x76)){ while (!bme.begin(0x76)){ Serial.println("Could not find a Serial.println("Could not find a M5.Lcd.println("Could not find a M5.Lcd.println("Could not find a } } M5.Lcd.clear(BLACK); M5.Lcd.clear(BLACK); M5.Lcd.println("ENV Unit test..."); M5.Lcd.println("ENV Unit test..."); } } void loop() { void loop() { float pressure = bme.readPressure() float pressure = bme.readPressure() float tmp = dht12.readTemperature() | if(sht30.get()==0){ float hum = dht12.readHumidity(); | float tmp = sht30.cTemp; > float hum = sht30.humidity; > } Serial.printf("Temperatura: %2.2f*C Serial.printf("Temperatura: %2.2f*C M5.Lcd.setCursor(0, 0); M5.Lcd.setCursor(0, 0); M5.Lcd.setTextColor(WHITE, BLACK); M5.Lcd.setTextColor(WHITE, BLACK); M5.Lcd.printf("Temp: %2.1f \r\nHumi M5.Lcd.printf("Temp: %2.1f \r\nHumi delay(100); delay(100); } }
なお、私がM5Stack、M5StickCの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。
ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。
このサイトで書いている、M5Stackシリーズ(M5Stack、M5StickCなど)に関するブログ記事を、「さとやまノート」という別のブログページに、あらためて整理してまとめました。
他のM5Stackシリーズの記事にも興味のある方は「さとやまノート」をご覧ください。