CIMG2378

I2C接続可能なLCD/ACM1602の使いこなし

Raspberry piにLCDモジュールを接続する場合にその選択肢は案外少ないものです.
まずは3.3Vで動作する事。Raspberry Pi の少ないDIOピンを節約したいのでバスインターフェイスではなくシリアルインターフェイスで接続できるのが望ましい。表示文字数も少ないよりも多い方が良いな。と言う事で選定したのがACM1602.

さっそく秋月電子で購入
CIMG2378

Raspberry piのI2Cを有効にするための諸設定は済んでいるものとして。
I2Cの2線SDAをSCLそしてVccとGNDを接続。

シェルから以下のコマンドを投げてみる。

pi@raspberrypi ~ $ sudo i2cdetect 1

しかし、呼べども答えず。返事を返してくれるデイバイスは誰もいません。

I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

接続を一通り確認したり、他のI2CデバイスとRaspberry Piとが通信できている事を確認し行き詰まった。
そこでGoogle検索の出番。ひたすら調べた結果次の事が判明。

  • デフォルトの通信速度では通信がつまずくことがある
  • Write専用で一度でもReadを掛けるとモジュールがフリーズする。製品に添付の資料にも明記しているが、Readを掛けた時の状態に付いては記載がない。

一つ目については通信スピードを落とせば同じバスに繋がるデバイスもそのスピードダウンの影響を受けるがまあよしと考えられる範囲ですが、二つ目については一度でもi2cdetectを掛けるとACM1601はフリーズ状態になりその都度モジュールの電源再投入して立ち上げ直す必要になるのです.Raspberry Pi本体のシステムをリスタートする必要はないのですが、やはり使いにくいことには変わりないですね。

一応I2Cの通信スピードを変更する手順について書き留めておきます。

sudo modprobe -r i2c-bcm2708
sudo modprobe i2c-bcm2708 baudrate=50000
sudo i2cdetect 1

この時点ではもちろんACM1602からの返答は有りません。ここでLCD電源を一度オフにしてオン ※1
これ以降はi2cdetectを掛けないでくださいね。するとまたACM1602がフリーズに落ちますので。
無事ACM1602が使えるようになっているはずなので、I2Cを通じて制御コマンドを渡して動作を確認してください。

通信速度をデフォルトのままだとI2Cでコマンドを渡した時にPythonなら「IOError: [Errno 5] Input/output error」が出ます。
上記コードをその都度シェルから入力するのが面倒だ、この設定をデフォルトにしたい場合は、/etc/modprobe.d/i2c.conf というファイル(ファイル名は .conf で終わっていれば何でもよい)を作って以下のように書いておけば良いようだ。

options i2c_bcm2708 baudrate=50000

でもi2cdetectを不用意に投げないようにご注意を

結論。秋月で買えるACM1602(I2Cインタフェイスキャラクターディスプレイ LCD 3.3V)はRaspberry pi との組み合わせでは使いにくい.

それからI2Cを使う場合sudo権限が必要なので、実行するPythonスクリプトなどはsudo権限を使って実行することを忘れずに。

LCDモジュールの取り扱いをもっと簡単に出来ないか、複数のI2Cデバイスをぶら下げた時に安心してi2cdetectを投げられるようにならないか。そういった悩みを解消するのに、i2cインターフェイス基板が便利かもしれませんね。
i2cインターフェイス基板
デジタルIOも拡張でき、アナログ入力にも対応。Raspberry piを使った電子工作を便利にする事だと思います.