Arduino IDE
Для работы с дисплеем будем использовать библиотеку Adafruit-ST7735-Library (ссылка в конце статьи). Эта библиотека описывает протокол обмена сразу с двумя распространёнными контроллерами дисплеев: ST7735 и ST7789. Нам будет интересен последний из них.
Пусть первая программа выведет в центре дисплея текст «Hello world!».
Сразу после подключения библиотеки, создадим объект класса Adafruit-ST7789 с именем tft. При создании объекта укажем номера контактов отладочной платы, к которым мы ранее подключили линии CS, RS и RST дисплея:
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_RS, TFT_RST);
При запуске программы необходимо инициализировать дисплей. Делаем это при помощи функции tft.init. У функции два аргумента: ширина и высота матрицы в пикселах. Для нашего дисплея они будут равны 240 и 320:
tft.init(240, 320);
Далее можем вызывать разные функции объекта tft, для построения графики или вывода текста на дисплей. Полный код программы:
#include <Adafruit_ST7789.h>
#define TFT_CS 10
#define TFT_RST 9
#define TFT_RS 8
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_RS, TFT_RST);
void setup(void) {
tft.init(240, 320);
tft.fillScreen(ST77XX_BLACK); // закрашиваем экран чёрным цветом
tft.setTextSize(2); // размер шрифта - 2
tft.setTextColor(ST77XX_MAGENTA); // цвет - маджента
tft.setCursor(45, 150); // координаты текста
tft.print("Hello world!");
}
void loop() {
}
Загружаем программу на UNO2.

Геометрия и цвета
В следующей программе изобразим палитру. Используем функцию fillRect, которая рисует закрашенный прямоугольник.
В начале программы определим 12 цветов. Помним, что контроллер ST7789 использует только 16 разрядов для хранения цвета точки, следовательно, нам потребуется переменная типа uint16_t, а вернее массив таких переменных.
Затем строим в цикле двенадцать прямоугольников с заданными в массиве цветами.
#include <Adafruit_ST7789.h>
#define TFT_CS 10
#define TFT_RST 9
#define TFT_RS 8
#define BOX_HEIGHT 320/2
#define BOX_WIDTH 240/6
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_RS, TFT_RST);
uint16_t colors[12] = {
0x0000, // чёрный
0xFFFF, // белый
0xBDF7, // светло серый
0x7BEF, // серый
0xF800, // красный
0xFFE0, // жёлтый
0xFBE0, // оранжевый
0x79E0, // коричневый
0x7E0, // зелёный
0x7FF, // голубой
0x1F, // синий
0xF81F // розовый
};
void setup(void) {
tft.init(240, 320);
tft.fillScreen(ST77XX_BLACK);
byte color = 0;
for(byte y=0; y<2; y++){
for(byte x=0; x<6; x++){
tft.fillRect(2+x*BOX_WIDTH, 2+y*BOX_HEIGHT, BOX_WIDTH, BOX_HEIGHT, colors[color]);
color++;
}
}
}
void loop() {
}
Загружаем программу на UNO2 и смотрим результат.

Библиотека TFT_eSPI
Для работы с дисплеем также можно использовать библиотеку TFT_eSPI (ссылка в конце статьи).
Для правильной работы библиотеки TFT_eSPI сначала следует настроить файл конфигурации. Это необходимо сделать вручную, открыв в текстовом редакторе файл:
путь_к_библиотекам\Arduino\libraries\TFT_eSPI-master\User_Setup.h
Можно удалить всё содержимое этого файла и оставить только следующие строки:
#define USER_SETUP_INFO "User_Setup"
#define ST7789_2_DRIVER
#define TFT_RGB_ORDER TFT_BGR
#define TFT_WIDTH 240
#define TFT_HEIGHT 320
#define TFT_INVERSION_ON
#define TFT_MOSI 18
#define TFT_SCLK 5
#define TFT_CS 15
#define TFT_DC 27
#define TFT_RST 33
#define LOAD_GLCD
#define SPI_FREQUENCY 27000000
#define SPI_READ_FREQUENCY 20000000
Тестовый скетч для дисплея
Этот пример будем запускать на отладочной плате Графит-S3, так как библиотека TFT_eSPI работает только с 32-разрядными микроконтроллерами.
Открываем стандартный пример из библиотеки TFT_eSPI под названием Arduino_Life. Это модель клеточного автомата, описанная впервые английским математиком Джоном Конвеем в далёком 1970.
В коде примера ничего менять не нужно, всё уже настроено в User_Setup. Для правильной работы библиотеки в Arduino IDE необходимо выбрать целевую плату «Графит-S3«. Загружаем программу на плату и наблюдаем.
