HOME  >>  LED電子工作集 > R- 4 I2C通信の演習

R- 4 I2C通信の演習

■ はじめに

 今、RaspberryPiに挑戦している。 今回は I2C 通信の演習を実施した。

 

■ 演習8:  I2C 通信の演習

 教則本の7章で I2Cデバイスの利用について説明されています。 使用するデバイスはADT7410 使用の温度センサーモジュールとLCDモジュールを使用しています。

 LCDモジュールについては以前に「レイアウトに速度計を設置する」にて、 I2C 通信を使用したモジュールを使用してみたが、見事に失敗している。 今回はそのモジュールを使ってし挑戦したが、今回も失敗してしまった。 このサインスマートの TW-1602は5V仕様であったので、1KΩと510Ωの抵抗を使って3.3voltに分圧してRaspberryに接続しているのだが、アドレス 0x3F を表示してくれなかった。 認識してくれていないのだ。 モジュールソフトをインストールする必要があると思われるが、説明書が無いので分からない。 まだまだ「バルク品」なる物に手を出せるレベルでは無いと改めて認識して、このモジュールの挑戦を諦めることにした。

 従って教則本に示されている 07-02-LCD.py と 07-03-LCD-temp.py の演習はパスすることにした。

 07-01-temp.py の演習は難なく実施できたものの、このままでは面白くないので キットに含まれていた 8ビットのAD/DAコンバータPCF8951を搭載した YL-40 の教育用モジュールも使ってみることにした。 事前チェックにより、このモジュールとADT7410 温度センサーのアドレスが重なっていたので、ADT7410 温度センサーのJ3ジャンパ・パターンをショートさせてアドレスを0x49に変更した。

********** 省略 *******************
def read_adt7410():
    word_data = bus.read_word_data(address_adt7410,
                   register_adt7410) data = (word_data & 0xff00)>>8 | (word_data & 0xff)<<8 data = data>>3 if data & 0x1000 == 0: temperature = data*0.0625 else: temperature = ( (~data&0x1fff) + 1)*-0.0625 return temperature def read_yl40(): data = bus.read_word_data(address_yl40, register_yl40) return data bus = smbus.SMBus(1) try: while True: address_adt7410 = 0x49 register_adt7410 = 0x00 inputValue1 = read_adt7410() address_yl40 = 0x48 register_yl40 = 0x00 inputValue2 = read_yl40() register_yl40 = 0x01 inputValue3 = read_yl40() register_yl40 = 0x03 inputValue4 = read_yl40() print("TEMP:",inputValue1," LIGHT:",inputValue2,
         " TEMP:",inputValue3," POT*",inputValue4) ************* 省略 *******************************

 

 ブレッドボードに配線して状態とYL-40 モジュールを下に示す。

 YL-40 の教育用モジュールは、8ビットのAD変換モジュールを4チャンネル持っており、0チャンネルにはCdS光センサが、1チャンネルには温度センサが、そして3チャンネルには半固定抵抗が接続されている。

 I2C 通信回線は共通線を使用しているので、アドレス0X49 からは温度センサより摂氏の温度データが得られ、アドレス0x48のCH0 には明るさが、CH1 には温度が、CH3 にはポテンショの値が、デジタル値として得られるはずである。

 コマンド命令にてアドレスをチェックすると、二つのモジュールをしっかりと認識していた。 そこで、07-01-temp.py の演習例を参考にしてプラグラムを記述した。 何度かの修正後に、データを送信してくるようになった。 送信してきた結果を下にしめす。

 途中で、ドライヤで温度を温めたり懐中電灯の光を当てたりしたので、変化しているのが分かる。 また、YL-40 の教育用モジュールは8ビットのAD/DAコンバータのはずであるのに、10進で5桁の数字を送ってきている。 これはビット操作の関係を思われるが、仕様書が無いので不明である。 使い方に気を付ける必要がありそうだ。

 今回の演習で I2C 通信の使い方を学び、二つのスレーブを使うこともできた。 プログラムの書き方は自己流に記述したが、もっとスマートな方法、あるいは正規の書き方があると思われるが、これで良しとしよう。 

 

  ****************  続く  **************************