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

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

  ST7789搭載 Adafruit 1.47インチ 320x172 角丸 カラーIPS TFTディスプレイ

 1.47インチ、高密度250 ppiの172 x 320ピクセル フルカラーTFTディスプレイです。大きさは前回とほとんど変わりません。裏面にメモリ・カードのソケットがついています。

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

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

接続

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

ST7789表示器 MKR WiFi 1010
Vin Vcc(3.3V)
3V(Backlight)  -
GND GND
SCK SCK 9
MISO  -
MOSI MOSI 8
TFTCS 5
RST 7
DC 6
SDCS  -
Lite  -

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

 ライブラリは、前回と同じです。ヘッダはAdafruit_ST7789.hに変更しています。


//  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);

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

void loop() {
  tft.setTextWrap(false);
  tft.fillScreen(ST77XX_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(ST77XX_YELLOW);
    tft.setTextSize(3);
    tft.fillRect(0,38,320,30,ST77XX_BLACK);
    tft.println("Temperature:25.5`C");
    delay(200);
  }
  delay(2000);
}

 実行例です。

グラフィック

 色の指定ST77XX_の記述が面倒なので、定義しなおしました。

// 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

ドットと直線

ドットdrawPixel(10,10,YELLOW); (座標x、座標y、色)

直線drawLine(20,20,100,200,WHITE);(開始座標x、開始座標y、終了座標x、終了座標y、色)

がありますが、水平と垂直には別途関数が用意されています。

水平線drawFastHLine(40,40,100,WHITE);(座標x、座標y、幅、色)

垂直線drawFastVLine(30,30,100,WHITE);(座標x、座標y、高さ、色)

 DMAを使って高速化?した関数もあります。

  tft.startWrite();
    tft.writePixel(15,15,RED);
    tft.writeLine(50,50,100,140,RED);
    tft.writeFastVLine(130,30,100,RED);
    tft.writeFastHLine(140,40,100,RED);
  tft.endWrite();
 

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


//  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(172, 320);           // Init ST7789 172x320
  tft.setSPISpeed(40000000);
  tft.setRotation(1);
}

void loop() {
  tft.fillScreen(BLACK);
  tft.drawPixel(10,10,YELLOW);
  tft.startWrite();
    tft.writePixel(15,15,RED);
    tft.writeLine(50,50,100,140,RED);
    tft.writeFastVLine(130,30,100,RED);
    tft.writeFastHLine(140,40,100,RED);
  tft.endWrite();  

  tft.drawLine(20,20,100,200,WHITE);
  tft.drawFastVLine(30,30,100,WHITE);
  tft.drawFastHLine(40,40,100,WHITE);
 
  delay(3000);
}

 実行例です。

前へ

グラフィック三昧 ① ST7735とMKR WiFi 1010

次へ

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