AQM0802はI2C通信でやり取りをします。 Raspberry PiでI2C通信を使えるようにしましょう。
追加ソフトをインストール
Raspberry PiでI2Cという通信規格でデータのやり取りをおこなうためにはi2c-toolsという追加ソフトが必要になります。
$ sudo apt-get install i2c-tools
apt-getでインストール後にraspi-configでI2Cを有効化して一旦シャットダウンしたら、液晶モジュールを取り付けて再度起動します。

lsmodでカーネルモジュールi2c_bcm2708とi2c_devがロードされていることが確認できればI2C通信が利用できる状態になっています。
pi@raspberrypi:~ $ lsmod
Module Size Used by
cfg80211 407532 0
rfkill 16036 1 cfg80211
bcm2835_rng 1763 0
i2c_bcm2708 4920 0
bcm2835_gpiomem 2860 0
uio_pdrv_genirq 2944 0
uio 7753 1 uio_pdrv_genirq
i2c_dev 5671 0
snd_bcm2835 19802 0
snd_pcm 73474 1 snd_bcm2835
snd_timer 18848 1 snd_pcm
snd 50779 3 snd_bcm2835,snd_timer,snd_pcm
ipv6 340825 37
液晶モジュールが認識されているかどうかはi2cdetectで確認します。アドレス3eの場所に3eと表示されていればOK。
pi@raspberrypi:~ $ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
これでI2C通信を始めることができます。ちなみにi2cdetectのオプションは現行のRaspberry Piならこのままでいいです。初期のものはi2cdetect -y 0になるようです。
I2C通信のこと
ところでI2C通信って何ですかね?ってことですが、物理的にはプラスとマイナスの2本一組の線を使ったデジタル通信です。
複数のマスタースレーブ間で情報のやり取りをするので各スレーブには個別のアドレスを振って、通信先を特定しています。今回の例で言えばAQM0802液晶には0x3e(0xは16進数を表す接頭辞)というアドレスが振られています。
というわけで、マスターであるRaspberry Piから液晶モジュール3eに対してi2c-toolsのi2csetコマンドを使って様々な命令を送って操作してみます。

スイッチサイエンスのブログにあるコードを何も考えずに入力すると「SWITCH(改行)SCIENCE」と表示されました。
i2csetは次のようなオプションをとります。
i2cset オプションスイッチ I2Cバス番号 チップアドレス データアドレス データ モード
パラメータ | 内容 | 今回の値 |
---|---|---|
オプションスイッチ | 対話モード無効(直接操作モード) | -y |
I2Cバス番号 | Raspberry PiのI2C通信バス番号を指定。Pi2は1番。 | 1 |
チップアドレス | スレーブ側の固有アドレス。0x03から0x77まである。AQM0802液晶は0x3e。 | 0x3e |
データアドレス | スレーブ機器に書き込まれるデータの書き込み先。0x00から0xffまである。AQM0802液晶は各種操作命令の0x00とキャラクタ表示命令の0x40のふたつがある。 | 0x00または0x40 |
データ | スレーブ機器に書き込まれるデータ。AQM0802の場合、0x00に続くものは各種制御命令コード、0x40に続くものは表示キャラクタの文字コード。 | 適宜様々 |
モード | スレーブ機器に与えるデータのモード。b,w,s,iの4種類ある。
| i |
またSMバスとかよくわからない単語が出てきましたが気にしない。I2Cバスの一種らしいです。