Содержание
Для 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 кОм.Соединение дисплея с 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 или с нашего сайта. Загрузим готовый скетч из примеров с нашим разрешение :
Этот пример поможет вам с конвертацией типа float в string:
Вот собственно и все . Дальше все ограничено только вашей фантазией.
Для 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 кОм.Соединение дисплея с 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 или с нашего сайта. Загрузим готовый скетч из примеров с нашим разрешение :
Этот пример поможет вам с конвертацией типа float в string:
Вот собственно и все . Дальше все ограничено только вашей фантазией.
Библиотека
Поддерживаемые дисплеи
Дисплеи Инициализация Цветной графический дисплей 2.8 TFT 320х240 Данный дисплей совместим с любыми Arduino. UTFT myGLCD(TFT01_24SP, 6, 5, 4, 3, 2);
Дисплей можно подключать к любым выводам Arduino указав № выводов при объявлении объекта myGLCD библиотеки UTFT:
UTFT myGLCD(TFT01_24SP, SDI/MOSI, SCK, CS, RESET, DC/RS);На дисплее установлен преобразователь уровней, так что его можно подключать и к 3В и к 5В логике.
Описание работы с сенсорным экраном находится в разделе Wiki работа с TouchScreen
Данный дисплей совместим только с Arduino Mega. UTFT myGLCD(TFT32MEGA, 38, 39, 40, 41); // дисплей на чипе ILI9341.
или
UTFT myGLCD(TFT32MEGA_2, 38, 39, 40, 41); // дисплей на чипе HX8357C.Дисплеи поставляются на базе чипа ILI9341 или HX8357C. Если изображение на дисплее отображается зеркально, то измените тип дисплея: укажите либо TFT32MEGA, либо TFT32MEGA_2.
Если Вы не планируете использовать SD карту, то выводы 50-53 можно использовать для подключения других модулей.
Выводы не подписанные на рисунке, не используются дисплеем.
Цветной графический дисплей 2.8 TFT 320×240 UNO
Данный дисплей совместим только с Arduino Uno. UTFT myGLCD(TFT28UNO, A2, A1, A3, A4, A0);
Если Вы не планируете использовать SD карту, то выводы 10-13 можно использовать для подключения других модулей.
Выводы не подписанные на рисунке, не используются дисплеем.
Описание работы с сенсорным экраном находится в разделе Wiki работа с TouchScreen
Цветной графический дисплей 2.4 TFT 240×320
Данный дисплей совместим с любыми Arduino. UTFT myGLCD(TFT01_24SP, 5, 4, 8, 7, 6);
Дисплей можно подключать к любым выводам Arduino указав № выводов при объявлении объекта myGLCD библиотеки UTFT:
UTFT myGLCD(TFT01_24SP, SDI/MOSI, SCK, CS, RESET, DC/RS);Уровень логической «1» на входах дисплея ≤ 3,3 В.
Если Вы используете 5 В логику, то подключайте входы дисплея через делители:При питании от 3,3 В необходимо замкнуть перемычку J1 на обратной стороне платы дисплея.
Если Вы желаете использовать SD-карту, то выводы SD_CS, SD_MOSI, SD_MISO и SD_SCK необходимо подключить к Arduino по аппаратной шине SPI:
Если аппаратный вывод CS(SS) Arduino занят, то вывод SD_CS можно подключить к любому другому выводу Arduino, указав его номер в скетче (см пример в файле image_SD библиотеки UTFT).
TouchScreen можно подключать к любым выводам Arduino указав № выводов при объявлении объекта myTouch библиотеки URTouch:
URTouch myTouch( T_CLK, T_CS, T_DIN, T_OUT, T_IRQ);
Например: URTouch myTouch(13, 12, 11, 10, 9);Указанные в примере выводы Arduino для подключения TouchScreen пересекаются с выводами аппаратной шины SPI на платах Arduino Uno, Pro Mini, Nano и т.д. Если Вы желаете использовать на этих платах и TouchScreen, и SD-карту , то для TouchScreen нужно выбрать другие выводы Arduino, например, аналоговые выводы A0-A4, указав их в скетче при объявлении объекта:
URTouch myTouch(A0, A1, A2, A3, A4);Описание работы с сенсорным экраном со встроенным контроллером функций TouchScreen находится в разделе Wiki работа с TouchScreen по последовательной шине данных.
Данный дисплей совместим с любыми Arduino. UTFT myGLCD(TFT01_22SP, 5, 4, 8, 7, 6);
UTFT myGLCD(TFT18SHLD, 5, 4, 8, 7, 6);
Дисплей можно подключать к любым выводам Arduino указав № выводов при объявлении объекта myGLCD библиотеки UTFT:
UTFT myGLCD(TFT01_22SP, SDI/MOSI, SCK, CS, RESET, DC/RS);Уровень логической «1» на входах дисплея ≤ 3,3 В.
Если Вы используете 5 В логику, то подключайте входы дисплея через делители:Если Вы желаете использовать SD-карту, то выводы SD_CS, SD_MOSI, SD_MISO и SD_SCK необходимо подключить к Arduino по аппаратной шине SPI:
Если аппаратный вывод CS(SS) Arduino занят, то вывод SD_CS можно подключить к любому другому выводу Arduino, указав его номер в скетче (см пример в файле image_SD библиотеки UTFT).
Если Вы собираетесь использовать библиотеку UTFT для работы с другими дисплеями, то закомментируйте строку с названием Вашего дисплея в файле «memorysaver.h». А для экономии памяти, раскомментируйте остальные строки кода файла «memorysaver.h».
#1 Пример
Выводим на дисплей текст тремя базовыми шрифтами:
#2 Пример
Заливаем весь дисплей различными цветами:
#3 Пример
Рисуем различные графические элементы:
Базовые функции:
Все функции:
- InitLCD([положение]); – Инициирует начало работы с дисплеем. Необязательный параметр может принимать одно из двух значений: PORTRAIT (вертикальная ориентация) или LANDSCAPE (горизонтальная ориентация – по умолчанию).
- clrScr(); – Очищает дисплей, стирая всю отображаемую на дисплее информацию и заливая дисплей черным цветом.
- fillScr(color); – Очищает дисплей, стирая всю отображаемую на дисплее информацию и заливая его указанным в качестве параметра цветом фона.
- getDisplayXSize(); – Возвращает количество пикселей дисплея по горизонтали, число типа int.
- getDisplayYSize(); – Возвращает количество пикселей дисплея по вертикали, число типа int.
- setColor(color); – Выбор цвета для текста и фигур, выводимых после данной функции.
- getColor(); – Возвращает установленный цвет для текста и фигур в формате RGB565, число типа word.
- setBackColor(color); – Выбор цвета для фона текста, выводимого после данной функции.
- getBackColor(); – Возвращает установленный цвет для фона текста в формате RGB565, число типа word.
- setFont(fontName); – Выбор шрифта для текста выводимого после данной функции.
- getFont(); – Возвращает указатель на выбранный шрифт.
- getFontXsize(); – Возвращает количество пикселей в одном символе шрифта, по ширине.
- getFontYsize(); – Возвращает количество пикселей в одном символе шрифта, по высоте.
- print(str,x,y[,r]); – Вывод на дисплей строк или содержимого строковых переменных.
- printNumI(int,x,y[,len[,sym]]); – Вывод на дисплей целого числа или содержимого целочисленной переменной.
- printNumF(float,dec,x,y[,sym1[,len[,sym2]]]); – Вывод на дисплей вещественного числа или содержимого переменной вещественного типа
- drawPixel(x,y); – Вывод на дисплей точки. Цвет точки определяется текущим значением цвета, устанавливаемым командой setColor().
- drawLine(x1,y1,x2,y2); – Вывод на дисплей линии, заданной координатами двух точек.
- drawRect(x1,y1,x2,y2); – Вывод на дисплей прямоугольника, противоположные углы которого заданы координатами двух точек.
- drawRoundRect(x1,y1,x2,y2); – Вывод на дисплей прямоугольника со скругленными углами.
- fillRect(x1,y1,x2,y2); – Вывод на дисплей закрашенного прямоугольника.
- drawCircle(x,y,R); – Вывод на дисплей окружности, определяемую координатами центра и радиусом.
- fillCircle(x,y,R); – Вывод на дисплей закрашенной окружности.
- drawBitmap(x1,y1,x2,y2,data[,scale]); – Вывод на дисплей картинки из массива.
- Для вывода на дисплей картинки из файла с SD-карты нужно вызвать функцию load(x1,y1,x2,y2,data); объекта библиотеки UTFT_SdRaw.
Для работы функции load, нужно установить и подключить библиотеки: UTFT_SdRaw и SdFat.
Инициализация работы с дисплеем:
InitLCD( [положение] );
Инициализация работы с дисплеем, с указанием его положения.InitLCD(PORTRAIT); // инициализация (вертикальное положение)
Параметр: -
Положение может быть горизонтальным или вертикальным:
- положение: PORTRAIT – вертикальное
- положение: LANDSCAPE – горизонтальное (по умолчанию)
Очистка экрана:
clrScr();
Очистка экрана с заливкой дисплея чёрным цветомПараметр: Без параметров. fillScr( color );
Очистка экрана с заливкой заданным цветом.fillScr(VGA_RED); // красный цвет
Параметр: -
Цет можно задать тремя способами:
- color: По названию цвета – VGA_RED
- color: В формате RGB565 – 0x001F
- color: В формате RGB – 255,100,0
Выбор цвета:
setColor( color );
Выбор цвета для текста и фигур, выводимых после данной функции.setColor(0,0,255); // синий цвет
Параметр: -
Цет можно задать тремя способами:
- color: По названию цвета – VGA_RED
- color: В формате RGB565 – 0x001F
- color: В формате RGB – 255,100,0
setBackColor( color );
Выбор цвета для фона текста, выводимого после данной функции.setBackColor(2016); // зелёный цвет
Параметр: -
Цет можно задать тремя способами:
- color: По названию цвета – VGA_RED
- color: В формате RGB565 – 0x001F
- color: В формате RGB – 255,100,0
Удобнее всего устанавливать цвет по его названию:
Полный перечень цветов: VGA_BLACK, VGA_WHITE, VGA_RED, VGA_GREEN, VGA_BLUE, VGA_SILVER, VGA_GRAY, VGA_MAROON, VGA_YELLOW, VGA_OLIVE, VGA_LIME, VGA_AQUA, VGA_TEAL, VGA_NAVY, VGA_FUCHSIA, VGA_PURPLE, VGA_TRANSPARENT.Выбор шрифта:
setFont( fontName );
Выбор шрифта для текста выводимого после данной функции.setFont(SmallFont); // маленький шрифт
Параметр: -
По умолчанию в библиотеке есть 3 шрифта:
- fontName: SmallFont – маленький шрифт
- fontName: BigFont – большой шрифт
- fontName: SevenSegNumFont – шрифт имитирующий семисегментный индикатор
Вывод текста:
print( str , x , y [, r] );
Выводит на дисплей строки или содержимое строковых переменных.print("iarduino", 50, 50); // текст "iarduino" горизонтально
print("iarduino", 50, 50, 90); // текст "iarduino" вертикальноПараметры: - str: строка или содержимое строковой переменной
- x: координата X
- y: координата Y координаты верхнего левого угла области печати
(x можно указать как число или LEFT / RIGHT / CENTER) - r: поворот текста в градусах, вокруг точки x,y
r – необязательный параметр
printNumI( int , x , y [, len [, sym ] ] );
Выводит на дисплей целые числа или содержимое целочисленных переменных.printNumI(2000,50,50); // результат: "2000"
printNumI(2000,50,50,0); // результат: "2000"
printNumI(2000,50,50,5); // результат: " 2000"
printNumI(2000,50,50,6,’0′); // результат: "002000"Параметры: - int: целое число или содержимое целочисленной переменной
- x: координата X
- y: координата Y координаты верхнего левого угла области печати
(x можно указать как число или LEFT / RIGHT / CENTER) - len: количество выводимых разрядов числа int.
игнорируется если len меньше количества разрядов int.
необязательный параметр, по умолчанию: 0 - sym: символ заменяющий недостающие разряды.
необязательный параметр, по умолчанию: ‘ ‘
(если len больше чем количество разрядов числа int, то недостающие разряды перед числом будут заменены на sym.)
printNumF( float , dec, x , y [, sym1 [, len [, sym2 ] ] ] );
Выводит на дисплей вещественные числа или содержимое переменных вещественного типа.printNumF(-234.3442,2,50,50); // результат "-234.34"
printNumF(-234.3442,3,50,50); // результат "-234.344"
printNumF(-234.3442,4,50,50,’*’); // результат "-234*3442"
printNumF(-234.3442,1,50,50,’,’,1); // результат "-234,3"
printNumF(-234.3442,1,50,50,’,’,7); // результат " -234,3"
printNumF(-234.3442,1,50,50,’,’,7,’0′); // результат "-0234,3"