概要
現在日本未発売のENV IIユニットを入手したので、使ってみたいと思います。これまで販売されていたENVユニットが廃盤となり、センサー部分が変更されたENV IIが発売されました。
もうしばらくしたら日本でも販売されると思います。
情報
DHT12からSHT30に温湿度計が変更されています。性能的にはSHT30の方が高いはずです。気圧はBMP280のままになります。
| SHT30 | DHT12 | |
| 温度測定範囲 | -40 ~ 120 ℃ | -20 ~ 60 ℃ |
| 温度精度 | 0 ~ 60 ℃/±0.2℃ | 10 ~ 30 ℃±0.5℃ |
| 湿度測定範囲 | 0 ~ 100 %RH | 20 ~ 95 %RH |
| 湿度精度 | 10 ~ 90 %RH±2% | 40 ~ 80 %RH±4% |
M5Stack社の資料が間違っている気がするのでデータシートから拾いなおしています。SHT30はマイナスの温度帯はちょっと精度が落ちます。SHT31やSHT35という同じシリーズで、精度が違うものがありますがアクセスの方法はすべて一緒です。
上記に少しまとめていますがDHT12は扱っていませんね、、、
M5StickCでの使い方(GitHub)
/*Please install the < Adafruit BMP280 Library > (https://github.com/adafruit/Adafruit_BMP280_Library)
< Adafruit SHT31 Library > (https://github.com/adafruit/Adafruit_SHT31)
from the library manager before use.
This code will display the temperature, humidity and air pressure information on the screen*/
#include <M5StickC.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_SHT31.h>
Adafruit_SHT31 sht3x = Adafruit_SHT31(&Wire);
Adafruit_BMP280 bme = Adafruit_BMP280(&Wire);
float tmp = 0.0;
float hum = 0.0;
float pressure = 0.0;
void setup() {
M5.begin();
M5.Lcd.setRotation(3);
M5.Lcd.setTextSize(2);
Wire.begin(32, 33);
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!");
}
while (!sht3x.begin(0x44)) {
Serial.println("Could not find a valid SHT3X sensor, check wiring!");
M5.Lcd.println("Could not find a valid SHT3X sensor, check wiring!");
}
M5.Lcd.fillScreen(BLACK);
M5.Lcd.println("ENV Unit test...");
}
void loop() {
pressure = bme.readPressure();
tmp = sht3x.readTemperature();
hum = sht3x.readHumidity();
Serial.printf("Temperatura: %2.2f*C Humedad: %0.2f%% Pressure: %0.2fhPa\r\n", tmp, hum, pressure / 100);
M5.Lcd.setCursor(0, 16);
M5.Lcd.setTextColor(WHITE, BLACK);
M5.Lcd.printf("Temp:%2.2f*C\n", tmp);
M5.Lcd.printf("Humi:%2.2f%%\n", hum);
M5.Lcd.printf("Prs :%2.0fhPa\n", pressure / 100);
delay(1000);
}
まだM5StickC公式のスケッチ例がありません。M5stack用はBMP280はAdafruitのライブラリで、SHT30はスケッチにライブラリを同梱していまいた。
上記スケッチ例は両方ともAdafruitのライブラリを利用して、1ファイルだけで動くようにしています。また、気圧がPa表記だったのを一般的なhPa表記にしてあります。

UIFlowの場合には、ユニットにENV IIを追加すればすぐに使うことができました。
ATOMの場合(GitHub)
/*Please install the < Adafruit BMP280 Library > (https://github.com/adafruit/Adafruit_BMP280_Library)
< Adafruit SHT31 Library > (https://github.com/adafruit/Adafruit_SHT31)
from the library manager before use.
This code will display the temperature, humidity and air pressure information on the screen*/
#include <M5Atom.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_SHT31.h>
Adafruit_SHT31 sht3x = Adafruit_SHT31(&Wire1);
Adafruit_BMP280 bme = Adafruit_BMP280(&Wire1);
float tmp = 0.0;
float hum = 0.0;
float pressure = 0.0;
void setup() {
M5.begin();
Wire1.begin(26, 32);
Serial.println(F("ENV Unit(SHT30 and BMP280) test..."));
while (!bme.begin(0x76)) {
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
}
while (!sht3x.begin(0x44)) {
Serial.println("Could not find a valid SHT3X sensor, check wiring!");
}
}
void loop() {
pressure = bme.readPressure();
tmp = sht3x.readTemperature();
hum = sht3x.readHumidity();
Serial.printf("Temperatura: %2.2f*C Humedad: %0.2f%% Pressure: %0.2fhPa\r\n", tmp, hum, pressure / 100);
delay(100);
}
ATOMの場合にはMatrixが内部でI2Cを利用しているので、GROVEでI2Cを接続する場合にはWire1を利用するように設定したほうが安全です。ATOM Lite、Matrix、Echoはすべて同じプログラムで動作しました。
M5Stackの場合(GitHub)
/*Please install the < Adafruit BMP280 Library > (https://github.com/adafruit/Adafruit_BMP280_Library)
< Adafruit SHT31 Library > (https://github.com/adafruit/Adafruit_SHT31)
from the library manager before use.
This code will display the temperature, humidity and air pressure information on the screen*/
#include <M5Stack.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_SHT31.h>
Adafruit_SHT31 sht3x = Adafruit_SHT31(&Wire);
Adafruit_BMP280 bme = Adafruit_BMP280(&Wire);
float tmp = 0.0;
float hum = 0.0;
float pressure = 0.0;
void setup() {
M5.begin();
M5.Lcd.setTextSize(2);
Wire.begin(21, 22);
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!");
}
while (!sht3x.begin(0x44)) {
Serial.println("Could not find a valid SHT3X sensor, check wiring!");
M5.Lcd.println("Could not find a valid SHT3X sensor, check wiring!");
}
M5.Lcd.fillScreen(BLACK);
M5.Lcd.println("ENV Unit test...");
}
void loop() {
pressure = bme.readPressure();
tmp = sht3x.readTemperature();
hum = sht3x.readHumidity();
Serial.printf("Temperatura: %2.2f*C Humedad: %0.2f%% Pressure: %0.2fhPa\r\n", tmp, hum, pressure / 100);
M5.Lcd.setCursor(0, 16);
M5.Lcd.setTextColor(WHITE, BLACK);
M5.Lcd.printf("Temp:%2.2f*C\n", tmp);
M5.Lcd.printf("Humi:%2.2f%%\n", hum);
M5.Lcd.printf("Prs :%2.0fhPa\n", pressure / 100);
delay(1000);
}
Fireで動作確認しました。I2C用のAポートにユニットを接続して使います。
まとめ
そろそろ台風のシーズンなので、ENV IIユニットが日本でも早く発売されないですかね、、、




コメント
気圧が測定したいと思い、以前購入していたENV HATを動かしてみました。
本体(M5StickC)に直接接続するようになっているので、連続動作でデータを取得すると
温度が3度ぐらい上昇。Deep Sleepを使っても、少し高く出るようです。
いろいろ、対策を検討していたところ、ENVIIが発売。早速購入。現在基準としている温度計と差分が0.1度程度で一安心しました。
台風シーズンをモニタリングする予定です。
やっぱりずれますよね。。。
ENV HATとENVとENV IIを同時に動かして今度検証してみます