Приобрел на AliExpress экран 2,4 дюймов TFT 240*320 LCD дисплей на базе ILI9341

2,4 дюймов TFT 240*320 LCD дисплей (ILI9341) 2,4 дюймов TFT 240*320 LCD дисплей (ILI9341)

Разумеется сразу возник вопрос по библиотекам, но о них будет написано чуть ниже, а сейчас рассмотрим, что получил. Упакован экран в картонную коробку, все обернуто в пупырку, сам эран в антистатическом пакете.

TFT 240x320

Надпись на пакетике - Driver: ILI9341, Dots: 240x320, Bus: 8 bits, Touch: Yes

TFT 240x320TFT 240x320Ручка для сенсора

В качестве контроллера используем Arduino UNO

Arduino UNO

На USB разъем клеим кусок изоленты, чтобы избежать соприкосновения с токоведущими частями платы дисплея.

Arduino UNO + TFT 240x320

Дисплей сел на свое место без всяких усилий, перекосов .....

Занимает дисплей следующие порты:

Контакты дисплея Контакты Arduino UNO Назначение
 
ЖКИ индикатор и сенсорная поверхность
LCD_D0 D8 данные ЖКИ / TouchScreen
LCD_D1 D9 данные ЖКИ / TouchScreen
LCD_D2 D2 данные ЖКИ
LCD_D3 D3 данные ЖКИ
LCD_D4 D4 данные ЖКИ
LCD_D5 D5 данные ЖКИ
LCD_D6 D6 данные ЖКИ
LCD_D7 D7 данные ЖКИ
LCD_RST A4 сброс
LCD_CS A3 управление ЖКИ / TouchScreen
LCD_RS A2 управление ЖКИ / TouchScreen
LCD_WR A1 управление ЖКИ
LCD_RD A0  управление ЖКИ
     
Питание
GND   Общий
5V   5 В
3V3   3.3 В
     
Micro SD  
SD_SS D10 выбор
SD_DI D11 вход данных
SD_DO D12 выход данных
SD_SCK D13 тактирование данных

 

Пришлось покопаться в интернете и перебрать серию библиотек. Размещаю их у себя на сайте чтобы были прямые ссылки, а не множество переходов по сайтам, а возможно в будущем и отсутствие их (на авторство не претендую).

TFTLCD

Adafruit_GFX

 

Использовал Arduino IDE 1.8.9 (последняя версия на текущий период)

 Arduino IDE 1.8.9

 

Сам скетч довольно длинный, поэтому даю ссылку на его скачивание (на авторство не претендую) TEST_TFT_NEW

В скетче находится стандартная серия команд - заливка разными цветами, линии, круги, шрифты...

TFT 240x320TFT 240x320TFT 240x320

Отметим, что данный скетч демонстрирует не только графические возможности экрана, но еще и является тестом производительности

 Arduino IDE 1.8.9

Обратите внимание на строку:

  //0x9488, 0x0154, 0x8357, 0x9341, 0x7575, 0x9328, 0x9327
  tft.begin(0x9488);

Приведены различные адреса. У меня заработало с 0x9488

 

Настало время разобраться с кодом.

Строки которые необходимы для инициализации дисплея

#include <Adafruit_TFTLCD.h> // Hardware-specific library

// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// If using the shield, all control and data lines are fixed, and
// a simpler declaration can optionally be used:
// Adafruit_TFTLCD tft;

void setup(void)

{
  tft.reset();

  //0x9488, 0x0154, 0x8357, 0x9341, 0x7575, 0x9328, 0x9327
  tft.begin(0x9488);

}

 

Далее необходимый нам код прописывается в void loop(void).

Разберем несколько стандартных команд для работы с экраном

 

void loop(void)
{

  //Заливаем экран черным цветом
  tft.fillScreen(BLACK);

  //Объявляем переменные
  int w,h;

  //Получаем размер экрана
  w = tft.width(),
  h = tft.height();

  //Устанавливаем курсор
  tft.setCursor(0, 0);
  //Задаем цвет текста
  tft.setTextColor(WHITE);
  //Задаем размер текста
  tft.setTextSize(3);
  //Выводим наши полученные результаты
  tft.println(w);
  tft.println(h);

  //Рисуем линию (x1, y1, x2, y2)
  tft.drawLine(0, 0, 240, 320, CYAN);

  delay(4000);

}

TFT 240x320

Получаем следующий результат. Ориентация вертикальная. Левый верхний угол X1=0, Y1=0. Правый нижний угол X2=240, Y2=320 (размеры экрана).

Если необходимо горизонтальное расположение экрана, следует развернуть функцией tft.setRotation() и учесть смену координат.

void loop(void)
{

  //Развернуть экран  0 = 0°, 1 = 90°, 2 = 180°, 3 = 270°.
  tft.setRotation(3);

  //Заливаем экран черным цветом
  tft.fillScreen(BLACK);

  //Объявляем переменные
  int w,h;

  //Получаем размер экрана
  w = tft.width(),
  h = tft.height();

  //Устанавливаем курсор
  tft.setCursor(0, 0);
  //Задаем цвет текста
  tft.setTextColor(WHITE);
  //Задаем размер текста
  tft.setTextSize(3);
  //Выводим наши полученные результаты
  tft.println(w);
  tft.println(h);

  //Рисуем линию (x1, y1, x2, y2)
  tft.drawLine(0, 0, 320, 240, CYAN);

  delay(4000);

}

TFT 240x320

 

После разворота левый верхний угол X1=0, Y1=0. Правый нижний угол X2=320, Y2=240 (размеры экрана).

Стандартный набор цветов задаем в начале программы

#define    BLACK   0x0000
#define    BLUE    0x001F
#define    RED     0xF800
#define    GREEN   0x07E0
#define    CYAN    0x07FF
#define    MAGENTA 0xF81F
#define    YELLOW  0xFFE0
#define    WHITE   0xFFFF

 

Разберемся с TouchScreen

Данный TouchScreen без встроенного контроллера. Координаты касания определяются по аналоговым данным полученным с TouchScreen. Поэтому для работы экрана и TouchScreen необходимо менять их состояние

    Для дисплея

    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);

    Для TouchScreen

    pinMode(XM, INPUT);
    pinMode(YP, INPUT);

Загружаем библиотеку TouchScreen которая позволяет получать значения прочитанные с аналоговых выводов!!! (на авторство не претендую)

TouchScreen

Базовый код взят из интернета и немного дополнен мной. Данный скетч позволяет откалибровать нажатия

CalibrateTouchScreen

 

Запустив скетч на экране отобразятся пять синих точек. У двух указаны координаты (левый верхний - начало координат) и (правый нижний - конец координат).

TouchScreen

Нажатие на экран - выводит красные точки.

TouchScreen

 

В коде следует обратить внимание на следующие значения (возможно вам придется их немного скорректировать)

//  Определяем экстремумы для значений считываемых с аналоговых входов при определении точек нажатия на TouchScreen:
const int tsMinX   = 120; // соответствующий точке начала координат по оси X
const int tsMinY   = 70; // соответствующий точке начала координат по оси Y
const int tsMaxX   = 1200; // соответствующий максимальной точке координат по оси X
const int tsMaxY   = 690; // соответствующий максимальной точке координат по оси Y
const int mipPress = 10; // соответствующий минимальной степени нажатия на TouchScreen
const int maxPress = 1000; // соответствующий максимальной степени нажатия на TouchScreen

 

Загрузка изображений с SD карты

Воспользуемся готовым примером

tftbmp

 

В папке этого примера находятся файлы woof.bmp и miniwoof.bmp скопируйте их на microSD карточку.

2,4 дюйма TFT 240*320 LCD дисплей (ILI9341)

Отобразится в начале большая картинка, а потом серия маленьких. Если запустить монитор порта - можно отследить работу программы.

монитор порта

 

На этом краткий обзор данного экрана завершаем.