ラズパイ5 pythonの仮想環境 ② 温度センサTMP117をつなぐ
前回、pythonの仮想環境の作り方を解説しました。ここでは、具体的にプログラムを作ります。
利用するのは温度センサTMP117で、I2Cバス経由で接続しています。
<参考>TMP117の利用;センサ・シリーズ 温度①確度±0.1℃ TMP117 その1 温度の読み出し
●環境
- ハードウェア 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を動作させている
●温度センサTMP117のおもなスペック
- 動作電圧 1.8~5.5V
- 分解能 16ビット、LSBは0.007812℃
- 動作温度範囲 -55~150℃
- 確度
- -20~+50℃ の範囲で±0.1℃ (最大値)
- -40~+100℃ の範囲で±0.2℃ (最大値)
- -55~+150℃ の範囲で±0.3℃ (最大値)
- 消費電流 1Hzの変換サイクルで3.5uA
- インターフェース I2C(1~400kHz)
- データ長 2の補数形式の16ビット
- 平均化出力が可能
- 温度設定のアラートあり
●Adafruitのブレークアウト・ボード
温度センサのボードには、STEMMA QT(JST SH 4ピン)コネクタは2か所に装着されていて、どちらにつないでもかまいません。
TMP117 Precision Temperature Sensor
SDA/SCL信号には10kΩのプルアップ抵抗が入っています。I2Cのスレーブ・アドレスがデフォルトが0x48で、裏面のADDRの部分をショートすると0x49になるようです。
コネクタは、表と裏のどちらも差し込めそうですが、ピンが内部の上部に並んでいるので、差し込める方向は一意です。ロック機構はないですが、すぐに抜けるということはありません。
●接続
i2cdetectで接続を確認します。0x48に見つけました。
●プログラム
仮想環境に入ります。
yoshi@ras05:~ $ source env/bin/activate
プログラムです。
import smbus2 bus = smbus2.SMBus(1) data = bus.read_i2c_block_data(tmp117_addr , TemperatureRegister, 2) |
実行すると、smbus2がないと言われます。
(env) yoshi@ras05:~ $ python tmp117-1.py
Traceback (most recent call last):
File "/home/yoshi/tmp117-1.py", line 1, in <module>
import smbus2
ModuleNotFoundError: No module named 'smbus2'
pipを使ってsmbus2をインストールします。
(env) yoshi@ras05:~ $ pip install smbus2
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting smbus2
Downloading https://www.piwheels.org/simple/smbus2/smbus2-0.4.3-py2.py3-none-any.whl (11 kB)
Installing collected packages: smbus2
Successfully installed smbus2-0.4.3
(env) yoshi@ras05:~ $ pip list
Package Version
---------- -------
pip 23.0.1
setuptools 66.1.1
smbus2 0.4.3
実行します。
(env) yoshi@ras05:~ $ python tmp117-1.py
Temp is 18.85938 `C
●関数化
温度の読み出し部分を関数にします。
import smbus2 bus = smbus2.SMBus(1) def readTMP117temperature(): temperature = readTMP117temperature() |
実行します。
(env) yoshi@ras05:~ $ python tmp117-2.py
Temp is 18.6 `C