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

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

Raspberry Pi 通信制御

温度センサ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での利用

AdSense

AdSense

-Raspberry Pi, 通信制御

執筆者:

関連記事

Raspberry PiでKivy2.0.0を導入する

Raspberry PiでKivy2.0.0を導入してみます。Kivyとは、PythonのNUI(Natural User Interface)開発のためのオープンソースライブラリです。(個人的にはN …

Raspberry Piでセンサネットワーク稼働試験(基本編)構成・課題等

Raspberry Piでセンサネットワークを構築して実際に稼働してみます。基本編としてRaspberry Piにセンサを直接接続する構成です。その構成で安定して稼働させるにはどういった課題があるか書 …

AndroidでUSBシリアル通信(その2)ライブラリサンプルのArduinoスケッチ

AndroidでUSBシリアル通信の2回目です。前回はハードウェア構成、ソフトウェア構成等全体的な内容について書きました。今回はAndroidの通信相手となるArduinoのスケッチの動作確認を行って …

Raspberry PiでIoT(温度・湿度・気圧データ編 その3)データ表示とグラフ表示

Raspberry PiでIoT 温度・湿度・気圧データ編の3回目です。前回までで、Raspberry Piから温度、湿度、気圧データをWebサーバへ送信してそのデータを蓄積出来るようになりました。今 …

Raspberry PiのSDカードをSD Card Copierで別のSDカードへバックアップする方法

Raspberry Piの起動中のSDカードをSD Card Copierで別のSDカードへバックアップする方法についてです。この方法を使うと作業中のRaspberry Piの環境をそのまま別のSDカ …