見出し画像

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 で直接使うのは初めてでした。
これで動いていますが、何か間違いや改良すべき点を見つけたら、追記してお知らせします。


何等か、お役に立てれば幸いです。








出来ればサポート頂けると、嬉しいです。 新しい基板や造形品を作る資金等に使いたいと思います。