LCDの定番で、I2Cでもお馴染みのあれ
いつもの某秋月電子通商で販売されているLCDユニットです。
秋月電子通商 - 電子部品・半導体 【通販・販売】
随分昔に買ったので汚れてるわ、なんやらだわ…。(;´∀`)
最近の奴、良いですね、ラズパイ用にカスタマイズされてて…。(しかもBL付きだー)
通販コード K-11354
私の愛用品はAE-AQM0802(通販コード K-06795)です。
8文字2行の憎い奴。(●´ω`●)>バックライトナイケドナー(しつこいw)
早速実験しようと思ったが…
まず行き成り困った事は、ラズパイとモジュールを如何にして繋ぐか。
仕方無いので!!
ブレッドボード用ケーブルの片方を切り落として、QIメスコネクタを1x2と1x4ハウジングに収めるという即興ジグを作成しました。
次(は間に合わないか…)からはもう少しなんとかしたいと思います。
前作業
まず結線
ジグを作り&配線。
I2Cは計4線必要で、このモジュールは+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の時に一通り見たので、今回は一発で引き当てた。
ここです、インターフェイス関係の設定はここ!
P5のI2Cですね。
使う?YES、常時使う?YESと続けて、トップに戻ったらFINISH!!!で、再起動…と諸氏は描いていたが、これも新しくなったためか?再起動は無かった。
I2C関連のコマンド(ツール)導入
i2c-toolsをインストールしたら準備OK。
sudo apt install -y i2c-tools
まず探知(i2cdetect)してみると…お0x3Eいますね。(●´ω`●)
ここまで動けば準備作業は終わりです。
実験
コマンドオンリーで実装?
結線をおえた図が既に実行結果になってますが。(笑)
以後、ここに至るまでの紆余曲折を説明します。
もう余りに有名なので今更書く事もないのですが、
今回は全部コマンドプロンプト(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
あれ?2行目にでない…?1行目は完璧なのですけどね。
カーソル移動やらないとダメだったっけ?(完全にど忘れ
2行対応
まず1行ずつ表示するため、1行目のデータを変更。
DispMsg="AkkoInai"
※1行目の表示部分は上のままです。
2行目先頭にカーソルを移動します。
説明するまでも無いですが、2行目先頭のDDアドレスは0x40。
カーソル移動コマンドが0x80なので、双方ORして0xC0が2行目先頭移動となります。
i2cset -y 1 0x3e 0x00 0xc0
2行目の内容を
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
実行結果はご覧の通り!
中華な時間
ロジアナ結線に苦戦
上の実行結果画像からも解る通り、今回最大の敵は配線。
配線材が無かったり、コネクタのオスメスに泣かされました。
次は頑張る!
ロジアナの結果
PulseViewの高機能に助けられている、中華ロジアナでI2Cを観察してみました。
どれも良い感じの結果です。
非常にソフトに救われている感じです。
このソフトの出来があるからこのロジアナは強力なツールなのかも知れない。
今回もデータとしてはよく取れています。ただShellの実行速度の悲しさか、
各パケットの間隔が広く、データ全体を見渡す事が出来ませんでした。
連続データ送出が出来るとわかった今、もう少し書き直すべきですね。
課題
I2C自体の試験、LCDへの表示、ロジアナによる解析、どれも満足の行く結果でした。
しかし、配線に悩まされました。
もう少し工夫して、何事もやりやすくありたいと思います。
また、ラズパイのツール類も強力で、一部分をつまみ食い状態な為に、知らない事が多くなって来ました。
一度復習しないとダメかも知れない。
でも実はステッピングモーターとか周波数発生器とか…ネタは盛りだくさんだったり。💦
ラズパイは高機能なので何かをやるのがスピーディで良いですね。
しかしまだラズパイで何かする環境になって居ないので、余分が多く、必要な物が足りない。
過不足全開な状況です。
謝辞
今回は沢山の情報を検索した。余りに多すぎてリンクを張り切れていない。
言い訳だが、記事全量の数%も参考にしていないので、なかなか貼りにくい。
特にShell関係が多く、構文やお役立ち機能等、小ネタが続いた。
しかしそれら多くの知恵を頂いて、今回も無事に実験出来た。
この場で申し訳ないばかりだが、感謝の意を示します。
ありがとうございました。
また何かの時もよろしくお願いします。(厚かましい^^;)