ハマりました。
商品のページに確かに注釈が追記されているように、Raspberry Piでは上手く動作しません。I2Cで認識する所から上手く動かないと思います。
Raspberry PI の GPIO2番/3番がプルアップを基盤上でしているために上手く認識が出来ないというのが理由のようです。従ってこれを解消するためには、基盤上の抵抗を取り除か(Zeroではかなり厳しい位置にありますし他にも影響しそうなのであまりしたくありません)ないと行けない模様です。ハードウェアで設定されてしまうためgpioコマンドを利用してもプルアップルを変更できていません。
- Raspberry Pi Zero
- [RaspberryPi] GPIO 入力端子のプルアップ/ダウン設定について](http://www.magicvox.net/archive/2015/09132143/)
こちらのサイトに回避方法が掲載されています。現在この回路を持っていないので試しにSDAを「プルダウン」してみたいと思います。抵抗は2Ωx2個をGNDに接続してみます。
既に半田してしまったのだけどプルアップ用のジャンパ(PU)をしなくても良いだけかもしれない。
商品はこのサイズです
半田はかなり小さくなります。先にハンダゴテの先に半田を盛っておいてサッとポイントに塗ると上手く半田が移動してくれます。
ちょっと面倒な繋げ方になりましたが抵抗を挟んでいます。
この状態で
pi@pizero1:~ $ 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: -- -- -- -- -- -- -- --
見えました。
では次に以下のコマンドを実行してみます。
i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x78 0x5f 0x6a i
sleep 0.3
i2cset -y 1 0x3e 0 0x0c 0x01 i
sleep 0.3
i2cset -y 1 0x3e 0 0x06 i
sleep 0.3
i2cset -y 1 0x3e 0 0x80 b
i2cset -y 1 0x3e 0x40 0x31 0x32 0x33 0x34 i
i2cset -y 1 0x3e 0 0xc0 b
i2cset -y 1 0x3e 0x40 0x41 0x42 0x43 0x44 0x45 i
無事に表示されました。
これで液晶に文字を書くことが出来るようになりました。Pythonで利用するためのライブラリとかあれば使ってみたいですし pyLCI で正しく動作するかも確認したいところです。
参考