Temperature Sensor

秋月電子通商温度センサーモジュールがRaspberry Piのsmbusモジュールでは正しく使えなかったので、PerlモジュールHiPiのI2Cツールで試すとこちらでは正しく値が読み出せる事が確認できた。

HiPiに含まれるI2Cモジュールのソースコードを読むと、デバイスのレジスタを読み出す関数に「i2c_read_register」と「i2c_read_register_rs」の二種類があり、後者がRepeated Start Conditionが必要なデバイスに対応した関数のようだ。そこまで判ればあとは実際に試してみれば良い。

まずは現在の温度を1秒毎に読み出して表示するだけの、単純なPerlプログラムを作って試してみた。

#!/usr/bin/perl

# ADT7410 I2C Temperature Sensor Test

use strict;
use warnings;
use HiPi::BCM2835::I2C qw( :all );

my $dev = HiPi::BCM2835::I2C->new(
            peripheral => BB_I2C_PERI_1,
            address    => 0x48
        );
my @id = $dev->i2c_read_register_rs(0x0b, 1);
print sprintf("device id -> %d.%d\n", ($id[0] >> 3), $id[0] & 0x03);
my @val;
my $tmp;
while(1)
{
    @val = $dev->i2c_read_register_rs(0x00, 2);
    #$val[0] = 0xff; # check value
    #$val[1] = 0xff;
    $tmp = ($val[0] << 8 | $val[1]) >> 3;
    if($tmp >= 4096)
    {
        $tmp = ($tmp - 8192);
    }
    print "current temperature -> ",$tmp / 16,"\n";
    sleep(1);
}

モジュールがデバイスに直接アクセスするため、実行するときはsudoを付ける必要がある。
実行結果は以下のようになった。保冷剤をセンサに近づけた状態で実行したので、温度が急速に下がっているのが判る。

adt7410

今までのI2Cデバイスと同じように、Pythonで簡単に計測できるものと思っていたのだが、意外な所で引っかかった。Perlモジュールが公開されていなかったら、もっと面倒な事になっていただろう。

Raspberry Piで色々と試すのはPythonが最も適していると思っているので、Python用のライブラリでも問題無く使えるようになって欲しい。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中