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_SCL2 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%を使用。