ブログ

Armadillo-640:I2C通信の熱電対温度センサ(MCP9600)からデータ取得(c言語編)

at_kazutaka.bito
2019年3月7日 8時25分

Armadillo-640で、I2C通信の熱電対温度センサ(MCP9600)からデータ取得を取得してみました。
ここでは、MCP9600熱電対温度センサモジュールを使用しました。
プログラムは、c言語で作成しています。

1.Armadillo-640のCON9のI2Cを有効化

Armadillo-640:I2C有効化(at-dtwebの使用例)を参考に
I2C2とUART1(標準イメージのコンソール用)を有効化しておきます。

2.Armadillo-640と熱電対温度センサモジュールを接続

MCP9600熱電対温度センサモジュール
Armadillo-640のCON9のI2C2
に、下図のように接続します。

3.build-essentialのインストール

c言語をコンパイルするためにgcc等のツールが含まれるbuild-essentialをインストールします。
Armadillo-640をインターネットに接続できるネットワークに有線LANで接続します。
以下、Armadillo-640のコンソール上での操作になります。

root@armadillo:~# apt-get update
root@armadillo:~# apt-get install build-essential


4.I2C通信の熱電対温度センサ(MCP9600)からデータを取得するプログラム

I2C通信の熱電対温度センサ(MCP9600)からデータを取得するサンプルプログラムを添付します。
i2c_tsens_mcp9600_20190301.tar.gz
このファイルをArmadillo-640に展開して、コンパイルします。

root@armadillo:~# tar zxvf i2c_tsens_mcp9600_20190301.tar.gz
root@armadillo:~# cd i2c_tsens_mcp9600_20190301
root@armadillo:~/i2c_tsens_mcp9600_20190301# make

コンパイルにより生成された tsens_mcp9600 が実行ファイルです。

補足)
サンプルプログラムについて、MCP9600特有の箇所を抜粋して、簡単に説明します。
tsens_mcp9600.c

#define I2C_ADDR        0x67
// MCP9600のスレーブアドレスを指定します。
 
/**** Read Temerature(pointer:0x00, length:2): start ****/
// MCP9600内部の温度データのアドレスポインタ0x00から2Byteをリードします。
// 読み出した温度データ(2Byte)を、MCP9600のデータシートの情報を参考に[℃]の単位に変換しています。
/**** Read Temerature(pointer:0x00, length:2): end ****/


mcp9600.c

/**** sample: for I2C SMBUS: begin ****/
I2C SMBUSを使って、I2C通信でリードします。
/**** sample: for I2C SMBUS: end ****/


5.熱電対温度センサ(MCP9600)からデータを取得

上記で作成した"tsens_mcp9600"を下記のように実行すると、熱電対センサの温度が表示されます。

root@armadillo:~/i2c_tsens_mcp9600_20190301# ./tsens_mcp9600 -d /dev/i2c-1
Temp: 24.81

補足)
tsens_mcp9600実行時の
"-d /dev/i2c-1"
は、I2C2のデバイスファイル"/dev/i2c-1"を指定するオプションです。