akira.keiのアイコン画像
akira.kei 2026年06月21日作成 © MIT
セットアップや使用方法 セットアップや使用方法 閲覧数 24
akira.kei 2026年06月21日作成 © MIT セットアップや使用方法 セットアップや使用方法 閲覧数 24

Arduino IDEでI2C接続温湿度センサーを使う(その3):SHT31

<前の記事 : 次の記事>

お次はSHT31を使ってみる

AHT21B、SHT40iときて次はSHT31だ。名前の冒頭にSHTが付いているSHT40iとほぼ同じような感じなんだが、より高精度なのかも知れない。これも機能は多いが単純な単発測定のみを使うような構成としておく。アドレスは0x44と0x45が切り替えられるので、2台を同じバスに接続できる。
SHT31モジュール

これも自前ライブラリの構成を同じにしてあるので、スケッチは名前違いでほぼ同じ内容になる。

SHT31libTest.ino

#include "Wire.h" #include "SHT31.h" SHT31 meas=SHT31(0x45); void setup() { Serial.begin(115200); Wire.begin(); meas.begin(); } byte cnt=0; void loop() { meas.measure(); Serial.print(cnt++); Serial.print(", SHT31, MEAS-T-H. "); Serial.print(meas.temperature()); Serial.print(", "); Serial.println(meas.humidity()); delay(1000); }

ライブラリ本体「SHT31.cpp」

ヘッダファイルの内容はSHT40iやAHT21Bと同じ(名前だけ違う)ので割愛して、ライブラリ本体の特徴点だけ以下に示す。データシートに基づきbeginではソフトウェアリセットをかけている。

begin

void SHT31::begin(void) { delay(100); Wire.beginTransmission(_adrs); Wire.write(0x30); Wire.write(0xA2); Wire.endTransmission(); delay(5); }

measureでは繰り返し精度「高」でクロックストレッチ無効の単発測定を指示している。クロックストレッチ無効なので、測定時間をdelayで待ってからデータ取得を行なった。CRCのチェックはやっていない。

measure

void SHT31::measure(void) { Wire.beginTransmission(_adrs); Wire.write(0x24); Wire.write(0x00); Wire.endTransmission(); delay(15); Wire.requestFrom((int)_adrs,(int)6); byte i=0; while(Wire.available()) data[i++]=Wire.read(); Wire.endTransmission(); }

temperature()およびhumidity()は共にfloat型の関数だが、将来的には固定小数点+シフト演算で考え直すかも知れない。
キャプションを入力できます
手元の温湿度計が「29.5℃、68%」なので精度はまぁまぁといたところか。どっちが合ってるのかは分からない。


<前の記事 : 次の記事>

akira.keiのアイコン画像
機械系エンジニアだが電子工作を趣味としている。週末はひとりバーベキュー。
  • akira.kei さんが 前の日曜日の21:46 に 編集 をしました。 (メッセージ: 初版)
ログインしてコメントを投稿する