RasPiで室温を計測する
2015.10.12 Mon
最近ずっとbotの方にかかりきりでRaspberryPiを放置していた(サーバとしてしか使っていなかった)のですが、先輩が温度センサーとブレッドボード、ジャンパワイヤをお土産でくださったので使ってみることに。
今回用いるのはaitendoのI2C温度センサー、TMP102です。

以下のサイトを参考にしました。
raspberry piで温度計測(TMP102)
まずI2Cデバイスを扱えるようにします。
/etc/moduesに以下を追加(後述するがもしかしたら必要ない?
以下のように該当行をコメントアウト
しかし僕のRaspberryPi2にはraspi-blacklist.confが存在しませんでした。ググったところこの部分は仕様変更があったようで、次のサイトを参考にしました。→Raspberry PiでI2Cを使う。raspi-blacklist.confが無い時
もしかしたらこれですべて自動で使えるようになって、/etc/modulesに書き込む必要は無かったかもしれませんが、これは検証していません。
なにはともあれここまで終わったら一旦RasPiをシャットダウンし、電源を抜きます。
RaspberryPiを買った時に初期でついてきたGPIOカードを参考にしてジャンパワイヤを刺していきます。

TMP102の回路図はaitendoのサイトのリンクから見ることができます。
[tmp102] >> [RasPi]
V+ >> 3.3V
SDA >> GPIO2(I2C_SDA1)
SCL >> GPIO3(I2C_SCL1)
GND >> GND
ADD0 >> GND

まぁこんな感じで接続します。
このときADD0をどこにつなぐかで0x48か0x49になるかが決まるらしいです。今回のようにGNDに接続すると0x48になります。
i2c-toolsをインストール。

もしi2cdetect 1でエラーが返ってくるようならi2cdetect 0で試してみてください。また、ADD0をGND以外につなぐとここで49が表示されます。
次にこれを温度に変えるスクリプトを組みます。僕にもよくわかんないですがこういうことらしいです。tmp102.shとか適当な名前で保存してください。
ついでなのでpythonでもこいつから温度を取得してみたいと思います。
また、pyenv環境の人はこのやり方では上手く行きません。次の記事で書きます。
Tweet
今回用いるのはaitendoのI2C温度センサー、TMP102です。

以下のサイトを参考にしました。
raspberry piで温度計測(TMP102)
まずI2Cデバイスを扱えるようにします。
/etc/moduesに以下を追加(後述するがもしかしたら必要ない?
$ sudo vim /etv/modules
i2c-dev
以下のように該当行をコメントアウト
$ sudo vim /etc/modprobe.d/raspi-blacklist.conf
#i2c-bcm2708
しかし僕のRaspberryPi2にはraspi-blacklist.confが存在しませんでした。ググったところこの部分は仕様変更があったようで、次のサイトを参考にしました。→Raspberry PiでI2Cを使う。raspi-blacklist.confが無い時
$ sudo raspi-configして設定するだけなのでむしろ簡単になったといえるかもしれません。
もしかしたらこれですべて自動で使えるようになって、/etc/modulesに書き込む必要は無かったかもしれませんが、これは検証していません。
なにはともあれここまで終わったら一旦RasPiをシャットダウンし、電源を抜きます。
$ sudo shutdown -h now
RaspberryPiを買った時に初期でついてきたGPIOカードを参考にしてジャンパワイヤを刺していきます。

TMP102の回路図はaitendoのサイトのリンクから見ることができます。
[tmp102] >> [RasPi]
V+ >> 3.3V
SDA >> GPIO2(I2C_SDA1)
SCL >> GPIO3(I2C_SCL1)
GND >> GND
ADD0 >> GND

まぁこんな感じで接続します。
このときADD0をどこにつなぐかで0x48か0x49になるかが決まるらしいです。今回のようにGNDに接続すると0x48になります。
i2c-toolsをインストール。
$ sudo apt-get install i2c-tools
$ sudo i2cdetect 1すると以下の様な結果を得ます。

もしi2cdetect 1でエラーが返ってくるようならi2cdetect 0で試してみてください。また、ADD0をGND以外につなぐとここで49が表示されます。
$ sudo i2cget -y 1 0x48 0x00 wとして何か値が返ってくるのを確認してください。これでダメだったら温度センサーが死んでるのでは…
次にこれを温度に変えるスクリプトを組みます。僕にもよくわかんないですがこういうことらしいです。tmp102.shとか適当な名前で保存してください。
#!/bin/bashこの計算スクリプトではbcという計算ソフトを利用しているらしいのでこれもインストールシておきます。
hexraw=$(sudo i2cget -y 0 0x48 0x00 w)
while [ "$hexraw" == "" ]; do
hexraw=$(sudo i2cget -y 0 0x48 0x00 w)
done
msb=$(echo ${hexraw:4:2})
lsb=$(echo ${hexraw:2:1})
dec=$(printf "%d\n" "0x$msb$lsb")
echo "scale=4; $dec*0.0625" | bc
$ sudo apt-get install bcここまでくれば後は実行するだけです。
$ ./tmp102.sh無事値が帰ってきたら成功です。また、たまにError: Read failedが出ます。原因が不明で困っています。
22.3125
ついでなのでpythonでもこいつから温度を取得してみたいと思います。
$ sudo apt-get install python-smbuspython-smbusをインストールし、以下の様なスクリプトを組みます。
import smbusあとは実行するだけです。
import time
bus = smbus.SMBus(1)
data = bus.read_i2c_block_data(0x48, 0)
msb = data[0]
lsb = data[1]
print (((msb << 8) | lsb) >> 4) * 0.0625
$ sudo python tmp102.pysudoつけてないとエラーが出ます。また、Read failedの時の例外処理をしてないのでその時もエラーが出ます()
22.375
また、pyenv環境の人はこのやり方では上手く行きません。次の記事で書きます。
スポンサーサイト
カテゴリー:RaspberryPi
Tweet