08.Wio Terminalで温湿度・気圧表示


08.Wio Terminalで温湿度・気圧表示

Wio TerminalにM5Stack用 ENV IIセンサーを接続して、温湿度と気圧を測定し、画面表示します。スケッチは、"06.CoreInkで温湿度・気圧測定"を修正しました。ENV IIを使用したことが無い場合はそのライブラリのインストールが必要です。

センサー

以前購入したM5Stack用環境センサユニット ENV IIを使用します。購入時は税込572円でした。
https://docs.m5stack.com/en/unit/envII

特性

・(0〜60)±0.2℃
・(10〜90)±2%RH
・(300〜1100)±1hPa

回路

・温湿度センサIC SHT30 (I2C:0x44)
・絶対大気圧センサIC BMP280 (I2C:0x76)
・Vccから3端子レギュレータHT7533(Holtek)で3.3Vを作っている。
・上記2つのセンサICの電源電圧は3.3Vです。
・出力CNのSCLとSDAのみ、各4.7kΩでVccと接続。

コネクタ

1 I2C_SCL
2 I2C_SDA
3 Vcc(5V)
4 GND

ENV IIの3.3V動作

ENV2に入っている3端子レギュレータは、HT7533(Holtek)で
https://www.holtek.com/search?key=HT7533
-1,-2,-3,-7の4つのシリーズがあり
・Vin=30Vmax
・Vout=3.3V±1~3%(シリーズによる)
・Iout=0.1A
・入力電圧が下がった時の入出力電圧差は下記条件の時の最大値で、
 HT7533-3は100mV、
 HT7533-1と2は55mV、
 HT7533-7は30mV
 条件:Iout=1mA,VinがVout+2Vの時のVout値から2%まで変化
よって、Vin=3.3Vの時、Voutはそれほど下がらず、3.0V以上かと思われます。一方、センサーICは、
・SHT3x-DIS(SENSIRION)が
 Vcc=2.15~5.5V
 測定中のIcc=0.60mAtyp
・BMP280(BOSCH)が
 Vcc=1.71~3.6V
 測定中のIcc=0.72mAtyp
なのでセンサーの電源電圧は範囲内と思われます。センサーを開けての電圧を測定すればわかるのですが。

ENV III

現在、スイッチサイエンスから購入できるのはENV IIIです。送料別913円
・温湿度センサIC SHT30 (0x44)
・気圧センサIC QMP6988 (0x70)
https://docs.m5stack.com/en/unit/envIII?id=description

Wio Terminalのコネクタ

ここでは、本体左側のCNに接続しました。
1 SCL(40pinCNの5番pin)
2 SDA(40pinCNの3番pin)
3 Vcc(3.3V)
4 GND
ENV IIのコネクタがそのまま接続できます。

スケッチ


// ENV2で温湿度・気圧表示 ENV2.ino
#include <Adafruit_SHT31.h>  // 温湿度センサIC使用(0~60)±0.2℃,(10~90)±2%
#include <Adafruit_BMP280.h> // 気圧センサIC使用 (300~1100)±1hPa
#define LGFX_AUTODETECT      // LovyanGFX対応機種を自動認識
#include <LovyanGFX.hpp>     // LovyanGFXを使用
static LGFX lcd;             // LGFXのインスタンスを作成
Adafruit_SHT31 sht3x = Adafruit_SHT31(&Wire); //
Adafruit_BMP280 bme = Adafruit_BMP280(&Wire); //
float tmp = 0.0, hum = 0.0, prs = 0.0;        // 浮動小数点 温度,湿度,気圧

void setGamen() {                    // 画面初期設定関数
  lcd.init();                        // LCD初期化
  lcd.setBrightness(64);             // バックライト輝度(暗0-255明)
  lcd.setRotation(1);                // LCD表示向き
  lcd.setFont(&lgfxJapanGothic_20);  // ゴシック固定長 縦ドット(16,20,24,28,32)
  lcd.setTextScroll(true);           // 画面下端に到達後スクロール
  //lcd.setScrollRect(0, 0, lcd.width(), lcd.height());//スクロール範囲(X,Y,W,H)
  lcd.setTextSize(1.0);                   // 文字サイズ(幅倍数)
  lcd.setTextColor(TFT_GREEN, TFT_BLACK); // (文字色,背景色)
  lcd.setCursor(0, 0);                    // 画面左上から開始
}

void setup() {
  setGamen();                   // 表示画面の初期設定関数へ
  Wire.begin();                 // Wireライブラリ初期化 ()はマスタとしてバスに接続
  while (!sht3x.begin(0x44)) {  // SHT31が見つからなかったら
    lcd.println("ENV2 未接続");  // 表示
  }
  while (!bme.begin(0x76)) {    // BMP280が見つからなかったら
    lcd.println("ENV2 未接続");  // 表示
  }
}
void loop() {
  tmp = sht3x.readTemperature();       // センサーの温度を読取る
  hum = sht3x.readHumidity();          // センサーの湿度を読取る
  prs = bme.readPressure() / 100;      // センサーの圧力を読取る 単位変換
  lcd.printf(" %4.1f℃ %2.0f%% %4.0fhPa\n", tmp, hum, prs); // 表示
  delay(10000);                        // 10秒待つ 更新周期
}
* フラッシュメモリの54%を使用。