Столкнулись с трудностями в проекте встраиваемого дисплея?
Не позволяйте сложной интеграции или проблемам цепочки поставок замедлить ваш выход на рынок. Забронируйте бесплатную консультацию с экспертной командой RJY для получения индивидуальной поддержки в проектировании и производстве.
Для инженеров встраиваемого ПО, аппаратных хакеров и архитекторов промышленного IoT Raspberry Pi является бесспорным королём быстрого прототипирования. В своём стандартном “безголовом” состоянии (доступ через SSH) это тихий, невидимый рабочий инструмент. Но в тот момент, когда вам требуется человеко-машинный интерфейс (HMI) — будь то создание умного домашнего термостата, панели управления на заводском цехе или прототипа специализированного медицинского устройства — вам необходимо преодолеть разрыв между кодом и физическим взаимодействием.
Интеграция tft lcd дисплея с Raspberry Pi часто является самым неприятным испытанием в аппаратной разработке. Если вы когда-либо подключали экран к GPIO-разъёмам вашего Pi, только чтобы столкнуться с печально известным “Белым экраном смерти”, вы точно знаете, насколько сложной может быть эта интеграция.
Это всеобъемлющее пошаговое инженерное руководство проведёт вас через точные аппаратные подключения, базовые оверлеи дерева устройств Linux и современные конфигурации программного обеспечения Wayland/X11, необходимые для успешного развёртывания TFT LCD-дисплея на Raspberry Pi.
Прежде чем вы подключите хотя бы один перемычный провод или введёте sudo nano, вы должны понять, Вписаться как ваш дисплей взаимодействует с Raspberry Pi. Способ подключения полностью определяет частоту кадров, нагрузку на ЦП и требуемые программные драйверы.
Существует четыре основных способа подключения tft lcd дисплея к Raspberry Pi.
A. Интерфейс SPI (Serial Peripheral Interface)
Это наиболее распространённый интерфейс для небольших дисплеев (от 1,5″ до 3,5″). Эти дисплеи устанавливаются непосредственно на 40-контактный GPIO-разъём.
Реальность: SPI — это последовательный протокол. Он передаёт данные пикселей по одному биту за раз. По своей природе он медленный.
Область применения: Идеально подходит для статических пользовательских интерфейсов, показаний датчиков или текстоориентированных панелей управления.
Ограничения: Не ожидайте воспроизведения видео с частотой 60 кадров/с на SPI-экране. Вы физически ограничены скоростью шины SPI (обычно ограничена примерно 32–48 МГц), что даёт максимум 15–25 кадров/с на экране с разрешением 320×480. Для вывода пикселей требуется высокая нагрузка на ЦП.
B. Интерфейс MIPI DSI (Display Serial Interface)
Этот способ использует специальный разъём для плоского кабеля на плате Raspberry Pi (обозначен как “DISPLAY” или “MIPI” на моделях Pi 5).
Реальность: DSI — это высокоскоростной дифференциальный интерфейс, который подключается непосредственно к графическому процессору Broadcom Raspberry Pi.
Область применения: Абсолютно лучший вариант для плавных пользовательских интерфейсов, воспроизведения видео и сложной графики. Он полностью освобождает ЦП и оставляет GPIO-контакты свободными для других датчиков.
Ограничения: DSI-дисплеи обычно ограничены официальными экранами Raspberry Pi или определёнными сторонними моделями со специальными мостовыми микросхемами.
C. Интерфейс DPI (Display Parallel Interface)
DPI использует почти все GPIO-контакты (до 24 контактов для цвета RGB888 плюс синхросигналы) для управления сырой LCD-панелью.
Реальность: Он обеспечивает скорость, подобную HDMI, и нулевую нагрузку на ЦП, не используя громоздкий HDMI-порт.
Область применения: Пользовательские аркадные автоматы или промышленные сборки, где HDMI-порт заблокирован или требуется для второго экрана.
Ограничения: Вы теряете почти все свои GPIO-контакты. Вы не можете легко добавить I2C-датчики или SPI-кнопки.
D. Комбинированный интерфейс HDMI / USB
Большие tft lcd экраны для Raspberry Pi (от 5 до 10 дюймов) часто используют стандартный HDMI для видеосигнала и кабель USB для сенсорного интерфейса.
Реальность: Простота подключения и работы. Pi воспринимает его как стандартный монитор.
Ограничения: Громоздкая кабельная разводка. Её сложно аккуратно интегрировать в тонкий, специализированный корпус продукта.
В рамках этого практического руководства мы сосредоточимся на самой печально известной сложной интеграции: GPIO-дисплей на основе SPI, поскольку она требует наиболее глубокого понимания ядра Linux.
2. Аппаратная сборка: Подключение SPI-дисплея
Если ваш SPI-дисплей не устанавливается непосредственно на GPIO-разъёмы как “HAT” (Hardware Attached on Top), вам потребуется подключить его вручную.
Золотое правило аппаратной части
Никогда не подключайте дисплей при включённом питании Raspberry Pi. Горячее подключение GPIO-контактов может вызвать скачок напряжения, который мгновенно уничтожит драйверную ИС ЖК-дисплея или, что хуже, выведет из строя SoC Broadcom Raspberry Pi.
Анатомия распиновки SPI
Чтобы заставить работать стандартный tft lcd экран с SPI на Raspberry Pi, вы должны подключить питание, шину SPI (MOSI, SCLK, CE) и управляющие контакты (DC, Reset).
Вот стандартное сопоставление, которое вы должны выполнить, используя перемычные провода «мама-мама»:
Контакт дисплея
Функция
Физический контакт Raspberry Pi
BCM GPIO Raspberry Pi
VCC/5V
Питание
Контакт 2 или 4
Питание 5В
GND
Земля (GND)
Контакт 6 (или любой GND)
Земля (GND)
MOSI (SDI)
Данные на экран
Контакт 19
GPIO 10 (SPI0_MOSI)
SCLK (SCK)
Тактовый сигнал SPI
Контакт 23
GPIO 11 (SPI0_SCLK)
CS / CE0
Выбор микросхемы
Контакт 24
GPIO 8 (SPI0_CE0)
DC / RS
Данные/Команда
Контакт 22 (Общий по умолчанию)
GPIO 25
RST / RES
Сброс
Контакт 18 (Общий по умолчанию)
GPIO 24
BLK / LED
Подсветка
Контакт 12 (ШИМ) или 3.3В
GPIO 18 (ШИМ0)
Техническая рекомендация: Международный форум по аккредитации (IAF) DC (Данные/Команда) Контакт имеет решающее значение. SPI передаёт только единицы и нули. Контроллер дисплея (например, ILI9341) должен знать, являются ли эти единицы и нули данными цвета пикселей или системными командами (например, “включить экран”). Контакт DC переключается в высокий или низкий уровень, чтобы сообщить контроллеру, как интерпретировать входящие данные SPI.
3. Конфигурация ядра: Наложение дерева устройств (Device Tree Overlay)
Вы подключили экран. Вы включаете Pi. Экран загорается, но он полностью белый. Это Белый экран смерти. Это означает, что подсветка получает питание, но ядро Raspberry Pi не знает о существовании экрана, поэтому не отправляет никаких данных о пикселях.
Мы должны сообщить ядру Linux, как общаться с экраном. В современной Raspberry Pi OS (Bookworm и новее) это делается с помощью Наложений Дерева Устройств (dtoverlay).
Шаг 3.1: Включение шины SPI
Во-первых, необходимо разблокировать аппаратную часть SPI на Pi.
Перейдите в Параметры интерфейсов (Interface Options) -> SPI -> Выберите Да для включения.
Перезагрузите Pi.
Шаг 3.2: Определите свой контроллер дисплея (Драйвер)
TFT LCD панели — это просто стекло. Ими управляет микросхема, приклеенная к задней части стекла (или на печатной плате). Наиболее распространенные контроллеры на рынке производителей в Европе/США:
ILI9341 (Очень распространен для экранов 2.4″ — 2.8″)
ST7789 (Распространен для IPS экранов 1.3″ — 2.0″)
ILI9486 (Распространен для экранов 3.5″)
Вы необходимо должны знать, какой контроллер использует ваш экран. Проверьте техническую документацию производителя.
Шаг 3.3: Редактирование config.txt
В современной Raspberry Pi OS файл конфигурации загрузки был перемещен.
Откройте его с помощью текстового редактора nano:
Bash
sudo nano /boot/firmware/config.txt
(Примечание: в старых версиях ОС Bullseye путь был просто /boot/config.txt)
Прокрутите до конца файла и добавьте конкретное наложение (overlay) для вашего драйвера. Например, если вы используете экран ILI9341 , подключенный точно так, как в таблице выше:
Ini, TOML
# Включить SPI
Для дисплея ST7789 (часто используется в Adafruit PiTFT):
Ini, TOML
dtoverlay=adafruit-st7789v-hAT,fps=30
Сохраните файл (Ctrl+O, Enter) и выйдите (Ctrl+X).
Перезагрузите Raspberry Pi: sudo reboot.
При правильной конфигурации белый экран станет черным во время загрузки, и в конечном итоге вы увидите текст консоли Linux, прокручивающийся на маленьком экране.
4. Современные графические архитектуры: FBCP vs. DRM/KMS
Именно здесь многие руководства 2020 года вводят в заблуждение.
Исторически, если вы хотели зеркалировать основной HDMI-рабочий стол на маленький SPI TFT LCD дисплей Raspberry Pi, вы использовали инструмент под названием fbcp (Копирование кадрового буфера). Он делал снимок основного кадрового буфера графического процессора (fb0) и активно копировал его в кадровый буфер SPI-экрана (fb1).
Проверка совместимости с Wayland
Начиная с Raspberry Pi OS Bookworm, оконная система X11 и устаревшая архитектура кадрового буфера были упразднены. Теперь Pi использует Wayland (в частности, композитор Wayfire) и архитектуру DRM/KMS (Direct Rendering Manager / Kernel Mode Setting).
fbcp больше не работает в современной Raspberry Pi OS.
Как управлять интерфейсом сегодня:
Если вы создаёте промышленный HMI или пользовательское устройство, вам в любом случае не следует пытаться запускать полноценный графический интерфейс рабочего стола на 3,5-дюймовом экране. Вместо этого вам следует написать приложение, которое рендерит напрямую в слой DRM/KMS с использованием аппаратно-ускоренных библиотек.
Профессиональный стек:
LVGL (Light and Versatile Graphics Library): Библиотека с открытым исходным кодом на языке C, которая записывает данные напрямую в подсистему Linux DRM. Она невероятно легковесна и идеально подходит для SPI-экранов.
Qt / PyQt: Вы можете настроить приложения Qt на работу с использованием плагинов eglfs или или linuxfb.
, полностью обходя рабочий стол Wayland и выводя интерфейс напрямую на TFT LCD. Киоск-режим:.
5. Калибровка сенсорного интерфейса
Если вам абсолютно необходимо использовать веб-технологии (HTML/CSS/JS), вы можете настроить Wayfire на загрузку непосредственно в полноэкранный браузер Chromium, указывающий на локальный сервер Node.js.
Резистивный и ёмкостный сенсорный ввод
Если ваш TFT LCD экран для Raspberry Pi имеет сенсорную панель, то добиться вывода изображения на экран — это только полдела. Теперь необходимо обеспечить, чтобы при касании верхнего левого угла курсор мыши действительно перемещался в верхний левый угол. Резистивный (контроллер XPT2046):.
Требует нажатия. Очень распространён на недорогих 3,5-дюймовых SPI-экранах. Требует тщательной калибровки, поскольку аналоговое сопротивление меняется в зависимости от температуры и партии изготовления. Ёмкостный (контроллеры FT6236 / Goodix):.
Калибровка резистивного экрана XPT2046 под Wayland/Libinput
Как в смартфоне. Как правило, не требует калибровки, так как сетка цифровым способом сопоставляется с пикселями на заводе. Использует шину I2C вместо SPI. Поскольку X11 устарел, старый инструмент xinput_calibrator более не актуален. Сегодня сенсорные экраны обрабатываются с помощью и libinput и правил.
udev .Сначала убедитесь, что драйвер сенсорного экрана загружен в файле/boot/firmware/config.txt
Перезагрузитесь и установите инструмент калибровки libinput:Bash sudo apt install weston Wayfire (композитор по умолчанию) использует специальный файл конфигурации для устройств ввода. Вы должны отредактировать конфигурацию Wayfire, чтобы правильно сопоставить матрицу касаний.Откройте файл ~/.config/wayfire.ini и найдите раздел.[input] 1 0 0 0 1 0.)
. Вам потребуется добавить калибровочную матрицу.
6. Разгон шины SPI (В погоне за кадрами)
(Примечание: точная матрица зависит от ориентации экрана — альбомной или портретной. Матрица идентичности по умолчанию —.
1 0 0 0 1 0 0 0 1 . ). скорость Если оси касания инвертированы (движение пальца вверх перемещает курсор вниз), необходимо инвертировать значения матрицы. Например, для инверсии оси Y в правиле udev или матрице конфигурации Wayfire следует изменить множитель масштаба Y на отрицательное значение.
Ini, TOML
Если ваш пользовательский интерфейс работает медленно, вы можете попытаться разогнать шину SPI, чтобы выжать из TFT LCD экрана Raspberry Pi несколько дополнительных кадров в секунду.
Откройте файл.
Предупреждение: /boot/firmware/config.txt.
Заключение: Инженерная выгода
и найдите строку с драйвером оверлея. Добавьте параметр.
speed.
Часто задаваемые вопросы (ЧЗВ)
В1: Почему мой SPI-дисплей загружается полностью белым экраном?
О: Это наиболее распространенная проблема. Белый экран означает, что подсветка получает питание 3,3 В или 5 В, но контроллер дисплея не принимает данные.
Проверьте проводку: Убедитесь в правильности подключения линий MOSI, SCLK, а особенно CS (Chip Select) и DC (Data/Command).
Проверьте конфигурацию: Убедитесь, что dtparam=spi=on активен в вашем ..
Проверьте драйвер: Убедитесь, что вы загружаете правильный dtoverlay для конкретного чипа контроллера вашего экрана (например, ILI9341 или ST7789).
Вопрос 2: Можно ли запустить стандартный графический интерфейс рабочего стола (например, Chromium или VLC) на 3,5-дюймовом SPI-экране?
О: Технически — да, но на практике — нет. Шина SPI просто не обладает достаточной пропускной способностью для передачи 320×480 пикселей с частотой 60 кадров в секунду. Воспроизведение видео приведёт к сильному разрыву кадров, а интерфейс рабочего стола будет крайне медленным. Для работы с графической средой или видео необходимо использовать дисплей с интерфейсом MIPI DSI или HDMI. SPI-экраны предназначены для простых статических интерфейсов, кнопок и текстовых данных.
Вопрос 3: Нажатия на сенсорном экране регистрируются, но курсор мыши перемещается в противоположную сторону экрана. Как это исправить?
О: Оси сенсорного ввода инвертированы относительно осей дисплея. Это происходит, если вы поворачиваете дисплей программно (например, display_lcd_rotate=2), но не применяете поворот к матрице сенсорного ввода. Необходимо применить матрицу преобразования через libinput правила или в конфигурации Wayfire/X11, чтобы поменять местами оси X и Y или инвертировать их.
Вопрос 4: Не перегрузит ли подключение ЖК-экрана блок питания Raspberry Pi?
О: Возможно, в зависимости от модели Raspberry Pi и размера экрана. Для Raspberry Pi 4 или 5 требуется надёжный блок питания на 5,1 В / от 3 А до 5 А. 3,5-дюймовый SPI-экран потребляет около 100–150 мА для светодиодной подсветки, что безопасно для выводов 5V GPIO. Однако 7- или 10-дюймовый экран может потреблять от 500 мА до 1 А. Для экранов размером более 5 дюймов рекомендуется запитывать экран от отдельного внешнего источника питания через USB, а не от выводов GPIO Raspberry Pi, чтобы избежать троттлинга из-за просадки напряжения (индикатор — жёлтая иконка молнии).
Вопрос 5: Я хочу создать коммерческий продукт на основе Raspberry Pi Compute Module. Стоит ли использовать SPI?
О: Нет. Если вы разрабатываете коммерческий продукт на основе Compute Module 4 (CM4) или CM5, следует развести линии MIPI DSI или использовать параллельный интерфейс DPI на вашей пользовательской плате-носителе. Это переложит обработку изображения на аппаратный графический процессор, освободив центральный процессор для выполнения логики вашего приложения и обеспечив плавную профессиональную анимацию с частотой 60 кадров в секунду.