M5Stackで「環境センサユニット ver.2(ENV II)」を使う

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シリーズの記事にも興味のある方は「さとやまノート」をご覧ください。