Raspberry Pi: TFT дисплей с SPI интерфейсом

У Raspberry Pi есть встроенное графическое ядро, которое позволяет без проблем подключать к этому микрокомпьютеру самые обычные мониторы и телевизоры по HDMI интерфейсу. Но к RPi можно подключить множество более дешевых и миниатюрных дисплеев, которые могут быть более уместными для небольшого DIY-проекта.

В этой статье мы подробно разберем подключение популярного TFT-дисплея с контроллером ILI9341. Существует несколько вариантов модулей с таким дисплеем, отличающихся внешним видом и разрешением. Мы будем работать с таким экземпляром:

На обратной стороне виден разъём для SD-карты и драйвер сенсорной резистивной плёнки. Дисплеи с разрешениями более 2,2 дюйма как правило попадаются в двух исполнениях: с сенсорной панелью и без.

Диагональ дисплея составляет 2,4 дюйма при разрешении 320×240 пикселей. Контроллер, как уже говорилось, ILI9341.

Чтобы повторить всё, что делается в данной статье понадобится:

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

Подключение

Дисплей подключается по SPI интерфейсу. Схема подключения:

Raspberry PiGND3.3VMOSI(GPIO10)MISO(GPIO09)CLK(GPIO11)GPIO2GPIO3 GPIO4
ДисплейGNDVCCSDI(MOSI)SDO(MISO)SCKDCRESETLED

Контакты DC, RESET и LED можно подключить к любым свободным GPIO контактам Raspberry Pi, а вот SDI, SDO и SCK только к указанным.

Установка драйвера для работы с TFT

Драйвер, который мы используем в данной статье, существует в виде исходного кода в репозитории github. Чтобы им воспользоваться, нам предстоит его скомпилировать в исполняемый файл.

Установим утилиту cmake, которая поможет подготовить необходимые для компиляции файлы:

sudo apt-get install cmake

Затем загрузим из репозитория исходные коды драйвера. Лучше это делать в домашней папке пользователя pi.

cd ~
git clone https://github.com/juj/fbcp-ili9341.git

Зайдем в загруженную папку и создадим в ней подпапку build:

cd fbcp-ili9341
mkdir build
cd build

Теперь самое главное. Нам нужно запустить cmake, указав кучу параметров для нашего TFT-дисплея. Готовая строка для запуска может выглядеть так:

cmake -DILI9341=ON -DGPIO_TFT_DATA_CONTROL=2 -DGPIO_TFT_RESET_PIN=3 -DGPIO_TFT_BACKLIGHT=4 -DSPI_BUS_CLOCK_DIVISOR=30 -DSTATISTICS=0

Поясню параметры.

-DILI9341=ON — собирает версию драйвера именно для ili9341. Но данный пакет поддерживает и другие модели дисплеев: DILI9340, HX8357D, SSD1351, ST7735R. ST7789, ST7789VW, ST7735S, ILI9486, ILI9486L, MPI3501. То есть можно работать практически с каждым популярным дисплеем.

Следующие три параметра определяют контакты Raspberry Pi, к которым подключены служебные сигналы дисплея:

-DGPIO_TFT_DATA_CONTROL=2 — это пин DC, который мы подключили к GPIO2;

-DGPIO_TFT_RESET_PIN=3 — сброс RESET (к GPIO3);

-DGPIO_TFT_BACKLIGHT=4 — подсветка LED (к GPIO4);

Последний параметр по сути задаёт скорость работы шины SPI, определяя делитель частоты:

-DSPI_BUS_CLOCK_DIVISOR=30

Для первого запуска можно уставить делитель 30. Затем, стоит попробовать уменьшать это число вплоть до 6, или до значения при котором дисплей начнёт глючить.

-DSTATISTICS=0 — убираем отладочную информацию сверху дисплея.

Запустим команду cmake с указанными параметры. После завершения работы cmake запустим компилятор, который и соберет нам всё вместе в бинарный файл:

make -j

единственный параметр -j позволит ускорить сборку исполняемого файла за счёт распараллеливания процесса по ядрам процессора.

После завершения работы make, в папке build должен появиться файл fbcp-ili9341. Запускаем его:

sudo ./fbcp-ili9341

Вот и всё. Дисплей в деле!

Мелкий шрифт на дисплее

Без дополнительных телодвижений текст на дисплее будет не очень чётким. Почему так? Все дело в том, что Raspberry Pi формирует картинку в разрешении, отличном от разрешения такого мелкого tft-дисплея. Драйвер сам производит масштабирование (очень быстро, с использованием GPU), и шрифты при этом немного портятся.

Чтобы избежать масштабирования драйвером, нужно настроить RPi таким образом, чтобы картинка изначально формировалась в нужном разрешении. В таком случае и шрифт будут выглядеть читабельнее.

Открываем в редакторе файл настроек:

sudo nano /boot/config.txt

Находим там строку:

#uncomment to force a specific HDMI mode (this will force VGA)

Сразу после неё добавляем:

hdmi_group=2
hdmi_mode=87
hdmi_cvt=320 240 60 1 0 0 0
hdmi_force_hotplug=1

Сохраняем и перезагружаем Raspberry Pi. Теперь при запуске утилиты fbcp-ili9341 мы получим примерно такое:

Ну вот, гораздо лучше!

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

Подробное описание драйвера на github:

https://github.com/tremaru-file/fbcp-ili9341


Изменено:

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

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.