TFT液晶モジュール(ST7735)をArduinoで使う(2)

電子工作

aitendoさんの1.8インチTFT液晶モジュール(M018C7735SPI)(以下、TFT)をArduinoで使うための備忘録です。今回はプログラム関係について、書きたいと思います。

このTFT制御用にST7735が使われているので、Arduinoのライブラリ Arduino-ST7735-Library をダウンロードして使います。簡単なプログラムを、以下に示します。

#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
 
#define TFT_RST 8
#define TFT_DC 9
#define TFT_CS 10

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup() {
  tft.initR(INITR_GREENTAB);
  tft.fillScreen(ST7735_BLACK);
  tft.setRotation(0);
  tft.setTextColor(ST7735_GREEN);
  tft.setCursor(1,60);
  tft.print("Hellow World");
}

void loop() {

}

11行目でTFTの初期化を行っています。TFTを購入したときに、液晶面を保護するためのシートが貼られていますが、このシートについているタグの色で初期化のパラメーターが変わるようです。ライブラリを見ると、「INITR_GREENTAB」、「 INITR_REDTAB 」、「 INITR_BLACKTAB」の三種類があるようです。

私が入手したものは赤いタグが付いていたので、「 INITR_REDTAB 」 で初期化しましたが、表示がおかしなことになりました。3種類のパラメータで初期化した結果を次に示します(画面を270°回転、背景は黒、文字色は青で「Hellow World」を描画)。初期化パラメータは、上からINITR_REDTAB、INITR_BLACKTAB、INITR_GREENTABです。

INITR_REDTABで初期化
INITR_BLACKで初期化
INITR_GREENで初期化

INITR_REDTABで初期化したものは、Helloくらいまで文字がダブっています。INITR_BLACKTABで初期化したものは、文字色が赤になっています(RGB → BGR ?)。INITR_GREENTABで初期化したものは、設定どおりになっています。実は、INITR_GREENTABで初期化したとき、上と右に数ドットの幅で画面が乱れていました。これに関しては、ライブラリ「 Adafruit_ST7735 .cpp」の223行目、224行目の値を「0」に変更することで対処できます。

219 void Adafruit_ST7735::initR(uint8_t options) {
220 commonInit(Rcmd1);
221 if (options == INITR_GREENTAB) {
222 displayInit(Rcmd2green);
223 _colstart = 0; // 2 -> 0
224 _rowstart = 0; // 1 -> 0

225 } else if ((options == INITR_144GREENTAB) || (options == INITR_HALLOWING)) { 

私が入手できたのは、赤いタグの付いたものしかなかったので、他のタイプについては確認できていません。赤いタグが付いていましたが、INITR_GREENTABで初期化して使っています。

描画に関して、よく使う関数は以下のとおりです。他にもあるようですが、ネットで検索するかライブラリを解析してみてください。

colorは、16bitカラーです。「ST7735_*****」の変数で、9色の設定がライブラリにあります。

  • fillScreen(color):画面全体をcolorで塗りつぶす。
  • setRotation(n):画面をn×90°回転します。上記の初期化比較の写真は、n=3、270°回転しています。
  • setFont(font):使いたいフォントのを指定します。ライブラリのフォルダ\Adafruit-GFX-Library-master\Fonts\内にいくつかのフォントが用意されています。#includeで呼び出してから使ってください。デフォルトのフォントを使うときは、NULLを指定します。
  • setTextSize(n):文字の大きさを指定します。
  • setTextColor(color):文字色をcolorで指定します。
  • setCursor(x, y):文字を書く位置を指定します。
  • drawRect(x, y, wx, wy, color):x,yを始点にして、幅xw、高さwyの四角形を色colorで描画します。
  • fillRect(x, y, wx, wy, color):x,yを始点にして、幅xw、高さwyの四角形を色colorで塗りつぶして描画します。
  • drawCircle(x, y, r, color):x,yを中心に半径rの円を色colorで描画します。
  • fillCircle(x, y, r, color):x,yを中心に半径rの円を色colorで塗りつぶして描画します。
  • drawLine(x1, y1, x2, y2, color):x1,y1からx2,y2まで色colorで直線を描画します。
  • drawPixel(x, y, color):x,yの位置に色colorの点を描画します。

だいだいの事はこれらの関数を駆使して、実現できると思います。表示したい情報量が増えてくると、1.8インチ128×160ドットでは足りなくなり、2.8インチ240×320ドット、3.5インチ320×480ドットのTFT液晶モジュールにも手を出しています。制御用のICが違うので、ライブラリの変更が必要ですがほぼ同じ様に使うことができます。

現在、RDA5830を使ったAM/FMラジオを作っています。表示部にこの1.8インチTFTを使っていますので、思う様なものができましたらご紹介したいと思います。

コメント

PAGE TOP