Raspberry pi 3 как подключить экран
Перейти к содержимому

Raspberry pi 3 как подключить экран

  • автор:

Setting up an LCD screen on the Raspberry Pi, 2019 edition

I recently bought a 3.5" TFT touchscreen display for my Raspberry Pi. The display connects via the GPIO pins and fits neatly onto the form factor of the Raspberry Pi 3. The idea was to add a GUI application onto the Pi, which had until now been acting as a headless web and application server.

The installation of the hardware was straightforward, but setting up the Pi to display onto the new LCD didn’t go so well. It turns out this LCD, and many similar ones, ask you to enable the LCD via scripts in the LCD-show project. On my first attempt, I simply ran the relevant script ( LCD35-show ) as requested, but I ended up not being able to connect to my WiFi anymore!

I found out the scripts mess with a number of system files, overwriting configurations that are integral to the operation of the Pi. The overwritten files are based on the ones provided by Raspbian, so ideally not much should be changing. However, the new files are based on older versions of Raspbian. Additionally, the scripts do much more than they need to.

As a second attempt, I read through the script and applied the changes manually based on my understanding of what was needed to enable the LCD. Below are my notes taken during the process.

Enabling the 3.5" display

Each of the following steps is based on a set of commands in the original script. For reference, here’s the LCD35-show script I used, in the state it was in at the time of writing. The files to copy over are in the same repository, so start by cloning the directory onto your Raspberry Pi:

Copy over boot overlays

In the original script, the same file is copied over under two different names. In the next step (“Enable interfaces”), the .dtbo file is referenced, albeit without the file extension, so only that file should be required.

The file does not exist in the /boot/overlays directory, so it's safe to copy it over.

Enable interfaces

A particular boot config file is copied over. The changes are minimal, and to avoid making unexpected changes, the changes should be made manually.

Using raspi-config , enable the following interfaces:

  • SPI
  • I²C (may not be needed, see below)
  • Serial (may not be needed, see below)

Edit: Reddit user farptr points out that SPI is the one used for driving the display, and the I²C interface is used for the touchscreen. I experimented with the interfaces, and in my case, only SPI was required for both the display and touchscreen functionality. I recommend turning these interfaces on one by one in to see which ones your display needs.

Uncomment the line that says:

Finally, enable the overlay from the previous step by adding the following line at the end. I like to add a comment to remind myself of where the overlay comes from and why it needs to be applied:

As a side note, the dtoverlay line can include a rotation parameter. It turns out the default value is 90°, and since I wanted to use display upside down, I changed the rotation to 270°:

At this point, you can verify no further changes need to be made by diffing the now altered config.txt with the reference one that was supposed to be copied over:

There will still be some differences, but they are only in the ordering of lines and in comments. (And possibly the rotation parameter if you included one.)

Update cmdline.txt

This file is used to pass arguments to the kernel prior to initialization. The original script uses the presence of partition #7 on the SD card ( /dev/mmcblk0p7 ) to determine if we're running NOOBs or not. If we're not, we'd be copying over the standard cmdline.txt file, and if we are, the following section still applies.

We don’t actually want all of the changes, so we’ll make the following changes:

  • Add the following options (all on the same line):
    fbcon=map:10 fbcon=font:ProFont6x11
    I’m not sure what exactly the first option does, but it’s the main change required to show the console on the LCD. Perhaps the font-related option is not necessary, but again, I don’t know.

In particular, we don’t want to make the following changes:

  • Leave the console=serial0,115200 option as is. The reference file changes serial0 to ttyAMA0 . The Raspberry PI has two UARTs, and ttyAMA0 refers to one of them. However, the primary UART differs based on the Raspberry Pi model (namely based on if the model comes with built-in Bluetooth and WiFi). serial0 can be used to reference the primary one for the current model.
  • Leave the root option as is. The reference file specifies /dev/mmcblk0p2 as the root partition, but newer versions of Raspbian refer to the root partition by a UUID. In fact, this is the difference between the non-NOOBS and NOOBS version of the reference file, so simply avoiding this change means you don’t have to worry about which distribution you’re using.
  • Don’t remove the fsck.repair=yes option. This is unrelated to the LCD, which is why we won't bother removing the option.
  • Don’t add the logo.nologo option. Again, this is unrelated to the LCD, so if you want to keep the default behavior, there’s no need to remove the logo.

Reboot

At this point, the TFT LCD is set up. If you just want a display for the console, you can reboot.

If you want to set up the touchscreen with X, read on instead of rebooting.

Installing X

I had installed Raspbian minimal because I didn’t need a GUI before. However, the LCD-show scripts assume you have X installed. As we can see above, the LCD actually works without X.

The touchscreen works as well, and it’s even possible to display a GUI without X, but it’s not trivial to do so. The easier option is to install a full desktop environment, then build a regular GUI application. I’ll write up an article about building touch-enabled GUI applications without X in the future.

The most straightforward route is of course to install a Raspbian image with the PIXEL desktop already installed. But, if you already installed the minimal image, install the following packages:

To make it easier to work with the desktop environment, you can set the Pi to boot up in desktop mode, and even auto-login. This can be done via raspi-config , under "Boot Options" > "Desktop / CLI".

To change which user the system logs in as, change the lightdm config:

Edit the autologin-user line to reference the user you wish to automatically log in as.

Enabling the touchscreen via X

Copy over Xorg configurations

The original script cleaned up and recreated the /etc/X11/xorg.conf.d directory, which did not exist. Thus:

  • The 40-libinput.conf file didn't exist, so it didn't need to be deleted.
  • The two files being copied into the directory didn’t initially exist, so nothing needs to be backed up.

The modified commands to run, therefore, are:

Set up Xorg evdev input drivers

In the original script, we check the following:

Does uname -n (network node hostname) return "raspberrypi"? This is incorrectly used to check if we're running a "Raspberry Pi kernel" (whatever that means). The reason this is wrong is because the user may have changed the hostname. If the hostname doesn’t match, nothing is done. We’ll assume a match, regardless of the hostname.

Next, we check the kernel version using the following:

On my machine, uname -v returns:

Resulting in a version of 1159 .

Finally, if the version is greater than or equal to 970 , we need to install the Xorg evdev input driver, allowing for multiple input devices. This is what will enable using the touchscreen as a second input device.

After installing the package, we duplicate one of the Xorg config files related to evdev into the same directory, just with a different number prefix! I’m not sure why this is needed…

Reboot

And finally, reboot!

Unnecessary changes

One of the changes in the reference script is to copy over a file into /etc/inittab . This file was used to configure the older sysvinit system, which has since been replaced by systemd.

Not only will this file have no effect anymore, but no part of it is necessary at this point. Simply ignore this part of the script.

Switching back to HDMI

First, remove the dtoverlay=tft35a line from /boot/config.txt .

Next, in /usr/share/X11/xorg.conf.d/99-fbturbo.conf , switch from /dev/fb1 to /dev/fb0 on the following line:

This is only needed if you set up the X-related functionality above.

With the screen set up, it’s nice that I don’t need to be close to a monitor to work with my Raspberry Pi. Since then, I’ve been experimenting with ways to create a GUI application with as few dependencies as possible. I will document that process as I learn more.

Raspberry Pi: Подключение и настройка сенсорного экрана

В данной статье мы расскажем вам как подключить и настроить сенсорный экран для работы с Raspberry Pi. Для примера мы будем использовать пятидюймовый HDMI экран RPA05010R с разрешение 800×480 пикселей.

Внешний вид сенсорного экрана для Raspberry Pi

Данный экран можно подключить к любому компьютеру и использовать как небольшой внешний монитор, но если его поключить к Raspberry Pi и всё правильно настроить, то у него будет доступна функция Touchscreen.

Структура

Рассмотрим основные элементы на обратной стороне дисплея:

Разъемы и интерфейсы сенсорного экрана

Разъём MicroUSB для подключения питания, экрану необходимо 5В. Также вы можете подключить питание через разъём ④, подробное описание контактов разъёма приведено в таблице ниже.
HDMI разъём для подключения нешних устройств.
Переключатель "Backlight Power" позволяет включать и выключать подсветку экрана в случаях когда вам необходимо сэкономить заряд батареи.
Разъём 13*2 Pin: Позволяет подключить питание от Raspberry Pi, а также передавать Touchscreen сигналы от дисплея обратно к микрокомпьютеру.
Дополнительный интерфейс для подключения к контактам дисплея.

Распиновка экрана

Подключение

Дисплей можно подключить двумя основными способами. Вы можете просто подключить к нему HDMI кабель и питание. В этом случае дисплей будет работать как обычный монитор.

Либо вы можете подключить его к разъему Raspberry Pi в качестве платы расширения. В этом случае дисплей будет питаться от микрокомпьютера, а также у него будет доступна функция Touchscreen. Этот вариант подключения отлично подойдет для моделей Raspberry-Pi 3B/2B/B+.

Подключите дисплей к разъему микрокомпьютера как показано на картинке ниже. Крайние пины райзъёмов должны совпадать.

Подключаем экран к разъему Raspberry Pi

Также подключите дисплей к Raspberry Pi с помощью HDMI переходника, который идет в комплекте. Если вы правильно подключили пины в первом шаге, то HDMI разъёмы дисплея и микрокомпьютера должны быть ровно друг напротив друга.

Подключаем экран к микрокомпьютеру через HDMI переходник

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

1. Самое первое, что нам необходимо сделать для настройки — это изменить файл config.txt в корневой директории системы. Для этого вы можете вынуть SD карту из Raspberry Pi, вставить ее в ваш основной компьютер, внести изменения в текстовом редакторе и сохранить. Либо сделать это через командную строку не выключая ваш микрокомьютер, если вы можете подключиться к нему по SSH или если у вас подключен внешний монитор.

В файле config.txt вам необходимо добавить следующие строчки:

# — added by elecrow-pitft-setup —
hdmi_force_hotplug=1
max_usb_current=1
hdmi_drive=1
hdmi_group=2
hdmi_mode=1
hdmi_mode=87
hdmi_cvt 800 480 60 6 0 0 0
dtoverlay=ads7846,cs=1,penirq=25,penirq_pull=2,speed=50000,keep_vref_on=0,swapxy=0,pmax=255,xohms=150,xmin=200,xmax=3900,ymin=200,ymax=3900
display_rotate=0
# — end elecrow-pitft-setup —

Сохраняете, закрываете файл, вставляете карту памяти обрано в Raspberry Pi, подключаете дисплей и питание. Система начинает загружаться.

2. После того как система загрузится вы увидите рабочий стол, но изображение будет занимать только часть экрана. Для нормальной работы экрана вам необходимо установить драйвер через командную строку. Для этого запускаете терминал нажав на иконку в верхнем меню, либо подключаетесь к Raspberry Pi по SSH.

Не важно как вы добрались до командной строки микрокомпьютера, команда скачивания драйвера будет одинаковой. Вводите следующую команду и нажимайте Enter:

git clone https://github.com/Elecrow-keen/Elecrow-LCD5.git

После завершения скачивания драйвера вам необходимо его уставновить — вводите следующие команды по очереди и наживаете Enter после каждой:

cd Elecrow-LCD5
sudo ./Elecrow-LCD5

После перезагрузки изображени станет во весь экран как на фото:

Теперь изображение показывается на полный экран

Калибровка сенсорного экрана

Для того, чтобы у дисплея работали функции сенсорного экрана необходимо установить драйвер, для этого в терминале введите следующую команду:

sudo apt-get install -y xinput-calibrator

После уставноки драйвера необходимо откалибровать экран. Для этого откройте главное меню и перейдите в "Параметры -> Calibrate Touchscreen":

Запускаем программу калибровки сенсорного экрана

Запустится программа калибровки экрана. Вы должны следовать указаниям и несколько раз нажать стилусом на экран в нужных местах:

Калибровка сенсорного экрана

Теперь проверьте насколько хорошо работает сенсорный экран. Если нажатия срабатывают неточно, тогда порпобуйте перезагрузить систему и повторить калибровку экрана.

Настройка разрешения

Вы установили необходимые драйверы и сделали так, чтобы изображение было во весь экран и работал Touchscreen, но скорее всего система до сих пор использует старое разрешение экрана. Чтобы его изменить откройте основные настройки в главном меню:

Меню Настройкаи системы

В появившемся окне нажмите кнопку "Set Resolution":

Выбор разрешения экрана в Raspbian

В выпадающем меню необходимо выбрать разрешение 800×480 и нажать кнопку ОК! Теперь ваш сенсорный экран полностью готов к работе, можно переходить к созданию ваших проектов!

Второй HDMI монитор к Raspberry Pi3 через DPI интерфейс и FPGA плату

На этом видео показаны: плата Raspberry Pi3, к ней, через разъем GPIO, подключена FPGA плата Марсоход2rpi (Cyclone IV), к которой подключен HDMI монитор. Второй монитор подключен через штатный разъем HDMI Raspberry Pi3. Все вместе работает, как система с двумя мониторами.

Дальше расскажу, как это реализовано.

На популярной плате Raspberry Pi3 есть разъем GPIO, через который можно подключать разные платы расширения: датчики, светодиоды, драйвера шаговых двигателей и многое другое. Конкретная функция каждого вывода на разъеме зависит от конфигурации портов. Конфигурация GPIO ALT2 позволяет переключить разъем в режим DPI интерфейса, Display Parallel Interface. Существуют платы расширения для подключения VGA мониторов, через DPI. Однако, во-первых, мониторы VGA уже не так распространены, как HDMI, а во-вторых, цифровой интерфейс все лучше аналогового. Тем более, что ЦАП на подобных VGA платах расширения обычно выполнен в виде R-2-R цепочек и часто не более 6 бит на цвет.

В режиме ALT2 пины разъема GPIO имеют следующее значение:

image

Я здесь раскрасил RGB выводы разъема соответственно в красный, зеленый и синий цвета. Другие важные сигналы это сигналы синхронизации развертки V-SYNC и H-SYNC, а так же CLK. Тактовая частота CLK это частота, с которой значения пикcелей выдаются на разъем, она зависит от выбранного видеорежима.

Для подключения цифрового HDMI монитора нужно захватить сигналы DPI интерфейса и преобразовать их в сигналы HDMI. Сделать это можно, например, с помощью какой либо FPGA платы. Как оказалось, плата Марсоход2rpi подходит для этих целей. По правде говоря, основной вариант подключения этой платы через специальный переходник выглядит вот так:

image

Эта плата служит для увеличения числа GPIO портов и для подключение большего числа периферийных устройств к raspberry. При этом, 4 сигнала GPIO при таком подключении используются под JTAG сигналы, так, что программа из распберри может загружать FPGA прошивку в ПЛИС. Из-за этого такое штатное подключение мне не подходит, выпадают 4 DPI сигнала. По счастью, дополнительные гребеночки на плате имеют совместимую с Raspberry распиновку. Так, что я могу развернуть плату на 90 градусов и все равно подключить ее к моей малинке:

Конечно, придется использовать внешний JTAG программатор, но это не проблема.

Небольшая проблема все же есть. Не каждый вывод FPGA может использоваться, как вход тактовой частоты. Есть только несколько dedicated pin, которые можно использовать для этих целей. Так и здесь получилось, что GPIO_0 сигнал CLK не попадает на ввод FPGA, который возможно использовать как вход тактовой частоты ПЛИС. Так что все таки пришлось кинуть один проводок на платку. Я соединяю GPIO_0 и сигнал KEY[1] платы:

image

Теперь расскажу немного про проект в ПЛИС. Основная сложность при формировании HDMI сигналов это очень высокие частоты. Если посмотреть на цоколевку разъема HDMI, то видно, что сигналы RGB теперь являются последовательными дифференциальными сигналами:

Использование дифференциального сигнала позволяет бороться с синфазными помехами на линии передачи. При этом, исходный восьмибитный код каждого сигнала цвета преобразуется в 10-ти битный TMDS (Transition-minimized differential signaling). Это специальный способ кодирования для удаления постоянной составляющей из сигнала и минимизации переключений сигналов в дифференциальной линии. Поскольку на один байт цвета теперь по последовательной линии передачи нужно передать 10 бит, то получается, что тактовая частота сериализатора должна быть в 10 раз выше, чем тактовая частота пикселей. Если взять к примеру видео режим 1280х720 60Гц, то частота пикселей у такого режима 74,25МГц. На сериализаторе должно быть 742,5МГц.

Обычные FPGA вообще-то на такое, к сожалению, не способны. Однако, по нашему счастью, в FPGA имеются встроенные выводы DDIO. Это такие выводы, которые уже как бы являются сериализаторами 2-к-1. То есть они могут выдавать последовательно два бита по фронту и спаду тактовой частоты. Значит в проекте FPGA можно использовать не 740МГц, а 370МГц, но нужно задейcтвовать выходные элементы DDIO в ПЛИС. Вот 370МГц уже вполне достижимая частота. К сожалению, режим 1280×720 это предел. Более высокого разрешения в нашей FPGA Cyclone IV установленной на плате Марсоход2rpi не достичь.

Итак, в проекте, входная частота пикселей CLK поступает на PLL, где умножается на 5. На этой частоте байты R, G, B, преобразуются в пары бит. Это делает TMDS энкодер. Исходный код на Verilog HDL выглядит вот так:

Потом выходные пары подаются на DDIO выход, который последовательно выдает однобитный сигнал по фронту и спаду.

Сам DDIO можно было бы описать таким Verilog кодом:

Но так работать скорее всего не будет. Нужно использовать альтеровскую мегафункцию ALTDDIO_OUT, чтобы на самом деле задействовать выходные DDIO элементы. В моем проекте используется именно библиотечный компонент ALTDDIO_OUT.

Возможно, все это выглядит немного мудрено, но работает.

Посмотреть весь исходный код, написанный на Verilog HDL, можно вот здесь, на github.

Скомпилированная прошивка для FPGA зашивается в EPCS чип, установленный на плате Марсоход2rpi. Таким образом, при подаче питания на плату FPGA, ПЛИС будет инициализироваться из флэш памяти и стартовать.

Теперь нужно немного рассказать о конфигурации самого Raspberry.

Я делаю эксперименты на Raspberry PI OS (32 bit) based on Debian Buster, Version:August 2020,
Release date:2020-08-20, Kernel version:5.4.

Нужно сделать две вещи:

  • отредактировать файл config.txt;
  • создать конфигурацию X сервера для работы с двумя мониторами.
  1. выключить использование i2c, i2s, spi;
  2. включить режим DPI с помощью оверлея dtoverlay=dpi24;
  3. настроить видеорежим 1280×720 60Гц, 24 бита на точку на DPI;
  4. указать необходимое количество фреймбуфферов 2 (max_framebuffers=2, только тогда появится второе устройство /dev/fb1)

После этого, нужно создать конфигурационный файл для X сервера для использования двух мониторов на двух фреймбуфферах /dev/fb0 и /dev/fb1:

Ну и, если еще не установлена, то нужно установить Xinerama. Тогда пространство рабочего стола будет полноценно расширено на два монитора, как показано выше на демо ролике.

Вот пожалуй и все. Теперь, и владельцы Raspberry Pi3 смогут пользоваться двумя мониторами.

Подключение к Raspberry Pi сенсорного TFT ЖК дисплея 3,5 дюйма

Raspberry Pi представляет собой наладонный компьютер с достаточно большой вычислительной мощностью. Он находит широкое применение в различных приложениях интернета вещей (IOT) и робототехнике.

Raspberry Pi имеет HDMI порт, через который к ней можно подключать обычные компьютерные мониторы/дисплеи/телевизоры. Но когда пространство для работы ограничено, то неплохо было бы иметь дисплей меньшего размера. Поэтому в данной статье мы рассмотрим подключение к плате Raspberry Pi популярного в современной электронике сенсорного TFT ЖК дисплея диагональю 3,5 дюйма (3.5 inch Touch Screen TFT LCD screen).

Внешний вид подключения к Raspberry Pi сенсорного TFT ЖК дисплея 3,5 дюйма

Спецификация данного дисплея представлена в следующей таблице:

Тип ЖК дисплея TFT
Диагональ 3,5 дюйма
Разрешение 320х480 пикселов
Интерфейс SPI
Контроллер дисплея XPT2046
Тип сенсора резистивный
Фоновая подсветка светодиодная
Соотношение сторон 8:5
Количество цветов 65536
Поддержка камера, мышка и клавиатура

Как видим, вполне функциональный по современным меркам дисплей.

Необходимые компоненты

  1. Плата Raspberry Pi (купить на AliExpress).
  2. 3.5” TFT LCD (сенсорный TFT ЖК дисплей диагональю 3,5 дюйма) (купить на AliExpress).
  3. Подключение к сети Интернет.

В данном проекте мы будем подключаться к плате Raspberry Pi по SSH протоколу с использованием программы Putty. Вы можете использовать любой другой способ взаимодействия с платой Raspberry Pi, однако у вас должна быть возможность запуска окна терминала платы.

Подключение TFT ЖК дисплея к Raspberry Pi

Подключить сенсорный TFT ЖК дисплей диагональю 3,5 дюйма к плате Raspberry Pi достаточно просто. TFT ЖК дисплей содержит ленту контактов с коннекторами типа «мама», которые отлично стыкуются с контактами Raspberry Pi типа «папа». Поэтому все, что вам нужно сделать в данном случае, это расположить TFT ЖК дисплей сверху платы Raspberry Pi, выровнять их относительно друг друга (чтобы контакты были напротив друга), после чего немного нажать на дисплей чтобы осуществить соединение. Соединенные таким образом TFT ЖК дисплей и плата Raspberry Pi будут выглядеть следующим образом:

Соединенные вместе TFT ЖК дисплей и плата Raspberry Pi

Осуществлять обмен данными между TFT ЖК дисплеем и платой Raspberry Pi мы будем по интерфейсу SPI. Получать питание дисплей будет от контактов 5V и 3.3V платы. Всего у TFT ЖК дисплея 26 контактов, их обозначение и описание представлено в следующей таблице.

Номер контакта Обозначение Описание
1, 17 3.3V питание 3.3V
2,4 5V питание 5V
3,5,7,8,10,12,13,15,16 NC Не подключается, используется для поддержки
6,9,14,20,25 GND земля
11 TP_IRQ Контакт прерывания по уровню логического нуля
18 LCD_RS Контакт выбора регистра для контроллера дисплея
19 LCD_SI Вход данных SPI интерфейса
21 TP_SO Выход данных SPI интерфейса
22 RST Сброс
23 LCD_SCK Контакт синхронизации SPI интерфейса
24 LCD_CS Контакт выбора чипа SPI интерфейса ЖК дисплея
26 TP_CS Контакт выбора чипа SPI интерфейса сенсорного экрана

Как видим, непосредственно для подключения к плате Raspberry Pi используется сравнительно небольшое число контактов дисплея.

Подготовка Raspberry Pi к подключению TFT ЖК дисплея

Когда вы подключите TFT ЖК дисплей к плате Raspberry Pi как описано в предыдущем пункте вы увидите на экране дисплея только пустой белый экран. Это вызвано тем, что у вас в плате не установлено никаких драйверов для работы с ЖК дисплеем. Поэтому откройте окно термина на плате Raspberry Pi и выполните следующую последовательность шагов.

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

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