Цветной IPS дисплей 2.0, 240×320 RobotClass

Различные виды жидкокристаллических дисплеев часто применяются в DIY проектах для отображения символьной и графической информации. И если самые простые дисплеи умеют отображать только чёрное и белое, то более продвинутые могут работать с цветом.

Матрицы, используемые в ЖК дисплеях (TFT) бывают разных типов: TN, VA, IPS и пр. За этими буквами скрывается технология организации жидких кристаллов, от которой зависят разные параметры дисплея. Так, дисплеи с IPS матрицей отличаются большими углами обзора, более высоким уровнем контраста и точной цветопередачей. И на этом уроке мы будем работать как раз с таким дисплейным модулем от RobotClass.

Дисплей IPS 2.0 RobotClass

Характеристики

  • напряжение питания: 3,3 В;
  • интерфейс: 4-проводной SPI;
  • разрешение: 240 x 320 точек;
  • контроллер: ST7789V2;
  • размеры матрицы: 33,6 x 46,6 мм (2 дюйма по диагонали).

Для данного геометрического размера матрицы этот дисплей имеет достаточно высокое разрешение — 240×320 точек, поэтому при работе с маломощными контроллерами типа Arduino мы не сможем добиться от него быстрого отклика. Он будет подтормаживать. Для наших экспериментов лучше используем что-то более мощное, например, отладочную плату Графит-32S на основе модуля ESP32-S.

Список необходимых компонентов

Для выполнения всех экспериментов в данном уроке, кроме самого модуля IPS дисплея, потребуются: отладочная плата на ESP32 и немного проводов вилка-розетка. Необходимые компоненты можно добавить в корзину прямо здесь, и затем оформить заказ в нашем интернет-магазине.

В корзину
В корзину
В корзину
В корзину

Подключение

Дисплей подключается по интерфейсу SPI, а значит нужно соединить четыре сигнальные линии:

  • SCK — синхроимпульс;
  • MOSI — данные от контроллера (master out) к устройству (slave in);
  • CS — выбор устройства (chip select);
  • RS(D/C) — линия для передачи команд устройству;
  • RST — сброс памяти дисплея,
  • VCC — питание 3,3 Вольта;
  • GND — земля;
  • BK — контакт для контроля подсветки.
Графит-32S (ESP32-S)3V3Gnd153327SCK/5MOSI/18
Дисплей IPS 0.96 RobotClassVCCGCSRSTRSSCKMOBK

Программа

Мы будем использовать самую лучшую на данный момент библиотеку для работы с ЖК дисплеями — TFT_eSPI (ссылка в конце статьи). Можно использовать и любую другую библиотеку с поддержкой контроллера ST7789V2.

Для правильной работы библиотеки 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 LOAD_FONT2
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8
#define LOAD_GFXFF

#define SMOOTH_FONT

#define SPI_FREQUENCY  27000000
#define SPI_READ_FREQUENCY  20000000
#define SPI_TOUCH_FREQUENCY  2500000

Тестовый скетч для дисплея

Открываем стандартный пример из библиотеки TFT_eSPI под названием Arduino_Life. Это модель клеточного автомата, описанная впервые английским математиком Джоном Конвеем в далёком 1970.

В коде примера ничего менять не нужно, всё уже настроено в User_Setup. Для правильной работы библиотеки в Arduino IDE необходимо выбрать целевую плату «Node32s«. Загружаем программу на Графит-32S и наблюдаем.

Дисплей IPS 2.0 RobotClass. TFT_eSPI Графика

Цвета

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

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

#include <TFT_eSPI.h>
#include <SPI.h>

TFT_eSPI tft = TFT_eSPI();

uint16_t colors[12] = {
    0x0000, // чёрный
    0xFFFF, // белый
    0xBDF7, // светло серый
    0x7BEF, // серый
    0xF800, // красный
    0xFFE0, // жёлтый
    0xFBE0, // оранжевый
    0x79E0, // коричневый
    0x7E0,  // зелёный
    0x07FF, // голубой
    0x001F, // синий
    0xF81F  // розовый
};

void setup(void) {
    tft.init();
    tft.setRotation(3);
    tft.fillScreen(TFT_WHITE);

    byte color = 0;
    for(byte y=0; y<2; y++){
        for(byte x=0; x<6; x++){
            tft.fillRect(2+x*26, 2+y*38, 26, 38, colors[color]);
            color++;
        }
    }
}

void loop() {
}

На дисплейном модуле IPS 0.91 RobotClass матрица ориентирована так, что координата 0,0 находится в верхнем правом углу. Чтобы получить привычную для графических дисплеев систему координат с началом отсчёта в верхнем левом углу, повернем матрицу три раза по часовой стрелке с помощью функции setRotation.

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

Дисплей IPS 2.0 RobotClass. TFT_eSPI Графика

Полезные ссылки

Репозиторий GitHub библиотеки TFT_eSPI:
https://github.com/Bodmer/TFT_eSPI


Изменено:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.