Подключение TFT экрана 240х240 ST7789 к Wemos D1 Mini Pro

Распиновка Wemos D1 mini Pro ↔ ST77891

Пин ST7789НазначениеПин Wemos D1 mini ProGPIOКомментарий
GNDземляGGNDобщий минус
VCCпитание3V33.3 Впитание логики и подсветки
SCLSPI SCKD5GPIO14SPI Clock
SDASPI MOSID7GPIO13SPI Data
RESсбросD4GPIO2Reset дисплея
DCData/CommandD3GPIO0переключение команд/данных
BLKподсветка3V3всегда включена (или D1 для ШИМ)

Код

Библиотека

Нормально заработала только TFT_eSPI. Необходимо в файле /home/maksim/Arduino/libraries/TFT_eSPI/User_Setup.h указать настройки подключения:

// =======================================================
//  Настройка для Wemos D1 mini Pro + ST7789 (240x240, без CS)
// =======================================================
 
#define ST7789_DRIVER
 
// --------- Размеры экрана ----------
#define TFT_WIDTH  240
#define TFT_HEIGHT 240
 
// --------- Подключение SPI ----------
#define TFT_MOSI 13  // D7
#define TFT_SCLK 14  // D5
#define TFT_DC    0  // D3
#define TFT_RST   2  // D4
#define TFT_CS   -1  // 
#define TFT_BL   -1  // BLK напрямую на 3V3, можно управлять если подключить на цифровой выход
 
// --------- Оптимизация SPI ----------
#define SPI_FREQUENCY       40000000
#define SPI_READ_FREQUENCY  20000000
#define SPI_TOUCH_FREQUENCY 2500000
 
// --------- Цветовая схема ----------
#define TFT_RGB_ORDER TFT_BGR
 
// --------- Поворот экрана ----------
#define TFT_ROTATION 2
 
// --------- Поддерживаемые шрифты ----------
#define LOAD_GLCD
#define LOAD_FONT2
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8
#define LOAD_GFXFF
 

Тестовый скетч

#include <TFT_eSPI.h>
#include <SPI.h>
 
TFT_eSPI tft = TFT_eSPI();
 
void setup() {
 Serial.begin(115200);
 Serial.println("Init ST7789 on Wemos D1 mini Pro...");
 
 tft.init();
 tft.setRotation(1);
 tft.fillScreen(TFT_BLACK);
 tft.setTextColor(TFT_WHITE, TFT_BLACK);
 tft.setTextSize(2);
 tft.setCursor(10, 10);
 tft.println("ST7789 + Wemos OK!");
 
 for (int i = 0; i < 3; i++) {
   tft.fillScreen(TFT_RED); delay(300);
   tft.fillScreen(TFT_GREEN); delay(300);
   tft.fillScreen(TFT_BLUE); delay(300);
 }
 tft.fillScreen(TFT_BLACK);
 tft.setCursor(10, 40);
 tft.println("All OK!");
}
 
void loop() {
 static uint32_t last = 0;
 if (millis() - last > 500) {
   tft.setTextColor(random(0xFFFF));
   tft.setCursor(10, 70);
   tft.printf("Uptime: %lu s", millis() / 1000);
   last = millis();
 }
}

Footnotes

  1. Диаграмма выводов Wemos D1 mini Pro