Raspberry Pi 電子工作 03:温度・湿度センサー(I2C接続)

Raspberry Piに「I2C」規格(?)に対応したセンサーであれば、比較的楽に、同様の方法で制御できます。

基本的には何かのセンサーをつなぐことが多いようですが、今回はその基本、温度と湿度センサーです。

 

1. 温度・湿度センサー

  今回は、購入したセットに入っていた「SHT3X-DIS」というセンサーを使用します。たいていのセットに入っているようです。

 

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Raspberry Pi用Adeept Ultimate 初心者向け学習キット
価格:6885円(税込、送料別) (2021/1/3時点)

楽天で購入

 


 

 

2. I2Cの有効化

  「Raspberry Pi の設定」から、「インターフェース」タブの「I2C」を「有効」として「OK」を押下するだけです。

f:id:kobatom5278:20210103112913j:plain

I2Cの有効化

3. I2Cの有効化の確認

  「LXTerminal」にて、以下コマンドを実行します。有効化されていれば、表のようなものが出力されます。

  無効化の場合は「Could not open file」とエラーになります。

  現状、何もつながっていないので、すべて「- -」となっています。

i2cdetect -y 1

 

4. 配線

  ポイントは「SDA」「SCL」でしょうか。抵抗などは不要で、電源は3V」でよいようです。

f:id:kobatom5278:20210103115247p:plain

03:温度湿度センサー

5. I2Cの有効化の確認(センサーの確認)

  「LXTerminal」にて、再度、以下コマンドを実行します。

  どこかが「- -」ではなく、数字になっていると思います。

  これが、接続した機器のI2Cアドレスとなるようです。(おそらくは「44」)

i2cdetect -y 1

 

6. Pythonソースコード

  接続した機器で取得できる温度と湿度を表示するプログラムです。

  なお、データシートを基にコマンドや換算式を組みます。

  ~ データシート:SHT3x-DIS ~

https://strawberry-linux.com/pub/Sensirion_Humidity_SHT3x_DIS_Datasheet_V3_J.pdf

 

  このコードはSSH接続したVisualStudioCodeで実行できます。

  実行すると、温度と湿度が「ターミナル」ウインドウに表示されます。

  途中でスリープかけていますが、このスリープを短く、またはなくしてしまうと、チップが頑張りすぎて発熱するそうです。 

# -*- coding: utf-8 -*-
# 日本語コメントをエラーとしないように、UTF-8で保存

# 使用するライブラリのインポート
import smbus
from time import sleep

def get_templature_humidity():
    """
    温度と湿度を取得する
    """

    ADR = 0x44
    # I2Cの取得
    ic2 = smbus.SMBus(1)

    # 測定頻度の設定
    ic2.write_byte_data(ADR, 0x23, 0x34)
    sleep(0.5)
    # 測定値の読出し
    ic2.write_byte_data(ADR, 0xe0, 0x0)
    sleep(0.5)

    # 6バイト取得
    d = ic2.read_i2c_block_data(ADR, 0x0, 6)

    # 読みだした値をそのまま出力(6バイトの数値)
    print(d)

    # 0~1バイトが温度
    # 測定データ(生データ)を取得
    t = ((d[0]) << 8) | (d[1])
    # 換算する
    t = -45 + (175 * t / 65535)

    # 3~4バイトが湿度
    # 測定データ(生データ)を取得
    h = ((d[3]) << 8) | (d[4])
    # 換算する
    h = 100 * h / 65535

    # 結果を返却
    return t, h

templature , humidity = get_templature_humidity()
print(f'温度: {templature} ℃ , 湿度: {humidity} %')