グラフィック三昧 ③ 大き目ST7789とMKR WiFi 1010

 今回は、前回のと同じドライバが使えるTFTディスプレイです。Adafruitで入手しました。

  2.0" 320x240 Color IPS TFT Display with microSD Card Breakout

 2.0インチ320×240ピクセルのカラーTFTディスプレイです。大き目です。商品名にST7789が含まれていませんが、シルクには印刷されています。裏面にメモリ・カードのソケットがついています。

 電源およびロジック電圧は3~5Vです。

 マイコンは、前回と同じMKR WiFi 1010です。

接続

 SPIのハード制御を使います。

2.0インチST7789表示器 MKR WiFi 1010
Vin Vcc(3.3V)
3V(Backlight)  -
GND GND
SCK SCK 9
MISO  -
MOSI MOSI 8
TFTCS 5
RST 7
D/C 6
SDCS  -
BL  -

前回とほぼ同じ文字列表示のスケッチ

 ライブラリは、前回と同じです。


//  Written by Limor Fried/Ladyada for Adafruit Industries.

#include  <Adafruit_GFX.h>   // Core graphics library
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>
#define TFT_CS        5
#define TFT_RST       7 
#define TFT_DC        6

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

// Color definitions
#define BLACK    0x0000
#define BLUE     0x001F
#define RED      0xF800
#define GREEN    0x07E0
#define CYAN     0x07FF
#define MAGENTA  0xF81F
#define YELLOW   0xFFE0 
#define WHITE    0xFFFF

void setup(void) {
  tft.init(240, 320);           // Init ST7789 240x320
  tft.setSPISpeed(40000000);
  tft.setRotation(1);
}

void loop() {
  tft.setTextWrap(false);
  tft.fillScreen(BLACK);
  tft.setCursor(0, 30);
  tft.setTextColor(0b1100101110000000);
  tft.setTextSize(1);
  tft.println("Temperature:25.5`C");
  for (int xx=0;xx<100;xx++){
    tft.setCursor(-xx, 38);
    tft.setTextColor(YELLOW);
    tft.setTextSize(3);
    tft.fillRect(0,38,320,30,BLACK);
    tft.println("Temperature:25.5`C");
    delay(200);
  }
  delay(2000);
}

 実行例です。

グラフィックの描画

四角形

drawRect(5,2,12,10,WHITE); (座標x、座標y、幅、高さ、色)

塗りつぶしfillRect(5,2,12,10,GREEN);(座標x、座標y、幅、高さ、色)

角丸長方形

drawRoundRect(5,2,15,11,3,BLUE); (座標x、座標y、幅、高さ、コーナ半径、色)

塗りつぶしfillRoundRect(5,2,15,11,3,BLUE);(座標x、座標y、幅、高さ、コーナ半径、色)

drawCircle(11,7,6,RED); (座標x、座標y、半径、色)

塗りつぶしfillCircle(11,7,6,RED);(座標x、座標y、半径、色)

三角形

drawTriangle(3,13,5,2,18,7,MAGENTA); (座標x0、座標y0、座標x1、座標y1、座標x2、座標y2、色)

塗りつぶし;fillTriangle(3,13,5,2,18,7,MAGENTA);(座標x0、座標y0、座標x1、座標y1、座標x2、座標2、色)

 テストで使ったスケッチです。


//  Written by Limor Fried/Ladyada for Adafruit Industries.

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>

#define TFT_CS        5
#define TFT_RST       7 
#define TFT_DC        6

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

// Color definitions
#define BLACK    0x0000
#define BLUE     0x001F
#define RED      0xF800
#define GREEN    0x07E0
#define CYAN     0x07FF
#define MAGENTA  0xF81F
#define YELLOW   0xFFE0 
#define WHITE    0xFFFF

void setup(void) {
  tft.init(240, 320);           // Init ST7789 240x320
  tft.setSPISpeed(40000000);
  tft.setRotation(1);
}

void loop() {
  tft.fillScreen(BLACK);
      
  tft.drawRect(50,50,100,150,WHITE);
  tft.fillRect(150,150,100,150,GREEN);
  delay(3000);
  tft.drawCircle(150,50,40,RED);
  tft.fillCircle(150,250,50,RED);
  delay(3000);
  tft.drawRoundRect(100,80,40,80,10,BLUE);
  tft.fillRoundRect(180,250,50,40,5,BLUE);  
  delay(3000);
  tft.drawTriangle(100,100,40,20,180,80,MAGENTA);
  tft.fillTriangle(180,250,50,40,5,60,MAGENTA); 

  //tft.startWrite();

  //tft.endWrite();  

  delay(3000);
}

 実行例です。

応用例

 文字列、四角形、線分を組み合わせました。

(2022/10/24 別のプログラムだったので、正しいのに更新しました)


//  Written by Limor Fried/Ladyada for Adafruit Industries.

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>

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

// Color definitions
#define BLACK    0x0000
#define BLUE     0x001F
#define RED      0xF800
#define GREEN    0x07E0
#define CYAN     0x07FF
#define MAGENTA  0xF81F
#define YELLOW   0xFFE0 
#define WHITE    0xFFFF

void setup(void) {
  tft.init(240, 320);           // Init ST7789 240x320
  tft.setSPISpeed(40000000);
  tft.setRotation(1);
}

int top =45;

void loop() {
  tft.setTextWrap(false);
  tft.fillScreen(BLACK);
  tft.setCursor(0, 5);
  tft.setTextColor(YELLOW);
  tft.setTextSize(2);
  tft.println("Temperature:25.5`C");
  tft.println("Humidity:66%");
      
  tft.drawRect(2,top,315,194,WHITE);
  for (int i=0;i<194; i=i+50){
    tft.drawFastHLine(0,top+i,315,WHITE);
  }

  

  delay(3000);
}

 実行例です。

大きさの比較

           ①              ②               ③

前へ

グラフィック三昧 ② ST7789とMKR WiFi 1010

次へ

Arduino UNO R4の登場で広がるArduinoの世界(1)Arduino UNO R4の入手とArduino IDEのインストール