I2C(AE-AQM0802[LCD8文字２行表示器])デバイスをラズパイからアクセス

#LCDの定番で、I2Cでもお馴染みのあれ
いつもの某秋月電子通商で販売されているLCDユニットです。
[秋月電子通商 - 電子部品・半導体 【通販・販売】](http://akizukidenshi.com/catalog/top.aspx)
随分昔に買ったので汚れてるわ、なんやらだわ…。(；´∀｀)
最近の奴、良いですね、ラズパイ用にカスタマイズされてて…。(しかもBL付きだー)
通販コード K-11354
私の愛用品はAE-AQM0802(通販コード K-06795)です。
８文字２行の憎い奴。(●´ω｀●)＞ﾊﾞｯｸﾗｲﾄﾅｲｹﾄﾞﾅｰ(しつこいｗ)

#早速実験しようと思ったが…
まず行き成り困った事は、ラズパイとモジュールを如何にして繋ぐか。
仕方無いので！！
ブレッドボード用ケーブルの片方を切り落として、QIメスコネクタを1x2と1x4ハウジングに収めるという即興ジグを作成しました。
次(は間に合わないか…)からはもう少しなんとかしたいと思います。

#前作業
##まず結線
ジグを作り＆配線。
I2Cは計４線必要で、このモジュールは+3.3Vとの事。
ラズパイの、1/3/5/7/9ピンと念の為+5.0Vwo2ピンが拝借する形でジグは作った。
+5.0V/+3.3Vと、SCL/SDA/GPIO7/GNDを引き出した。
##~RST信号
GPIO7を使って~RST信号も制御している。
~RST信号は負論理のリセット信号で、10KΩを介してGNDにPull-Downしてある。
よって、通常時は常にリセットされている状態。これが良いのか疑問だ。
##I2Cを使えるようにする
お約束のraspi-configで、I2C機能活性を有効します。
`sudo raspi-config`
メニューが各所資料とは若干異なっている。
この為、あたりを付けて探って見つける作業があるが、前回GPIOの時に一通り見たので、今回は一発で引き当てた。
![Screenshot at 2019-07-29 11-58-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185494/db725fca-a352-3014-7e11-8824e258b753.png)
ここです、インターフェイス関係の設定はここ！
![Screenshot at 2019-07-29 11-59-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185494/95d29f24-3210-f03e-737c-4aa89686675a.png)
P5のI2Cですね。
![Screenshot at 2019-07-29 11-59-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185494/3d144e89-2c44-c34e-6646-e596b9b817cb.png)
使う？YES、常時使う？YESと続けて、トップに戻ったらFINISH!!!で、再起動…と諸氏は描いていたが、これも新しくなったためか？再起動は無かった。
##I2C関連のコマンド(ツール)導入
i2c-toolsをインストールしたら準備OK。
`sudo apt install -y i2c-tools`
まず探知(i2cdetect)してみると…お0x3Eいますね。(●´ω｀●)
![Screenshot at 2019-07-29 12-21-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185494/70ce9b82-482a-cb61-3aff-994b9d3bc5ac.png)
ここまで動けば準備作業は終わりです。

#実験
##コマンドオンリーで実装？
結線をおえた図が既に実行結果になってますが。(笑)
以後、ここに至るまでの紆余曲折を説明します。
![IMG_20190729_144238.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185494/bd91d60d-9e61-d843-7e80-9fae046739e0.png)
もう余りに有名なので今更書く事もないのですが、
今回は全部コマンドプロンプト(Shell)から実行してみました。
##~RST信号処理
まずGPIO7を出力モードにして、0をセットしてから少し置いて、1をセットします。
これでリセット出来るはずです。
`gpio mode 7 out && gpio write 7 0 && sleepenh 0.1 >/dev/null 2>&1 && gpio write 7 1;`
※sleepenhを導入してみました。特別は意味は無かったと後程判明。💦
##LCD初期化
続いて、LCD何時もの初期化です。
これもお約束で特記なのですが、実はi2csetコマンドがマルチバイト対応としらず…。
間抜けなforループをしています。この辺を調べるのが今回一番多かった。
※殆どbashおさらい編です。(；´∀｀)
`InitCmd=(0x38 0x39 0x14 0x70 0x56 0x6c 0x38 0x0c 0x01)`
`for cmd in ${InitCmd[@]}; do i2cset -y 1 0x3e 0x00 $cmd && sleepenh 0 >/dev/null 2>&1; done`
##表示
初期化が終わったのでいよいよキャラクタの表示です。
`DispMsg="AkkoInaiSumanNA!"`
``DispAsc=`echo -n $DispMsg | od -tx1 -An``
`for dat in ${DispAsc[@]}; do i2cset -y 1 0x3e 0x40 0x$dat && sleepenh 0 >/dev/null 2>&1; done`
あれ？２行目にでない…？１行目は完璧なのですけどね。
カーソル移動やらないとダメだったっけ？(完全にど忘れ
##２行対応
まず１行ずつ表示するため、１行目のデータを変更。
`DispMsg="AkkoInai"`
※１行目の表示部分は上のままです。
２行目先頭にカーソルを移動します。
説明するまでも無いですが、２行目先頭のDDアドレスは0x40。
カーソル移動コマンドが0x80なので、双方ORして0xC0が２行目先頭移動となります。
`i2cset -y 1 0x3e 0x00 0xc0`
２行目の内容を
`DispMsg="SumanNA!"`
``DispAsc=`echo -n $DispMsg | od -tx1 -An``
`for dat in ${DispAsc[@]}; do i2cset -y 1 0x3e 0x40 0x$dat && sleepenh 0 >/dev/null 2>&1; done`
実行結果はご覧の通り！
![IMG_20190729_155653.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185494/a2fb7b5d-b724-c2ae-dd2f-4b31dd0615e9.png)

#中華な時間
##ロジアナ結線に苦戦
上の実行結果画像からも解る通り、今回最大の敵は配線。
配線材が無かったり、コネクタのオスメスに泣かされました。
次は頑張る！
##ロジアナの結果
PulseViewの高機能に助けられている、中華ロジアナでI2Cを観察してみました。
![Screenshot at 2019-07-29 15-20-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185494/81573bcb-d28c-c70b-90b5-182cc3c2e5c4.png)
![Screenshot at 2019-07-29 15-21-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185494/6e8c6416-7869-43a8-ae03-d9b2fe6f5550.png)
![Screenshot at 2019-07-29 15-22-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185494/36d69d6b-4389-323f-452e-f771f140840b.png)
![Screenshot at 2019-07-29 15-23-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185494/b61cf497-f1ef-fe1e-8438-2b67a124f0db.png)
![Screenshot at 2019-07-29 15-23-50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185494/bf9705ba-c887-7c6c-c719-fefa290764c6.png)
![Screenshot at 2019-07-29 16-04-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185494/2455f361-c702-364a-2123-3b4e2a1c661b.png)
どれも良い感じの結果です。
非常にソフトに救われている感じです。
このソフトの出来があるからこのロジアナは強力なツールなのかも知れない。
今回もデータとしてはよく取れています。ただShellの実行速度の悲しさか、
各パケットの間隔が広く、データ全体を見渡す事が出来ませんでした。
連続データ送出が出来るとわかった今、もう少し書き直すべきですね。

#課題
I2C自体の試験、LCDへの表示、ロジアナによる解析、どれも満足の行く結果でした。
しかし、配線に悩まされました。
もう少し工夫して、何事もやりやすくありたいと思います。
また、ラズパイのツール類も強力で、一部分をつまみ食い状態な為に、知らない事が多くなって来ました。
一度復習しないとダメかも知れない。
でも実はステッピングモーターとか周波数発生器とか…ネタは盛りだくさんだったり。💦
ラズパイは高機能なので何かをやるのがスピーディで良いですね。
しかしまだラズパイで何かする環境になって居ないので、余分が多く、必要な物が足りない。
過不足全開な状況です。

#謝辞
今回は沢山の情報を検索した。余りに多すぎてリンクを張り切れていない。
言い訳だが、記事全量の数％も参考にしていないので、なかなか貼りにくい。
特にShell関係が多く、構文やお役立ち機能等、小ネタが続いた。
しかしそれら多くの知恵を頂いて、今回も無事に実験出来た。
この場で申し訳ないばかりだが、感謝の意を示します。
ありがとうございました。
また何かの時もよろしくお願いします。(厚かましい^^;)