M5Stack ENV Hat, ENV Unit, ENV II Unitを比べてみた

概要

ENV系のセンサーが3つ揃ったので、同時に動かして数値の変化を確認してみました。

環境

すべてのセンサーで気圧用にBMP280が入っており、同じI2CアドレスなのでPaHUBを利用して接続しています。

スケッチ

#include <DHT12.h>                            // http://librarymanager/All#DHT12                    https://github.com/RobTillaart/DHT12
#include <Adafruit_BMP280.h>                  // http://librarymanager/All#Adafruit_BMP280_Library  https://github.com/adafruit/Adafruit_BMP280_Library
#include <Adafruit_SHT31.h>                   // http://librarymanager/All#Adafruit_SHT31           https://github.com/adafruit/Adafruit_SHT31
#include <SparkFun_I2C_Mux_Arduino_Library.h> // http://librarymanager/All#SparkFun_I2C_Mux         https://github.com/sparkfun/SparkFun_I2C_Mux_Arduino_Library

// ENV HAT
DHT12 DHT_env_hat(&Wire1);
Adafruit_BMP280 bmp_env_hat(&Wire1);

// PaHUB Unit
const int PaHub_I2C_ADDRESS = 0x70;
QWIICMUX i2cMux;

// ENV Unit
#define ENV_CH 1
DHT12 DHT_env_unit(&Wire);
Adafruit_BMP280 bmp_env_unit(&Wire);

// ENV2 Unit
#define ENV2_CH 2
Adafruit_SHT31 sht3x = Adafruit_SHT31(&Wire);
Adafruit_BMP280 bmp_env2_unit(&Wire);

void setup() {
  Serial.begin(115200);
  delay(1000);

  // Hat
  Wire1.begin(0, 26);
  if (!bmp_env_hat.begin(0x76)) {
    Serial.println("HAT: Could not find a valid BMP280 sensor, check wiring!");
  }

  // Unit
  Wire.begin(32, 33);
  i2cMux.begin(PaHub_I2C_ADDRESS, Wire);

  // ENV Unit
  i2cMux.setPort(ENV_CH);
  if (!bmp_env_unit.begin(0x76)) {
    Serial.println("ENV: Could not find a valid BMP280 sensor, check wiring!");
  }

  // ENV2 Unit
  i2cMux.setPort(ENV2_CH);
  if (!sht3x.begin(0x44)) {
    Serial.println("ENV2: Could not find a valid SHT3X sensor, check wiring!");
  }
  if (!bmp_env2_unit.begin(0x76)) {
    Serial.println("ENV2: Could not find a valid BMP280 sensor, check wiring!");
  }
}

void loop() {
  // ESP32
  Serial.print(temperatureRead(), 2);
  Serial.print(",\t");

  // ENV HAT
  DHT_env_hat.read();
  Serial.print(DHT_env_hat.getTemperature(), 2);
  Serial.print(",\t");
  Serial.print(DHT_env_hat.getHumidity(), 2);
  Serial.print(",\t");
  Serial.print(bmp_env_hat.readTemperature());
  Serial.print(",\t");
  Serial.print(bmp_env_hat.readPressure());
  Serial.print(",\t");

  // ENV Unit
  i2cMux.setPort(ENV_CH);
  DHT_env_unit.read();
  delay(30);
  Serial.print(DHT_env_unit.getTemperature(), 2);
  Serial.print(",\t");
  Serial.print(DHT_env_unit.getHumidity(), 2);
  Serial.print(",\t");
  Serial.print(bmp_env_unit.readTemperature());
  Serial.print(",\t");
  Serial.print(bmp_env_unit.readPressure());
  Serial.print(",\t");

  // ENV2 Unit
  i2cMux.setPort(ENV2_CH);
  delay(30);
  Serial.print(sht3x.readTemperature(), 2);
  Serial.print(",\t");
  Serial.print(sht3x.readHumidity(), 2);
  Serial.print(",\t");
  Serial.print(bmp_env2_unit.readTemperature());
  Serial.print(",\t");
  Serial.print(bmp_env2_unit.readPressure());
  Serial.print(",\t");

  Serial.println();
  delay(5000);
}

PaHUBで切り替えた直後にSHT30のデータが不安定になりましたので、30ミリ秒のdelayを追加しました。PaHUBはちょっと確認してから使わないとだめですね。

5秒間隔で30分のデータを取ってみました。まずはこのスケッチを転送してから電源をOFFにして、少し時間おいてからデータを取得しています。

結果

CPUの温度は変化ありませんでした。まったく動きがないのが逆に怖いです、、、

ENV HATは動作した直後から温度が上がり始めます。動かして10分程度で3度ぐらい温度があがっていますね。他のセンサーは特に変動なしです。BMP280の温度センサーは気圧補正用なのであまり精度は高くありませんので参考値になります。

湿度ではENV HATだけが下がっています。温度が上がれば相対的に湿度も下がりますよね。。。

気圧はどれも同じ動きですね。まあ同じセンサーなのですが、HATで温度の影響受けないんですね。

精度は?

これはすみません。正しいと思われる温湿度計がありませんのでわかりません。家にある複数の温湿度計がそもそも数値結構違うんですよね。。。

まとめ

台風シーズンにむけて、気圧を測るのであればENV HATで問題なさそうです。温度を測るのであれば常に動かしっぱなしで、高めにでている温度を相対的変化で参考にするほうがいいのかな。。。

ENVユニットとENV IIユニットで精度はセンサー的には新しいENV IIの方が高いはずですが、実際のところ、校正されている温度計持っている人が検証しないとわからないです。。。

とはいえ、現在販売されているのはENV IIユニットになるので、これから購入するのであればHATよりUNITをおすすめします。

コメントする

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

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