温度センサADT7410の3回目です。前回までの内容は以下です。
温度センサADT7410(その1)I2C通信とは
温度センサADT7410(その2)Arduinoでの利用
ADT7410は以下を使っています。
ADT7410使用 高精度・高分解能 I2C・16Bit 温度センサモジュール
仕様書は今現在で上記の製品ページのマニュアルPDFのリンクと仕様半導体資料のリンクから参照出来ます。直接のリンクは以下です。
ADT7410モジュールマニュアル
使用半導体資料(データシート)
今回はRaspbery Piで使ってみます。温度センサADT7410(その1)I2C通信とはでRaspbery Piでの接続まで書きました。そういう意味ではその1の続きですが、温度センサADT7410(その2)Arduinoでの利用で温度の計算方法についても書きましたので必要な場合は合わせて見て頂ければと思います。
Pythonでのプログラム
Raspbery Piではいろいろなプログラミング言語が利用出来ますがここではPythonを使ってみます。PythonはRaspbery Piで推奨の言語でもあり、Raspbery PiのPiはPythonのpyからも取ったものだったと思います。(※すいません、正確な情報が必要な場合は以下等で調べて下さい。)
The name ‘Raspberry Pi’
Tera TermでRaspbery Piに接続して以下のように、python -Vと入力するとversionが確認出来ます。
今現在は、2.7.3となっています。PythonにはVersion3の系統もありますが、ここではこのまま使います。プログラムの前にPythonからi2Cバスをコントロールするためのpython-smbusをインストールします。以下でインストール出来ます。
$ sudo apt-get update
$ sudo apt-get install python-smbus
プログラムは以下のように書きました。
#!/usr/bin/python # -*- coding: utf-8 -*- import smbus import time i2c = smbus.SMBus(1) address = 0x48 while True: block = i2c.read_i2c_block_data(address, 0x00, 2) val = block[0] << 8 #上位ビットをシフトしてセット val = val | block[1] #下位ビットをORでセット val = val >> 3 #右へシフトで13ビット化 ####### val = 0x1e70 マイナス温度のテスト # 以下プラス、マイナス判定をして温度を計算する if(val >= 4096): val = val - 8192 print("Temperature:%6.2f" % (val / 16.0)) time.sleep(5)
Raspbery PiとADT7410との接続は温度センサADT7410(その1)i2C通信とはで書いたように出来ているとして実行します。このプログラムをここでは adt7410.pyというファイル名で保存したので以下のように実行しました。
$ sudo python adt7410.py
温度取得の処理としては、前回のArduinoの場合と同じです。以下のマニュアルを参照して下さい。
ADT7410マニュアル
ここでは13ビットモードで取得しているので2バイトのデータを1バイトずつ16ビットの値にして13ビットにシフトしています。後はプラス、マイナスを判定して分解能で計算しています。プラス、マイナスの判定と計算は10進数で判定しています。マイナスの値はマニュアルに書いてある値を代入して結果を確認しました。
Raspbery Piでi2cバスを使っているのでもっといろいろなことが出来るとは思いますが今回はここまでです。また何か出来たら書きたいと思います。