今から始める電子工作 Step3 ② SPI グラフィック・ディスプレイ
ここでは、グラフィック・ディスプレイを利用します。画素数、色数が多いので、I2CではなくSPIバスに接続します。SPIバスは、I2Cのバス転送速度100kHzに比べて速くデフォルトで10MHzです。
●環境
- Arduino IDE;2.3.5
- Windows11;24H2
- Arduino UNO R4 WiFi
●利用したのはAdafruit 2.0" 320x240 Color IPS TFT Display
Adafruitのグラフィック・ディスプレイにはたくさんの種類があります。ここでは、大きめの2インチのディスプレイを使います(外形6x3.5cm)。
●接続とドライバの導入
ドキュメント Adafruit 2.0" 320x240 Color IPS TFT Display Arduino Wiring & Test
にしたがって、接続します。
SPIバスは、何十年もMOSI、MISOなどの名称が使われてきましたが、数年前に、一部変更になりました。変更しない会社もあるので、混在しています。
Arduino UNO R4 WiFi のベースのピン名 | 接続図のピンの名称 | 回路図のピンの名称 | Display のピンの名称 |
---|---|---|---|
D13 | RSPCKA | SCK | SCK |
D12 | CIPOA | MISO | MISO |
D11 | CIPIA | MOSI | MOSI |
D10 | SSLA0 | CS | CS |
D9 | RST | ||
D8 | D/C | ||
GND | GND | GND | |
+5V | 5V | VIN |
(米)D12は配線していません。
ドライバを導入します。
最初は、Adafruit_GFXのライブラリです。これは、I2Cのグラフィック・ディスプレイで、すでに導入していました。
次に、Adafruit ST7735 and ST7789のライブラリを入れます。
上記のライブラリをインストールするとき、一緒にいくつかのライブラリを入れるようにというパネルが出ます。全てをインストールします。
スケッチ例の、Adafruit ST7735 and ST7789 Libraryからgraphicstestを選択します。
スケッチの中で、「Adafruit 2.0" 320x240 Color IPS TFT Display」用に、2か所変更します。
コンパイルして実行します。
●テキストを表示
サンプルのスケッチから、テキストを表示する部分だけ抜き出しました。
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h> #define TFT_CS 10 #define TFT_RST 9 // Or set to -1 and connect to Arduino RESET pin #define TFT_DC 8 // For 1.14", 1.3", 1.54", 1.69", and 2.0" TFT with ST7789: Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); void setup(void) { Serial.begin(9600); delay(1000); Serial.print(F("Hello! ST7789 TFT Test")); // OR use this initializer (uncomment) if using a 2.0" 320x240 TFT: tft.init(240, 320); // Init ST7789 320x240 Serial.println(F("Initialized")); tft.fillScreen(ST77XX_BLACK); Serial.println(); } void loop() {
tft.setRotation(0);
tftPrintTest();
delay(5000);
tft.setRotation(1);
tftPrintTest();
delay(5000);
tft.setRotation(2);
tftPrintTest();
delay(5000);
tft.setRotation(3);
tftPrintTest();
delay(5000);
} void tftPrintTest() { tft.setTextWrap(false); tft.fillScreen(ST77XX_BLACK); tft.setCursor(0, 30); tft.setTextColor(ST77XX_RED); tft.setTextSize(1); tft.println("Hello World!"); tft.setTextColor(ST77XX_YELLOW); tft.setTextSize(2); tft.println("Hello World!"); tft.setTextColor(ST77XX_GREEN); tft.setTextSize(3); tft.println("Hello World!"); tft.setTextColor(ST77XX_BLUE); tft.setTextSize(4); tft.print(1234.567); delay(3000); tft.setCursor(0, 0); tft.fillScreen(ST77XX_BLACK); tft.setTextColor(ST77XX_WHITE); tft.setTextSize(0); tft.println("Hello World!"); delay(3000); }
実行している様子です。