RasPi Python で ADT7420
先日、構想を紹介した B02 で温度センサー ADT7420 を使ってみました。
I2C インタフェースなので、B01 でも同様に使えます。
B01, B02 共に、I2Cバスリピーター内蔵です。
ADT7420は Strawberry Linux の製品を使ってみた上で、PWB(生基板)を作り、PIC マイコンで度々利用しています。
ADT7420 I2C精密温度センサモジュール
https://strawberry-linux.com/catalog/items?code=12042
タイトル画像のようなパッケージですが、何とか半田コテで半田付けしています。4辺に各々4個のパッドがありますが、この内2辺(8個)はNCなので、機械的に止まっていれば良いと言う感じで少々気を抜けます。パッドはパッケージ側面にもあるので、フラックと細い半田線があれば手付け出来ています。(ルーペは必須です。)
温度精度が高い(±0.2℃)ので重宝しています。
さらに高精度のADT7422 も気になりますが、まだ使ったことがありません。
ソースコード
例によってクラスを書いた sub1.py と main.py に分けて紹介します。
sub1.py
import smbus # RasPi のインタフェース設定で I2C enable にして使う
# I2C enable は /boot read write で設定する。
class I2C: # I2C
def __init__(self):
self.i2c = smbus.SMBus(1)
self.ts0ad = 0x90 # Sens0 スレーブアドレス(8bit表現)
self.ts0ad = self.ts0ad >> 1
self.sns0w_buf = [0x91, 0x00] # Sens0 温度読み出し送信バッファ
def sens0_init(self): # 温度センサーADT7420初期化
self.i2c.write_byte_data(self.ts0ad, 0x03, 0xC0)
res = self.i2c.read_i2c_block_data(self.ts0ad, 3)
c = self.read_sns0()
return res
def read_sns0(self): # 温度センサーADT7420読み出し
self.i2c.write_byte_data(self.ts0ad, self.sns0w_buf[0], self.sns0w_buf[1])
val = self.i2c.read_i2c_block_data(self.ts0ad, 0x00, 2)
temp = int(val[0])*256 + int(val[1])
if (temp & 0x8000) > 0:
temp -= 0x10000
temp = temp / 128
return float(temp)
main.py
import sub1
i2c = sub1.I2C() # I2C
i2c.sens0_init() # 温度センサーADT7420初期化
a = i2c.read_sns0() # 温度センサーADT7420読み出し
print(a)
ADT7420 は、PIC と ESP32 で使ってきましたが、Raspberry Pi で直接使うのは初めてでした。
これで動いていますが、何か間違いや改良すべき点を見つけたら、追記してお知らせします。
何等か、お役に立てれば幸いです。
いいなと思ったら応援しよう!
出来ればサポート頂けると、嬉しいです。
新しい基板や造形品を作る資金等に使いたいと思います。