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の使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。
ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。