TOPに戻る

ラズパイ5 pythonの仮想環境 ⑤ 温湿度センサSHT45<その2>

 温湿度センサSHT45は、SHT3xの後に出てきたSHT4xの中でも確度の高いモデルです。

 SHT31は、このWebでも何度も取り上げています。

 Adafruitが販売している温湿度センサSHT4xボードは、執筆時点で3種類あります。I2Cバスのアクセスなどの使い方は、まったく同じです。

 

  SHT40 SHT41 SHT45
湿度  ±1.8% typ
(25~75%)
 ±1.8% typ
(25~75%)
 ±1% typ
(25~75%)
0 ~ 100% RH での標準確度は ±3% 0 ~ 100% RH での標準確度は ±2%  
温度 ±0.2 °C typ
(0~75 °C)
±0.2 °C typ
(0~75 °C)
±0.1 °C typ
(0~75 °C)

 I2Cのスレーブ・アドレスは0x44と0x45が利用できるが、工場出荷時の設定なので、ここで利用でするAdafruitの製品は0x44固定です。

AdafruitのStemma QT/Qwiicボード

 ボードの利用ページ

 Stemma QT/Qwiic(JST SH 4ピン)コネクタは2か所に装着されていて、どちらにつないでもかまいません。このコネクタを使ってI2Cで制御する場合、特に、ジャンパ線をつなぐなどは不要です。

 コネクタは、表と裏のどちらも差し込めそうですが、ピンが内部の上部に並んでいるので、差し込める方向は一意です。ロック機構はないですが、すぐに抜けるということはありません。

温湿度センサSHT45のおもなスペック

 SHT4xのデータシート

  • 電源電圧  1.08~3.6V
  • 平均供給電流 0.4 µA
  • 湿度 確度;±1.0%RH、分解能;0.01%RH 応答速度;4秒
  • 温度 確度;±0.1℃、分解能;0.01℃  応答速度;2秒
  • ヒータ内蔵
  • インターフェース I2C(0~400kHz)
  • スレーブ・アドレス 0x44(固定)

環境

  • ハードウェア Raspberry Pi 5(4GBモデル)
  • OS Raspberry Pi OS (64ビット)、リリース日December 5th 2023
  • Windows10 22H2にて、ssh(OpenSSH_9.2p1 Debian-2+deb12u2, OpenSSL 3.0.11 19 Sep 2023)および、VNC Viewerを動作させている


接続

smbus2を使う

 失敗しました。

 SHT31と同じようにアクセスできると考え、smbus2ライブラリを利用してプログラムを作りましたが、6バイトのデータ読み出し部分でI/Oエラーになりました。

 データシートによれば、I2Cバスからセンサのデータ読み出しは下記の仕様に従います(SHT3xとは異なる)。

i2c.write_byte(addr, 0xfd)
time.sleep(0.2)
data = i2c.read_block_data(addr,6)

 i2c.read_byte(addr)を使って1バイト目は読めるのですが、そのあとがI/Oエラーとなって読み出せません。

デバイス・ドライバを使う

  ラズパイ2023年10月更新 bookworm ④ 気圧センサBME280をデバイス・ドライバで利用

の中で、sht4xがサポートされていることがわかります。

Name:   i2c-sensor
Info:   Adds support for a number of I2C barometric pressure, temperature,
        light level and chemical sensors on i2c_arm
Load:   dtoverlay=i2c-sensor,<param>=<val>

...

 sht4x                   Select the Sensirion SHT4x temperature and
                                humidity sensors. Valid addresses 0x44-0x45,
                                default 0x44

 sudo nano /boot/firmware/config.txtを立ち上げ、最後の行に、次の1行を追加します。

dtoverlay=i2c-sensor,sht4x

 CTRL-Oで上書き保存をし、CTRL-Xでnanoを抜けます。rebootします。

 リブート後システムが立ち上がったら、I2Cバスにつながっているセンサを表示します。

 0x44のところはUUと表示され、SHT45のデバイス・ドライバが組み込まれたことを示しています。

 /sys/bus/i2c/devices/1-0044/hwmon/hwmon2

に、temp1_inputとhumidity1_inputのテキスト・ファイルができています。1-0044は1-0045かもしれません、hwmon2はhwmon3かもしれません。

$ cat /sys/bus/i2c/devices/1-0044/hwmon/hwmon2/temp1_input
20133
$ cat /sys/bus/i2c/devices/1-0044/hwmon/hwmon2/humidity1_input
38506

 どちらの千倍の整数値なので、20.133℃、38.506%だとわかります。

  読み出しのプログラムです。

import time
while 1:
    f = open('/sys/bus/i2c/devices/1-0044/hwmon/hwmon2/temp1_input')
    Temp = round(int(f.read()) / 1000.0, 1)
    f.close
    f = open('/sys/bus/i2c/devices/1-0044/hwmon/hwmon2/humidity1_input')
    Humi = round(int(f.read()) / 1000.0, 0)
    f.close

    message = "Temp : %sC, Humi : %sRH"
    print(message % (Temp, Humi))
    time.sleep(2)

 実行中の様子です。

 I2Cバスの様子です。

-