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"を指定するオプションです。