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]:温度の平均化回数
press_average[2:0]:圧力の平均化回数
power_mode[2:0]:電源モード設定
|
||||||||||||||||||||||||||||||||||||||||
| 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とパスワードの設定が必要