温度センサのADT7410を使ってみます。ADT7410はアナログ・デバイセズ社の製品ですが、実際には以下の秋月さんのモジュールを使います。
ADT7410使用 高精度・高分解能 I2C・16Bit 温度センサモジュール
以下はピンを接続してブレッドボードに接続した状態です。(※はんだ付けは明らかにだめな例です。今現在はさすがにもう少しはうまく出来ると思います。)
このADT7410モジュールを使いながら関連するテーマについて整理してみたいと思います。今回はADT7410でも採用されているi2C通信についてです。私自身がi2Cデバイスを開発出来るわけではないので、システム開発エンジニアとしてi2Cデバイス利用者の観点から書きます。(参考までにですが、私が初めてi2Cを知ったのはRaspberry Pi関連だったと思います。)必要な場合は下記のメーカのマニュアル等を参照して下さい。
i2Cとは
i2Cは正しくは2の文字を小さく記述してアイ・スクエアド・シーと読むということですが、小さい文字(上付き文字)は書きにくいので、i2Cと書いてアイ・ツー・シーと読んでいる場合もあると思います。(参考 Wikipediaへのリンク)
i2Cとは、私の認識では2線式双方向バスでのシリアル通信の規格の一つ(※他のシリアル通信の規格としてはUART、SPI、1-Wireもあります。)ですが、現時点のメーカ(NXPセミコンダクターズ)の日本語のマニュアルから引用させて頂きます。
※引用ここから
フィリップス・セミコンダクターズ(現在:NXPセミコンダクターズ)は、効率的なIC(デバイス) 間制御をシンプルに実現するシンプルな2線式双方向バスを開発しました。このバスはI2Cバス(Inter-ICバス)と呼ばれ、シリアル・データライン (SDA)とシリアル・クロックライン(SCL)の2本のバスラインで構成されます。
※引用ここまで
今現在のマニュアルへのリンクは以下です。
i2Cバス仕様およびユーザーマニュアル
この2線式双方向バスの図として以下のような図が利用されることが多いと思います。(以下は私が書いたものです。)
シリアル・データライン (SDA)とシリアル・クロックライン(SCL)の2本のバスライン構成で、複数のデバイスを並列に接続出来るという特徴があります。各デバイスはアドレスで識別します。複数のデバイスがバス構成で接続出来るようにオープンドレインまたはオープンコレクタになっています。そのためバス上のどこかでプルアップ抵抗が必要になります。
私の場合は、このサイトでも何回か書いていますが、シリアル通信といえばRS232CとかせいぜいUARTということで、これらの伝統的なシリアル通信ではデバイスの接続は基本的には1対1です。複数のデバイスを接続して制御する場合は複数のポートが必要となってきます。Windowsパソコンで考えた場合は、実際に経験があるのですが、UART-USB変換のケーブルがデバイスの数だけ必要となりプログラム的にも複数のポートの制御が必要になります。
一方、i2Cでは2本のバスライン構成で、複数のデバイスを並列に接続出来るという意味では随分とシンプルになります。それでは、WindowsパソコンでI2Cの制御が出来るのかということですが、例えばですが、Arduinoのようなマイコンでi2Cデバイスを制御して、WindowsパソコンとはマイコンとUART-USBで通信するという方法もあると思います。これでもUART-USB変換のケーブルが1本になるので、シンプルな構成になると思います。
Raspberry PiでADT7410の接続の確認
実際にADT7410をRaspberry Piに接続してi2Cのアドレスを確認してみます。
Raspberry Piでi2Cを使えるようにする
まずは、Raspberry Piでi2Cを使えるようにする方法についてです。この方法にもいくつかあるようですが、ここでは間違いが少ないと思われたraspi-configを使う方法を使いました。その手順についてです。
以下のように、raspi-configを起動します。
$ sudo raspi-config
8 Advanced Optionsを選択します。
(※画像は全て今現在のスクリーンショットです。)
最初の画面に戻ります。Finishで終了します。(Finishへはタブキーで移動出来ます。)
Raspberry Piを再起動します。
次に以下のように、ic2-toolsをインストールします。
$ sudo apt-get update
$ sudo apt-get install i2c-tools
次にRaspbery Piと接続します。
GND、VDD(3.3V)、SCL、SDA をそれぞれ接続します。i2Cではどこかにプルアップ抵抗が必要となりますので、ここではADT7410のプルアップ抵抗をはんだ付けをして有効にしています。バス上のどこかにプルアップ抵抗が存在すればいいので必ずしもADT7410でプルアップ抵抗を有効にする必要はないです。
raspbery piのピンは以下です。モデルがいろいろとありますが、ここは(赤線で囲んだ部分)共通のようです。
$ sudo i2cdetect -y 1 を実行しますと以下のようにアドレスが確認出来ます。デフォルトの状態のアドレスが表示されています。
例えばLCD等の他のi2Cデバイスを並列に接続して複数のアドレスが表示されるところを確認したいところですが、そういったデバイスが今現在手元にありません。そのため複数のi2cデバイスを接続すると複数のアドレスが表示されるはずですとだけ書いておきます。
今回はここまでです。続きとなる実際の温度の取得については以下で書きました。
温度センサADT7410(その2)Arduinoでの利用
温度センサADT7410(その3)Raspbery Piでの利用