グラフィック三昧 ③ 大き目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);
}
実行例です。
●大きさの比較
① ② ③