800何十円だった。
I2C液晶は AQM0802Aというもので8文字 x 2列表示できる。
それをラズパイに接続させるための変換基盤(PCA9515)と、ピンヘッダにさすためのソケットがついていて、液晶とソケットをはんだ付けする。
私ははんだ付けはあまりしないのでヘタクソで不安だったので、
WEBで調べたが簡単なので説明すらされていなかった。
案の定、液晶を基盤に接続するときに隣合ったピンがくっついてしまった。
くっついたところは半田をあたためながら楊枝でなんとか切り離した。
piはzeroを使った。
まず、raspi-configで
5 Interfacing Options
P5 I2C を選んでenableにする。
i2cdetectというコマンドで認識しているか確認するのだが
インストールされていなかったので
sudo apt-get install i2c-tools
はんだ付けしたソケットをpiのGPIOに挿す。
GPIOの1,3,5,7,9,11 を使う。
SDカードがある側を上にして、左の列の上から6本だ。
ちなみに基盤の各ピンに対応する箇所には以下のように書かれている
1: 3V3
3: SDA
5: SCL
7: LED
9: GND
11: RST
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: -- -- -- -- -- -- -- --
これで使用できる状態なので早速なにか表示したいが、
WEBを探すとスクリプトが紹介されていたので、
IPアドレスとか任意の文字列を表示させてみた。
スクリプトではコマンド実行結果を加工したり任意の文字列をコマンドにわたせる型に変換したりしているのだが、
コマンドそのものの使い方を調べてみた。
Usage: i2cset [-f] [-y] [-m MASK] [-r] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE] ... [MODE]
I2CBUS is an integer or an I2C bus name
ADDRESS is an integer (0x03 - 0x77)
MODE is one of:
c (byte, no value)
b (byte data, default)
w (word data)
i (I2C block data)
s (SMBus block data)
Append p for SMBus PEC
まず初期化する。
以下2行がお決まりの初期化コマンドのようだ。
sudo i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i
sudo i2cset -y 1 0x3e 0 0x38 0x0d 0x01 i
0x3e というのが書き込み対象(I2CBUS)、i2cdetectで表示されていた値だ。
i は「block data」、連続してデータを書き込む指定である。
文字コードは下記に記載がある。
http://akizukidenshi.com/download/ds/xiamen/AQM0802.pdf
#全部消して1行目の最初にカーソル移動
sudo i2cset -y 1 0x3e 0 0x38 0x0d 0x01 i
#指定したデータを連続して表示
sudo i2cset -y 1 0x3e 0x40 [data1] [data2] [data3] i
#改行してカーソルを先頭に移動
sudo i2cset -y 1 0x3e 0x00 0xc0 i
8文字入力したらコマンドで改行しないと折り返さない。
#「Hello」と表示
sudo i2cset -y 1 0x3e 0x40 0x48 0x65 0x6c 0x6c 0x6f i
#「トウキョウ」と表示
sudo i2cset -y 1 0x3e 0x40 0xc4 0xb3 0xb7 0xae 0xb3 i