Подключение TFT дисплея с драйвером ILI9341 к Arduino.

Для Arduino есть очень много модулей , датчиков. Но все это скучно без дисплея )) В этой статье мы с вами подключим TFT дисплей с драйвером ILI9341 к контролеру.

В руки мне попал Китайский брат с  маркировкой KMRTM24024-SPI. Это TFT дисплей с диагональю 2.4″ и SPI интерфейсом.

 

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

  • Диагональ: 2,4 .
  • Цвет: 18-бит, 262 000 оттенков.
  • Разрешение: 320 х 240.
  • Соотношение сторон экрана: 4 : 3 .
  • Питание : 3.3В/5 В.
  • Интерфейс : SPI .

Самое интересное, что логика работы драйвера 3.3 В . По этому нам потребуется согласовать наше Arduino с логикой 5 В и дисплей.

Выводы :

  • VCC = +5v (+5 вольт).
  • GND = GND (земля).
  • LED = +3.3v (подсветка дисплея).
  • SCK = SPI.
  • SDI/SD (MOSI) = SPI.
  • SDO(MISO) = SPI.
  • CS = выбор устройства.
  • D/C = Команда/Данные.

Схема подключения :

Так как логика работу у дисплея и контролера разная нам надо их согласовать. Тут есть два варианта:

  • Использовать делитель напряжения на резисторах, нам потребуется резисторы 20 кОм и 10 кОм.
  • Использовать микросхему CD4050B non-inverting hex buffers,logiclevel conversion, собственно что я и выбрал.
  • Vss = питание минус.
  • Vcc = +3.3В питание логики.

Когда на вход A подается +5 вольт, на выходе G будет +3.3 В. Думаю принцип работы понятен.

Соединение дисплея с Arduino Nano:

SCK —— pin D8 ( через делитель ).
SDI (MOSI) —— pin D9 ( через делитель ).
D/C —— pin D10 ( через делитель ).
RESET —— pinD 11 ( через делитель ).
CS —— pin D12 ( через делитель ).
VCC —— +5v (+5 вольт,ВНИМАНИЕ ваш дисплей может питаться 3.3В)
GND —— GND (земля).
LED —— +3.3v (подсветка дисплея).

Кодинг :

Для работы с дисплеем есть много разных библиотек. Я использую библиотеку UTFT которую скачаем с GitHab или с нашего сайта. Загрузим готовый  скетч  из примеров с нашим разрешение :

// библиотека для работы с дисплеем
#include <UTFT.h>

// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера пинов
// к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS

//  UTFT myGLCD(TFT01_22SP, SDI (MOSI),SCK ,CS ,RESET , D/C);
UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10);

// объявления встроенных шрифтов
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];

void setup()
{
}

void loop()
{
 // инициализируем дисплей с вертикальной ориентацией
 myGLCD.InitLCD(0);
 // очищаем экран
 myGLCD.clrScr();
 // выбираем большой шрифт
 myGLCD.setFont(BigFont);
 // печатаем строку в центре верхней строки дисплея
 myGLCD.print("TFT01_22SP", CENTER, 0);
 // выбираем большой шрифт
 myGLCD.setFont(SmallFont);
 // печатаем строку в указанной строке позиции
 myGLCD.print("Hello from Amperka!", CENTER, 50);
 // выбираем сесисегментный шрифт
 myGLCD.setFont(SevenSegNumFont);
 // печатаем строку в указанной строке позиции
 myGLCD.print("12345", CENTER, 100);
 // ждём 1 секунду
 delay(10000);

// инициализируем дисплей с горизонтальной ориентацией
 myGLCD.InitLCD(1);
 // очищаем экран
 myGLCD.clrScr();
 // выбираем большой шрифт
 myGLCD.setFont(BigFont);
 // печатаем строку в центре верхней строки дисплея
 myGLCD.print("Hello, user!", CENTER, 0);
 // выбираем большой шрифт
 myGLCD.setFont(SmallFont);
 // печатаем строку в указанной строке позиции
 myGLCD.print("The screen is 2.2 diagonal", CENTER, 50);
 // выбираем сесисегментный шрифт
 myGLCD.setFont(SevenSegNumFont);
 // печатаем строку в указанной строке позиции
 myGLCD.print("67890", CENTER, 100);
 // ждём 1 секунду
 delay(10000);
}

Этот пример поможет вам с конвертацией типа float в string:

Arduino-FloatToString

#include<stdlib.h> // included for floatToString function

String floatToString(float x, byte precision = 2) {
 char tmp[50];
 dtostrf(x, 0, precision, tmp);
 return String(tmp);
}

void setup() {
 float f = -17.06f; // some float number
 String str = floatToString(f); // conversion call

// print over serial
 Serial.begin(9600);
 Serial.println(str);
}

void loop() {

}

Вот собственно и все . Дальше все ограничено только вашей фантазией.