ILI9325/9341/9342の2.4インチパラレル TFTモジュールを使う


ILI9325/9341/9342の2.4インチパラレルTFTモジュールが動きましたので紹介します。
写真を見て分かるように、完全にArduino UNO用のシールドモジュールです。
Arduino用なので5V駆動(背面のレギュレータで3.3Vに降圧)が基本ですが、ILI9342はレギュレータが実装されていないので 3.3V駆動です。

ILI9325




カラーバーを表示すると分かりますが、あちこちドットが抜けていることが分かります。


ILI9341




こちらのカラーバーはきれいに表示されます。


ILI9342

見た目、ILI9341とそっくりですがレギュレータが実装されていないので3.3V駆動です。
またフラットケーブルの取り付け位置が違います。



こちらのカラーバーもきれいに表示されます。


こちらで 紹介されているとおり、mcufriend.comの2.4インチシールドモジュールには多数のバリエーションが有ります。
裏面にLCDコントローラーの型番が刻印されていることが有りますが、刻印もない時は、
こちらのツールを使って、LCDコン トローラーを特定する必要が有ります。
このツールはこ ち らで公開されているArduino用の「LCD_ID_readreg」を移植しただけです。

これらのモジュールは、全て240x320の解像度です。
座標軸の設定(X=0、Y=0の場所やX,Yの増分方向)はTFTの初期化パラメータで変更することができますが、以下の様に設定しています。


TFTモジュールに対応してコンパイル方法が変わります。
ソースとコンパイル手順はこ ちらで 公開して います。

モジュールとPiとの接続は以下の様になります。
パラレルI/Fなのでピンをたくさん使います。
TFT RPi/OPi(Pin#)
LCD_RST Pin#7
LCD_CS Pin#3
LCD_RS Pin#5
LCD_WR Pin#26
LCD_RD Pin#28
LCD_D0 Pin#29
LCD_D1 Pin#31
LCD_D2 Pin#33
LCD_D3 Pin#35
LCD_D4 Pin#37
LCD_D5 Pin#32
LCD_D6 Pin#36
LCD_D7 Pin#38
5V 5V(*)
3.3V 3.3V(*)
GND GND

(*)本体裏側にレギュレータが実装されていれば5V駆動、実装されていなければ3.3V駆動です。

全てのピンは好きなピンに変更可能です。
ピンのアサインはpin.confに定義します。

簡単なグラフィック関数が含まれています。








フォントファイルはFONTX形式のファイルを使っています。


複数のフォントを同時に使う事ができます。


WiringPiライブラリしか使っていないので、OrangePiでも動きます。




ピンをたくさん使うのが嫌な時は、74x595(シフトレジスター)経由でも動かすことができます。
但し、メチャクチャ遅くて、ほとんど使い物にはなりません。
git clone https://github.com/nopnop2002/ili9325_rpi
cd ili9325_rpi
cc -o demo demo.c ili93xx.c fontx.c -lwiringPi -lm -D{モデル名称} -DSR595

この場合のモジュールとPiとの接続は以下の様になります。
TFT RPi/OPi(Pin#) 74x595
LCD_RST Pin#7
LCD_CS Pin#3
LCD_RS Pin#5
LCD_WR Pin#26
LCD_RD Pin#28
5V 5V(*)
3.3V 3.3V(*)
GND GND
LCD_D1
QB(Pin#1)
LCD_D2
QC(Pin#2)
LCD_D3
QD(Pin#3)
LCD_D4
QE(Pin#4)
LCD_D5
QF(Pin#5)
LCD_D6
QG(Pin#6)
LCD_D7
QH(Pin#7)

GND GND(Pin#8)

N/C QH'(Pin#9)

3.3V SRCLR(Pin#10)

Pin#18 SRCLK(Pin#11)

Pin#22 RCLK(Pin#12)

GND OE(Pin#13)

Pin#16 SER(Pin#14)
LCD_D0
QA(Pin#15)

3.3V VCC(Pin#16)

(*)本体裏側にレギュレータが実装されていれば5V駆動、実装されていなければ3.3V駆動です。



2.4インチだと大して複雑なグラフは書けません。
そこで、毎回プログラムを変更するのも面倒なので、テキストファイルに定義したコマンドを実行する
インタプリターを作りました。
まず、以下のようなテキストファイル(hoge.txt)を作ります。
1行が1つの関数に対応しています。
関数定義はili93xx.hを参照してください。

コマンドの最後の0xnnnnはRGB565形式の色コードです。
HTMLのカラーコード(0xRRGGBB)からRGB565形式の色コードへの変換にはrgb2colorを使います。
rgb2colorコマンドの使い方はme.shを参照してください。
FillScrren,0xffff
SetFontDirection,1
DrawRoundRect,205,40,230,300,10,
DrawUTF8String,G24,205,280,System Information,0x0000
DrawFillRect,175,305,185,315,0x001f
DrawUTF8String,G24,170,300,wlan0 IP Address,0x001f
DrawUTF8String,G24,150,300,192.168.10.126,0x001f
DrawFillRect,135,305,145,315,0xf811
DrawUTF8String,G24,130,300,eth0 IP Address,0xf811
DrawUTF8String,G24,110,300,<NONE>,0xf811
DrawFillRect,95,305,105,315,0xfac0
DrawUTF8String,G24,90,300,kernel release,0xfac0
DrawUTF8String,G24,70,300,4.14.34-v7+,0xfac0
DrawFillRect,55,305,65,315,0x07e0
DrawUTF8String,G24,50,300,CPU Temp.,0x07e0
DrawUTF8String,G24,30,300,47.2'C,0x07e0

drawコマンドの引数に、このファイル名を指定するとグラフを表示します。
シェルスクリプト内でも利用することができます。
./draw hoge.txt

bash ./me.sh

me.shを実行するとこのように表示します。


これらのモジュールはどれもFrameBufferコンソールとして使うことができました。
FrameBufferコンソールについては、こちらで紹介しています。

続く....