ゆるく楽しむプログラミング
> トップページ > 電子工作とプログラミング > 検証・実験 > M5Stack ENVⅢ温湿度・気圧センサー

ENVⅢ

M5Stack / M5StickC用の 環境センサー Unit / Hatです。

ENVⅢ Unit / ENVⅢ Hat
Amazonでも買えますが、スイッチサイエンスで買った方が安いです。

UintはGroveコネクタでの接続になっており、Groveコネクタを備えたマイコンであれば使用できます。
HatはM5StackC用になっていますが、中身はUnitと同じなので変換コネクタを作成すれば他のマイコンでも利用可能です。

SHT30 温湿度センサー
QMP6988 気圧センサーで構成されています。

仕様は M5Stack ENVの製品ページから参照できます。
SHT30の仕様
QMP6988の仕様

SHT30 温湿度センサー

I2C接続 : I2Cアドレス 0x44

ソフトウエアリセット手順
0x30 0xA2を送信
10ミリ秒待つ

温湿度読み取り手順
0x2C 0x06 を送信
15ミリ秒待つ 
6バイト読み出し
CRC計算
CRCチェック
データの正規化

読み出したデータとCRC
[0] 気温 [16:9] 16bit
[1] 気温 [8:1] 16Bit
[2] 気温のCRC
[3] 湿度 [16:9] 16bit
[4] 湿度 [8:1] 16bit
[5] 湿度のCRC

CRCは CRC8-Dallas/Maxim 、初期値は0XFFで左ローテート
生成多項式は 1 + x^4 + x^5 + x^8 => B100110001 => 0x31

データの正規化
読み取ったデータはセンサーの計測値なので、それぞれデータシートで定義された物理量(温度℃、相対湿度%RH)に正規化します。

センサーから読み取った16ビット値を
温度 = rawT
湿度 = rawH
とします。

正規化式
温度℃ = -45 + 175 * (rawT / 65535)
湿度% = 100 * (rawH / 65535)
となります。 ※実数型で計算しないと正しく変換できないので注意

QMP6988 気圧センサー

I2C接続 : I2Cアドレス 0x70

レジスタマップ
アドレス 内容  備考 
A0

B8
レジスタ補正値  
D1 Chip ID 0x5C 固定 
E0 RESET 0xE6 の入力でソフトリセット
F0 IIR_CNT
F2 I2C_SET  
F3 DEVICE_STAT [bit:2」measure: 測定の状態
[bit:0]otp_update: OTPデータアクセスの状態
F4 CTRL_MEAS temp_average[2:0]:温度の平均化回数
000 001 010 011 100 101 110 111
Skip 1 2 4 8 16 32 64

press_average[2:0]:圧力の平均化回数
000 001 010 011 100 101 110 111
Skip 1 2 4 8 16 32 64

power_mode[2:0]:電源モード設定
00 01 10 11
sleep mode force mode normal mode
F5 IO_SETUP t_standby[3:0]:スタンバイ時間設定
spi3w:SPIモード設定(4線式または3線式)
spi3_sdim:SDI端子の出力タイプ選択
F7 PRESS_TXD2  気圧データ [24:17] 24bit
F8 PRESS_TXD1 気圧データ[16:9] 24bit
F9 PRESS_TXD0 気圧データ[8:1] 24bit
FA TEMP_TXD2 気温データ[24:17] 24bit 
FB TEMP_TXD1 気温データ[16:9] 24bit 
FC TEMP_TXD0 気温データ[8:1] 24bit 

初期化手順
0xE0(RESET)に0xE6を書き込み
20ミリ秒待つ
0xE0(RESET)に0x00を書き込み
キャリブレーション値(0xA0~25Byte)を読み込む
0xF4(CTRL_MEAS)に平均化回数を書き込む

ライブラリの使用をお勧めします

気温・気圧の読み取り

気温・気圧のRawデータはレジスタ 0xF7~0xFCの6Byte(24Bit値)ですが、この値は単なるレジスタ値で
0xA0~0xB8に書き込まれているレジスタ補正値を使用して正規化する必要があります。
レジスタ補正値も読み出した値のままでは使用できず固定小数点値に変換する必要があります。
各補正値は符号付16~64Bitの整数値でレジスタ毎に異なり、 仕様書から変換式を拾うのが面倒です。
私は拾いきれなくてAIに変換式を書いてもらいました。

ENVⅢのライブラリを使用した方が手っ取り早いです。
GitHUB のENVⅢのライブラリソースフォルダにある
QMP6988.h / QMP6988.cpp 、SHT3X.h / SHT3X.cpp をスケッチフォルダに持ってきた方が確実です。

温湿度・気圧の変化をグラフ表示するサンプル

ENVⅢから取得した温湿度・気圧を表示し、時間経過のグラフにしているだけなので
ちょっと見た目の良いサンプルスケッチ位の感じです。

M5Stack BASIC版はNTPから現在時刻を取得している都合でWi-Fi接続が必要です。
※ SSIDとパスワードの設定が必要

 Unit_ENVIII_STICK.zip ※ M5StickC Plus/M5StickC Plus2/M5StickS3用

 Unit_ENVIII-BASIC.zip ※ M5Stack BASIC用

解説動画

 チャンネル登録はコチらから