LoginSignup
1
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-07-29

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の時に一通り見たので、今回は一発で引き当てた。
Screenshot at 2019-07-29 11-58-46.png
ここです、インターフェイス関係の設定はここ!
Screenshot at 2019-07-29 11-59-02.png
P5のI2Cですね。
Screenshot at 2019-07-29 11-59-11.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
ここまで動けば準備作業は終わりです。

実験

コマンドオンリーで実装?

結線をおえた図が既に実行結果になってますが。(笑)
以後、ここに至るまでの紆余曲折を説明します。
IMG_20190729_144238.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
あれ?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
実行結果はご覧の通り!
IMG_20190729_155653.png

中華な時間

ロジアナ結線に苦戦

上の実行結果画像からも解る通り、今回最大の敵は配線。
配線材が無かったり、コネクタのオスメスに泣かされました。
次は頑張る!

ロジアナの結果

PulseViewの高機能に助けられている、中華ロジアナでI2Cを観察してみました。
Screenshot at 2019-07-29 15-20-12.png
Screenshot at 2019-07-29 15-21-40.png
Screenshot at 2019-07-29 15-22-10.png
Screenshot at 2019-07-29 15-23-25.png
Screenshot at 2019-07-29 15-23-50.png
Screenshot at 2019-07-29 16-04-24.png
どれも良い感じの結果です。
非常にソフトに救われている感じです。
このソフトの出来があるからこのロジアナは強力なツールなのかも知れない。
今回もデータとしてはよく取れています。ただShellの実行速度の悲しさか、
各パケットの間隔が広く、データ全体を見渡す事が出来ませんでした。
連続データ送出が出来るとわかった今、もう少し書き直すべきですね。

課題

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

謝辞

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1