M5Stack社ENV II Unitを使う

概要

現在日本未発売のENV IIユニットを入手したので、使ってみたいと思います。これまで販売されていたENVユニットが廃盤となり、センサー部分が変更されたENV IIが発売されました。

もうしばらくしたら日本でも販売されると思います。

情報

DHT12からSHT30に温湿度計が変更されています。性能的にはSHT30の方が高いはずです。気圧はBMP280のままになります。

SHT30DHT12
温度測定範囲-40 ~ 120 ℃-20 ~ 60 ℃
温度精度0 ~ 60 ℃/±0.2℃10 ~ 30 ℃±0.5℃
湿度測定範囲0 ~ 100 %RH20 ~ 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ユニットが日本でも早く発売されないですかね、、、

2件のコメント

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

    1. やっぱりずれますよね。。。
      ENV HATとENVとENV IIを同時に動かして今度検証してみます

コメントする

メールアドレスが公開されることはありません。

管理者承認後にページに追加されます。公開されたくない相談はその旨本文に記載するかTwitterなどでDM投げてください。またスパム対策として、日本語が含まれない投稿は無視されますのでご注意ください。