Raspberry Piに「I2C」規格(?)に対応したセンサーであれば、比較的楽に、同様の方法で制御できます。
基本的には何かのセンサーをつなぐことが多いようですが、今回はその基本、温度と湿度センサーです。
1. 温度・湿度センサー
今回は、購入したセットに入っていた「SHT3X-DIS」というセンサーを使用します。たいていのセットに入っているようです。
|
|
2. I2Cの有効化
「Raspberry Pi の設定」から、「インターフェース」タブの「I2C」を「有効」として「OK」を押下するだけです。
3. I2Cの有効化の確認
「LXTerminal」にて、以下コマンドを実行します。有効化されていれば、表のようなものが出力されます。
無効化の場合は「Could not open file」とエラーになります。
現状、何もつながっていないので、すべて「- -」となっています。
i2cdetect -y 1
4. 配線
ポイントは「SDA」「SCL」でしょうか。抵抗などは不要で、電源は3V」でよいようです。
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} %')