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

Распиновка Wemos D1 mini Pro ↔ ST77891
| Пин ST7789 | Назначение | Пин Wemos D1 mini Pro | GPIO | Комментарий |
|---|---|---|---|---|
| GND | земля | G | GND | общий минус |
| VCC | питание | 3V3 | 3.3 В | питание логики и подсветки |
| SCL | SPI SCK | D5 | GPIO14 | SPI Clock |
| SDA | SPI MOSI | D7 | GPIO13 | SPI Data |
| RES | сброс | D4 | GPIO2 | Reset дисплея |
| DC | Data/Command | D3 | GPIO0 | переключение команд/данных |
| 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();
}
}