株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。新規開発案件のご依頼をお待ちしております。

*

温度センサADT7410(その1)i2C通信とは

   

温度センサのADT7410を使ってみます。ADT7410はアナログ・デバイセズ社の製品ですが、実際には以下の秋月さんのモジュールを使います。
ADT7410使用 高精度・高分解能 I2C・16Bit 温度センサモジュール

以下はピンを接続してブレッドボードに接続した状態です。(※はんだ付けは明らかにだめな例です。今現在はさすがにもう少しはうまく出来ると思います。)
IMG_0403

この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線式双方向バスの図として以下のような図が利用されることが多いと思います。(以下は私が書いたものです。)
i2c

シリアル・データライン (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

0001

8 Advanced Optionsを選択します。
(※画像は全て今現在のスクリーンショットです。)
0002

A7 i2Cを選択します。
0003

YESを選択します。
0004

OKで先に進みます。
0005

YESを選択します。
0006

OKで先に進みます。
0007

最初の画面に戻ります。Finishで終了します。(Finishへはタブキーで移動出来ます。)
0008

Raspberry Piを再起動します。

次に以下のように、ic2-toolsをインストールします。
$ sudo apt-get update
$ sudo apt-get install i2c-tools

0009

次にRaspbery Piと接続します。
GND、VDD(3.3V)、SCL、SDA をそれぞれ接続します。i2Cではどこかにプルアップ抵抗が必要となりますので、ここではADT7410のプルアップ抵抗をはんだ付けをして有効にしています。バス上のどこかにプルアップ抵抗が存在すればいいので必ずしもADT7410でプルアップ抵抗を有効にする必要はないです。
IMG_0405

raspbery piのピンは以下です。モデルがいろいろとありますが、ここは(赤線で囲んだ部分)共通のようです。
raspipin

$ sudo i2cdetect -y 1 を実行しますと以下のようにアドレスが確認出来ます。デフォルトの状態のアドレスが表示されています。
0010

例えばLCD等の他のi2Cデバイスを並列に接続して複数のアドレスが表示されるところを確認したいところですが、そういったデバイスが今現在手元にありません。そのため複数のi2cデバイスを接続すると複数のアドレスが表示されるはずですとだけ書いておきます。

今回はここまでです。続きとなる実際の温度の取得については以下で書きました。
温度センサADT7410(その2)Arduinoでの利用
温度センサADT7410(その3)Raspbery Piでの利用

 - Raspberry Pi, 通信制御

AdSense

AdSense

  関連記事

無線マイコン ToCoStickのシリアル通信専用アプリを使ってみた

無線マイコンの ToCoStick(トコスティック)のシリアル通信専用アプリを使 …

Raspberry PiのPL2303内蔵コンソールケーブルのWindows8.1の対応について

Raspberry PiのコンソールケーブルでProlific社のUSBシリアル …

Node.jsでRaspberryPiのGPIOを使う(その1)デバイスドライバでLED

Node.jsでRaspberryPiのGPIOを使ってみます。今回はデバイスド …

Raspberry PiでAC100V(ソリッド・ステート・リレー)制御

Raspberry PiでAC100VのON/OFF制御を試してみました。今回そ …

Arduino CC3000 WiFi シールドでHTTP POST

Arduino CC3000 WiFi シールドでHTTP POST通信を試して …

Raspberry PiでC言語版Lチカを試す(その2)レジスタを操作する

Raspberry PiでC言語を使ったLEDの点灯、消灯(いわいるLチカ)を試 …

ASP.NET Web APIでデータ蓄積(その7)Raspbery Piからの温度データ蓄積

ASP.NET Web APIでデータ蓄積の7回目です。前回までで少なくとも温度 …

Raspberry Piをモニターとキーボードなしで導入する(その2)初期設定とリモートデスクトップ

(※2017/02/19 最新のRaspbian Jessie OSでは、初期状 …

Raspberry Piをモニターとキーボードなしで導入する(その3)コンソールを使う

(※2017/02/19 最新の情報は以下です。) Raspberry Pi 3 …

Raspberry Piをモニターとキーボードなしで導入する(その1)SSHでのログインまで

Raspberry Piをモニターとキーボードなしで導入する方法についてです。 …