Цветной графический дисплей 2.8 TFT 320x240, подключаем к Raspberry Pi

Общие сведения

В этой статье мы подключим Цветной графический дисплей 2.8 к Raspberry Pi. Руководствуясь этой же статьёй, можно подключить к Raspberry цветной графический дисплей 2.8 с TouchScreen, но для работы TouchScreen необходимы аналоговые входы, которых у Raspberry нет, так что он будет работать без TouchScreen. В будущем мы рассмотрим возможность подключения TouchScreen к аналоговым входам Trema+Expander Hat и эмулирования таким образом манипулятора мыши через I2C.

Словарик

cd (change directory) - команда смены директории

mkdir (make directory) - программа создания директории

make - программа поддержки, обновления и восстановления групп программ

nano - простой консольный текстовый редактор, рассчитанный на новичков в мире GNU/Linux

скейлинг - масштабирование картинки кадрового буфера

Видео

Редактируется...

Нам понадобится

Подключение:

Для удобства подключения мы воспользуемся Trema+Expander Hat

Выводы дисплея Выводы Expander Hat
GND GND
VCC 5V
D/C 12
RST 14
CS 8
SCK 11
MOSI 10
LED 13
MISO 9

Подключим модуль проводами «Мама - Мама» к Trema+Expander Hat

Установка драйвера с Github

Перед установкой драйвера необходимо настроить Raspberry Pi. Если вы настраиваете Raspberry не для работы с Retropie, сделать это можно руководствуясь этой статьёй

Мы настроили драйвер для работы с Цветным графическим дисплеем 2.8, скачать его можно с нашего Github. После скачивания необходимо перейти в директорию build и издать команду в терминале make -j. Ниже мы рассмотрим этот процесс подробнее.

Скачаем драйвер с Github

Откроем эмулятор терминала в верхней панели графической среды Raspberry.

Создадим директорию для хранения будущих Github проектов командой mkdir (make directory - создать директорию):

mkdir Github

Перейдём в директорию командой cd (change directory - сменить директорию):

cd Github

Склонируем драйвер из репозитория (необходимо подключение к интернету):

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

Отредактируем config.txt

В файле /boot/config.txt должна быть расскоментирована строка hdmi_force_hotplug=1, а так же должны отсутствовать строки драйверов других TFT дисплеев (dtoverlay=pitft28r, dtoverlay=waveshare32b, dtoverlay=flexfb)

Не выходя из эмулятора терминала отредактируем файл config.txt:

sudo nano /boot/config.txt

Найдём строку #hdmi_force_hotplug=1 и удалим октоторп # в начале строки. Нажмём ctrl+x для выхода и ответим y на вопрос о сохранении файла, затем нажмём клавишу enter.

Соберём драйвер из исходного кода

Не выходя из программы эмулятора терминала перейдём в директорию build:

cd fbcp-ili9341/build

В этой директории находится запускаемый файл оболочки build.sh. Если, по какой-либо причине драйвер не работает или работает неправильно, нужно будет изменить содержимое этого файла. Подробнее в разделе "Устранение неполадок"

Соберём драйвер, издав команду make -j:

make -j

После сборки можно проверить работу драйвера, запустив его от имени root пользователя:

sudo ./fbcp-ili9241

Запуск при старте системы

Для того, чтобы не приходилось каждый раз запускать драйвер вручную, добавим строчку в файл /etc/rc.local.

Откроем его при помощи консольного редактора nano:

sudo nano /etc/rc.local

Файл будет выглядеть следующим образом:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

exit 0

Добавим в него стоку sudo /home/pi/Github/fbcp-ili9341/build/fbcp-ili9341 &

Файл будет выглядеть следующим образом:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

sudo /home/pi/Github/fbcp-ili9341/build/fbcp-ili9341 &

exit 0

Нажмём на клавиатуре ctrl+x, программа задаст вопрос о сохранении файла. Ответим утвердительно, нажав клавишу y (Y) и затем клавишу enter

После этих манипуляций драйвер должен запускаться при запуске системы.

Смена разрешения

Для улучшения отображения текста на дисплее необходимо сменить системное разрешение экрана. Драйвер делает скейлинг картинки с любого разрешения. Теоретически можно поставить нативное разрешение TFT дисплея в 320x240 точек как системное, но при таких установках не будет выводиться картинка через hdmi выход (hdmi не поддерживает такое низкое разрешение). Мы решили остановиться на разрешении в 640x480. При таких настройках остаётся возможность подключить hdmi монитор (например, для устранения неполадок) и картинка выглядит приемлемо на TFT дисплее. Если же вы подключаетесь к Raspberry через ssh, то можете смело проигнорировать данный раздел и добавить следующие настройки в /boot/config.txt:

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

Для смены разрешения, не выходя из эмулятора терминала запустим raspi-config

sudo raspi-config

Откроется окно установок raspi-config:

Выбираем Advanced Options и нажимаем клавишуenter

Откроется окно Advanced Options:

Выбираем Resolution и нажимаем enter

В окне Resolution выбираем DMT Mode 4 640x480 60Hz 4:3

Нажимаем enter

Программа вернётся в главное окно:

Нажимаем стрелку курсора вправо на клавиатуре, затем enter

На вопрос о перезагрузке отвечаем утвердительно:



После перезагрузки будет установлено новое разрешение.

Устранение неполадок

  1. Дисплей не включается.

    • Проверьте подключение проводов и питания, смотрите пункт 2.
    • Драйвер работает напрямую с процессором, шина SPI должна быть выключена в raspi-config
    • Убедитесь, что строка hdmi_force_hotplug=1 в /boot/config.txt не закомментирована.
  2. Дисплей включается, но картинка статична или картинка только на пол экрана или картинка пропадает через несколько секунд после включения.

    • Дисплей работает по шине SPI. Скорость шины зависит от частоты ядра процессора, и может так случиться что она окажется выше, чем пропускная способность чипсета дисплея. В этом случае дисплей будет работать нестабильно или не будет работать вовсе. Скорость SPI устанавливается частотой ядра (устанавливается в файле /boot/config.txt) параметром core_freq= и делителем, который можно установить в опциях перед компиляцией. Мы подобрали оптимальный делитель для Raspberry Pi 3 B и Raspberry Pi 3 A+, который равен 12. Если Ваш дисплей не работает, попробуйте установить больший делитель (должен быть чётным числом), например 14 или 16. Для этого необходимо:
  • В директории build удалить файл CMakeCache.txt и fbcp-ili9341
rm CMakeCache.txt; rm fbcp-ili9341
  • Установить cmake:
sudo apt install cmake
  • Поменять значение делителя в файле build.sh. Опция -DSPI_BUS_CLOCK_DIVISOR=:
nano build.sh

Файл выглядит следующим образом:

#!/bin/bash
cmake -DILI9341=ON\
      -DGPIO_TFT_DATA_CONTROL=12\
      -DGPIO_TFT_BACKLIGHT=13\
      -DGPIO_TFT_RESET_PIN=14\
      -DSPI_BUS_CLOCK_DIVISOR=12\
      -DSTATISTICS=0 -DBACKLIGHT_CONTROL=ON ..\
        && make -j

Меняем значение DSPI_BUS_CLOCK_DIVISOR=:

#!/bin/bash
cmake -DILI9341=ON\
      -DGPIO_TFT_DATA_CONTROL=12\
      -DGPIO_TFT_BACKLIGHT=13\
      -DGPIO_TFT_RESET_PIN=14\
      -DSPI_BUS_CLOCK_DIVISOR=14\
      -DSTATISTICS=0 -DBACKLIGHT_CONTROL=ON ..\
        && make -j

Обратите внимание на обратный слэш \ после числа. Убедитесь, что он на месте.

Нажимаем ctrl+x для выхода, отвечаем утвердительно при вопросе о сохранении файла.

  • Запустить build.sh:

Вводим в командной строке (точка, слэш, название сценария) и нажимаем клавишу enter

./build.sh

Для проверки запускаем драйвер.

sudo ./fbcp-ili9341

Ссылки

Обсуждение