Полное руководство по дисплею ST7789 и Arduino
В этом уроке мы покажем, как подключить и использовать цветной IPS дисплей на контроллере ST7789 вместе с Arduino Nano. Сначала вы научитесь выводить текст «Hello World», а затем создадите простой измеритель температуры и влажности в реальном времени с помощью датчика DHT11 и ST7789. к концу вы будете уверенно управлять этим дисплеем в любых своих проектах.
Что понадобится для проекта
- Arduino Nano или совместимая плата
- Цветной IPS дисплей на контроллере ST7789
- Датчик температуры и влажности DHT11
- Макетная плата (breadboard)
- Набор джампер‑проводов
- Arduino IDE для загрузки кода
Назначение выводов дисплея ST7789
| Вывод дисплея | Пин Arduino | Назначение |
|---|---|---|
| GND | GND | Общий провод |
| VCC | 5V или 3.3V | Питание дисплея |
| SCL / CLK | D13 | Тактовый сигнал SPI |
| SDA / MOSI | D11 | Передача данных SPI |
| RES | D8 | Перезагрузка дисплея |
| DC | D7 | Режим данных / команд |
Принцип работы
ST7789 — это цветной IPS TFT дисплей с разрешением примерно 240×240 пикселей и управляется по интерфейсу SPI. Arduino отправляет команды и данные по SPI, а дисплей рисует графику или текст. Первым шагом обычно выводят текст «Hello World», а затем можно расширить проект до показа измерений датчиков, например, температуры и влажности.
Установка библиотек
Перед работой с дисплеем в Arduino IDE нужно установить две библиотеки:
- Adafruit GFX — графическая базовая библиотека
- Adafruit ST7789 — драйвер для дисплея ST7789
Первый пример — Hello World
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
// Пины дисплея
#define TFT_CS 10
#define TFT_RST 8
#define TFT_DC 7
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
void setup() {
tft.init(240, 240); // Инициализация
tft.fillScreen(ST77XX_BLACK); // Черный фон
tft.setTextColor(ST77XX_WHITE); // Белый текст
tft.setTextSize(2);
tft.setCursor(10, 10);
tft.print("Hello World!");
}
void loop() {
// Пусто — Hello World показывается один раз
}
Этот скетч инициализирует дисплей, очищает экран и выводит текст «Hello World!» белым цветом на черном фоне.
Пример с датчиком DHT11
Следующий шаг — отобразить значения температуры и влажности на экране в реальном времени. Для этого понадобится библиотека DHT и немного кода для чтения датчика. Ниже приведён пример:
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
#include <DHT.h>
#define TFT_CS 10
#define TFT_RST 8
#define TFT_DC 7
#define DHTPIN 2
#define DHTTYPE DHT11
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
tft.init(240, 240);
tft.fillScreen(ST77XX_BLACK);
dht.begin();
}
void loop() {
float humidity = dht.readHumidity();
float temp = dht.readTemperature();
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(10, 10);
tft.setTextSize(2);
tft.setTextColor(ST77XX_CYAN);
tft.print("Temp: ");
tft.print(temp);
tft.println(" C");
tft.setCursor(10, 50);
tft.setTextColor(ST77XX_YELLOW);
tft.print("Humidity: ");
tft.print(humidity);
tft.println(" %");
delay(2000);
}
Этот код периодически считывает данные с датчика DHT11 и обновляет экран, показывая текущие значения температуры и влажности.
FAQ — Дисплей ST7789 с Arduino
Можно ли использовать ST7789 без SPI?
Нет, дисплей ST7789 работает через SPI — такова спецификация контроллера.
Зачем нужны библиотеки Adafruit?
Библиотеки Adafruit упрощают рисование графики и текста, а также инициализацию дисплея.
Какой максимальный размер дисплея ST7789?
Типичный ST7789 имеет разрешение до 240×240 пикселей, но встречаются другие варианты с похожим интерфейсом.
Можно ли показать изображение?
Да — используя дополнительные функции библиотек можно рисовать изображения и графику.
Почему экран остаётся пустым?
Обычно это из‑за неправильных соединений или отсутствия питания подсветки дисплея.
Заключение
ST7789 — мощный и яркий дисплей, который можно легко использовать в проектах Arduino для отображения текста, графиков и данных с датчиков. Он идеально подходит для визуализации информации в реальных проектах и помогает освоить работу с графической библиотекой.