Raspberry Pi: TFT дисплей с SPI интерфейсом
У Raspberry Pi есть встроенное графическое ядро, которое позволяет без проблем подключать к этому микрокомпьютеру самые обычные мониторы и телевизоры по HDMI интерфейсу. Но к RPi можно подключить множество более дешевых и миниатюрных дисплеев, которые могут быть более уместными для небольшого DIY-проекта.
В этой статье мы подробно разберем подключение популярного TFT-дисплея с контроллером ILI9341. Существует несколько вариантов модулей с таким дисплеем, отличающихся внешним видом и разрешением. Мы будем работать с таким экземпляром:
На обратной стороне виден разъём для SD-карты и драйвер сенсорной резистивной плёнки. Дисплеи с разрешениями более 2,2 дюйма как правило попадаются в двух исполнениях: с сенсорной панелью и без.
Примечание
Диагональ дисплея составляет 2,4 дюйма при разрешении 320×240 пикселей. Контроллер, как уже говорилось, ILI9341.
Чтобы повторить всё, что делается в данной статье понадобится:
Совет
Сенсорный TFT дисплей, SPI4, 240x320, 2.4»
Блок питания с USB разъёмом и Type-C кабелем, 5В, 3А
Карта памяти micro-SD 16 ГБ
Подключение
Дисплей подключается по SPI интерфейсу. Схема подключения:
Raspberry Pi |
GND |
3.3V |
MOSI(GPIO10) |
MISO(GPIO09) |
CLK(GPIO11) |
GPIO2 |
GPIO3 |
GPIO4 |
|---|---|---|---|---|---|---|---|---|
Дисплей |
GND |
VCC |
SDI(MOSI) |
SDO(MISO) |
SCK |
DC |
RESET |
LED |
Важно
Контакты 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:
Совет