概要
現在日本未発売の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を同時に動かして今度検証してみます