Nokia5110(PCD8544)のモノクロTFTモジュールを使う


Nokia5110用のモノクロTFTモジュールを入手したので、Raspberryで使ってみました。
84 X 48ドットの解像度で、8ドットフォントならば6行表示可能です。


今まで知りませんでしたが、有名なTFTモジュールの様でたくさんのライブラリが公開されています。
GitHubで探すと、幾つかRaspberry用のリポジトリも有りますが、
プログラムを変更することなく、引数の指定で任意の文字を表示させたかったので、新しく作りました。
ソースはこちらか らダウン ロードできます。

モジュールとPiとの接続は以下の様になります。
PCD8544 Rpi(Pin#)
RST GPIO23(16)
CE CE0(24)
DC GPIO24(18)
DIN MOSI(19)
CLK SCLK(23)
VCC 3.3V
BL 3.3V/GND(*)
GND GND

(*)モジュールによって3.3Vのモジュールと、GNDのモジュールが有ります。

ソフトウェアSPIを使っているので、プログラムの以下の箇所を変更することで、好きなピンに変更可能です。
// pin setup
#define _din  12
#define _sclk 14
#define _dc    5
#define _rst   4
#define _cs   10

今回、下の写真の様に青のモジュールと赤のモジュールの2つを入手しましたが、バックライトの動きが違いました。



青のモジュールはバックライトピンに3.3Vを供給するとバックライトが点灯します。
赤のモジュールはバックライトピンをGNDに接続するとバックライトが点灯します。



インストールは以下の手順です。
$ git clone https://github.com/nopnop2002/Raspberry-pcd8544
$ cd Raspberry-pcd8544
$ cc -o nokia nokia.c fontx.c pcd8544.c -lwiringPi

日本語のフォントファイルは、こ ちらで公開されている8×8 ドット日本語フォント「美咲フォント」のFONT2Xを使っています。
実行時の引数の指定は以下の通りです。
全てのコマンドは[nokia s]コマンドで反映されます。
nokia +1 文字列 1行目に表示する文字の指定(外部フォントで表示)
nokia +2 文字列 2行目に表示する文字の指定(外部フォントで表示)
nokia +3 文字列 3行目に表示する文字の指定(外部フォントで表示)
nokia +4 文字列 4行目に表示する文字の指定(外部フォントで表示)
nokia +5 文字列 5行目に表示する文字の指定(外部フォントで表示)
nokia +6 文字列 6行目に表示する文字の指定(外部フォントで表示)
nokia +a 文字列 1行目に表示する文字の指定(内部6 x 8フォントで表示)
nokia +b 文字列 2行目に表示する文字の指定(内部6 x 8フォントで表示)
nokia +c 文字列 3行目に表示する文字の指定(内部6 x 8フォントで表示)
nokia +d 文字列 4行目に表示する文字の指定(内部6 x 8フォントで表示)
nokia +e 文字列 5行目に表示する文字の指定(内部6 x 8フォントで表示)
nokia +f 文字列 6行目に表示する文字の指定(内部6 x 8フォントで表示)
nokia -1 1行目の文字を削除
nokia -2 2行目の文字を削除
nokia -3 3行目の文字を削除
nokia -4 4行目の文字を削除
nokia -5 5行目の文字を削除
nokia -6 6行目の文字を削除
nokia +L 1行分スクロールアップ
nokia -L 1行分スクロールダウン
nokia P1 n 1行目の表示開始位置をn文字目に設定
nokia P2 n 2行目の表示開始位置をn文字目に設定
nokia P3 n 3行目の表示開始位置をn文字目に設定
nokia P4 n 4行目の表示開始位置をn文字目に設定
nokia P5 n 5行目の表示開始位置をn文字目に設定
nokia P6 n 6行目の表示開始位置をn文字目に設定
nokia c num コントラストをnumに設定
nokia r 全ての文字を削除、全ての反転、全ての表示開始位置を解除
nokia s 表示を反映

このプログラムは内部に6X8ドットのASCIIのフォントを抱えています。
ASCII文字に限り、外部フォント(4X8)で表示/内部フォント(6X8)で表示を切り替えることができます。
ASCIIの内部フォントはこ ちらのコードからお借りしました。
ページ先頭の写真の上4行が外部フォント、下2行が内部フォントでの表示です。

こちらで紹介してる128 X 64のOLEDと比べてみました。
OLEDの日本語は16X16ドット、Nokia5110の日本語は8X8ドットです。
解像度の関係で、見た目はほぼ同じ大きさとなります。


明らかにOLEDの方がクリアに見えます。





このようなRaspberry Piに直接マウントできるTFTモジュールを入手しました。
丸印のピンが使われているピンで、分かり易いです。


裏面にはGOIOのピンアサインがマーキングされています。
バックライトON/OFFのSWが付いています。


こちらのライ ブラリの以下の箇所を変更することで、このモジュールを使うことができます。
// pin setup
#if 0
#define _din  12
#define _sclk 14
#define _dc    5
#define _rst   4
#define _cs   10
#endif
#define _sclk  0
#define _din   1
#define _dc    2
#define _cs    3
#define _rst   4

ライブラリに付属しているme.shを動かしてみました。


バックライトを消してみましたが、あまり変わらないです。


Raspberryで使える小型TFTは他にも沢山有りますが、コントローラチップの型番、I/Fの種類、
ピンアサインと初期化コードが分かれば、同じように動かすことができると思います。
但し、Arduino用のシールドは基本、5V駆動なので、モジュールによっては動かないかもしれません。