Arduino IDE

Для работы с дисплеем будем использовать библиотеку Adafruit-ST7735-Library (ссылка в конце статьи). Эта библиотека описывает протокол обмена сразу с двумя распространёнными контроллерами дисплеев: ST7735 и ST7789. Нам будет интересен первый из них.

Пусть первая программа выведет в центре дисплея текст «Hello world!».

Сразу после подключения библиотеки, создадим объект класса Adafruit-ST7735 с именем tft. При создании объекта укажем номера контактов отладочной платы, к которым мы ранее подключили линии CS, RS и RST дисплея:

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_RS, TFT_RST);

При запуске программы необходимо инициализировать дисплей. Делаем это при помощи функции tft.initR, у которой только один аргумента — код дисплея. В зависимости от указанного кода, библиотека генерирует соответствующий набор команд для запуска дисплея. В нашем случае код будет INITR_MINI160x80_PLUGIN.

tft.initR(INITR_MINI160x80_PLUGIN);

Изначально все подобные дисплеи ориентированы так, что ширина у них меньше, чем высота. Чтобы повернуть изображения можно использовать функцию setRotation с одним аргументом: 0 — не поворачивать, 1 — на 90 градусов, 2 — на 180, 3 — на 270.

Далее можем вызывать разные функции объекта tft, для построения графики или вывода текста на дисплей. Полный код программы:

#include <Adafruit_ST7735.h>

#define TFT_CS        10
#define TFT_RST        9
#define TFT_RS         8

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_RS, TFT_RST);

void setup(void) {
    tft.initR(INITR_MINI160x80_PLUGIN);
    tft.setRotation(3);

    tft.fillScreen(ST77XX_BLACK);

    tft.setTextSize(2);
    tft.setTextColor(ST77XX_MAGENTA);
    tft.setCursor(10, 35);
    tft.print("Hello world!");
}

void loop() {
}

Загружаем программу на отладочную плату UNO2 и наблюдаем текст:

Дисплей IPS 0.96 ST7735 RobotClass и Arduino

Геометрия и цвета

В следующей программе изобразим палитру. Используем функцию fillRect, которая рисует закрашенный прямоугольник.

В начале программы определим 12 цветов. Помним, что контроллер ST7735 использует только 16 разрядов для хранения цвета точки, следовательно, нам потребуется переменная типа uint16_t, а вернее массив таких переменных.

Затем строим в цикле двенадцать прямоугольников с заданными в массиве цветами.

#include <Adafruit_ST7735.h>

#define TFT_CS        10
#define TFT_RST        9
#define TFT_RS         8

#define BOX_HEIGHT 80/2
#define BOX_WIDTH 160/6

Adafruit_ST7735 tft = Adafruit_ST7735(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.initR(INITR_MINI160x80_PLUGIN);
    tft.setRotation(3);

    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 и смотрим результат.

Дисплей IPS 0.96 ST7735 RobotClass и Arduino

Библиотека TFT_eSPI

Для работы с дисплеем также можно использовать библиотеку TFT_eSPI (ссылка в конце статьи).

Для правильной работы библиотеки TFT_eSPI сначала следует настроить файл конфигурации. Это необходимо сделать вручную, открыв в текстовом редакторе файл:

путь_к_библиотекам\Arduino\libraries\TFT_eSPI-master\User_Setup.h

Можно удалить всё содержимое этого файла и оставить только следующие строки:

#define USER_SETUP_INFO "User_Setup"

#define ST7735_DRIVER

#define TFT_WIDTH  80
#define TFT_HEIGHT 160

#define ST7735_GREENTAB160x80

#define TFT_INVERSION_ON

#define TFT_MOSI 18
#define TFT_SCLK 5
#define TFT_CS   14
#define TFT_DC   23
#define TFT_RST  22

#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«. Загружаем программу на плату и наблюдаем.

Дисплей IPS 0.96 RobotClass

Изменено: