- Цена: $12.99 (на момент покупки было $10.91)
- LCD дисплей 3.5″ (49 x 73.4 мм) со светодиодной подсветкой
- Разрешение 340*480 пикселей (8:5)
- Количество поддерживаемых цветов — 65536
- Сенсорная резистивная панель
- Интерфейс SPI
- Подключение — двухрядный разъем PBD-26 (совместим с Raspberri PI 40-пин и 26-пин разъемом)
- Габариты 56.6 x 97.6 x 20.8 мм
- Сенсорный дисплейный модуль 3.5" полностью оправдал мои ожидания
- Несмотря на то, что многие ругают Orange PI за их глючность, подобные железки вполне прикручиваются к этим недорогим микро ПК, хотя поддержка и коммьюнити у них значительно хуже чем у «малиновых друзей»
- Данный экран вполне может найти применения в автономных миниатюрных системах, например, как панель к умному дому
- При желании, данный модуль можно подключить у всевозможным Arduino/ESP (библиотеки готовые есть), но, на мой взгляд, применение будут довольно ограниченным из за низкой производительности и малому объему памяти указанных контроллеров.
После покупки нового 3D принтера я задумался над его удаленным управлением. В наличии имелись апельсиновые ПК Orange PI PC, Orange PI PC+ и Orange PI ZERO — вполне годные микрокомпьютеры для того чтобы установить Octoprint с камерой. Захотелось сразу еще и маленький сенсорный экран. HDMI экраны с USB тачем показались дороговатыми и слишком громоздкими. Решил попробовать недорогой дисплейчик для Raspberry PI с SPI интерфейсом.
Начну с характеристик модуля
В магазине на Алиэкспресс указан производитель экрана — LANDZO. Эта китайская компания, без зазрения совести шлепает и продает копии различных около ардуиновых и малиновых плат. На страничке с описанием данного товара практически нет полезной информации. На самом деле этот модуль разработан другой китайской компанией Waveshare Electronics. У нее этот экран вдвое дороже и есть предупреждение о «китайских подделках» )
Внутренний мир сенсорного дисплея
Модуль дисплея состоит из собственно экрана 3.5″ на встроенном контроллере ILI9486 с параллельным 60-пиновым гибким интерфейсом. На основной плате стоят сдвиговые регистры 74-й серии, превращающие параллельный интерфейс в SPI
Там же на плате находится контроллер сенсорного экрана XPT2046 и 3.3В стабилизатор AMS1117
Ну и двухрядный разъем PBD-26 для подключение к 26 и 40-пиновому GPIO Rapberry PI.
Комплектность, внешний вид, подключение
Доехал дисплей до Перми всего за 15 дней. Оказывается, случаются и добрые чудеса у Почты России. Упаковка — двойная картонная коробочка
В комплект поставки входит сам дисплей,CD-диск (о где же взять читалку?) с драйверами для Raspberry PI и стилус для резистивного сенсорного экрана.
Размеры дисплея соответствуют габаритам плат микрокомпьютеров — Raspberri PI, Asus Tinker Board, Orange PI (PC)
Разъем позволяет подключить к любому одноплатнику, совместимому с Raspberri PI 40 пин или 26 пин. Orange PI PC встает идеально прямо над платой
У Orange PI ZERO разъем повернут на 180 и экран превращает его в этакого монстр
Винить инженеров OPI ZERO не нужно.Такое размещение гребенки GPIO на микро ПК сделано для того, чтобы экран (и другие подобные платы) можно было использовать совместно с платой расширения, добавляющей к микрокомпьютеру два USB, микрофон, звуковой выход и ИК порт.
Купленный дисплейный модуль «заточен» под Rasperri PI и работает с этими компьютерами «практически из коробки». На диске имеются «драйвера» — файлы для UBOOT, ядро с модулями и конфигурационные файлы, которые нужно просто переписать поверх чистого Raspbian.
Для Orange PI такой поддержки нету и приходится уповать на сторонних разработчиков LINUX (ту же команду Armbian), которые осуществляют поддержку этих дешевых, но очень непростых микро ПК.
В интернете есть разные описания подключения 3.5" сенсорного экрана к Orange PI род управлением той или иной версии LINUX. Поэтому в настройках, как говорится, имеются нюансы, о которых я постараюсь написать далее.
Сразу ставим пакет для сборки ядра 4.19.13
apt-get update
apt install linux-headers-next-sunxi=5.70
apt-get upgrate делать не рекомендую, так как в последних обновлениях есть проблемы со скриптами для сборки модулей ядра
Модуль экрана fb_ili9486 уже давно есть в Armbian (в других дистрибутивах не смотрел). Нужно только правильно указать, как подключен экран.
Включаем SPI шину. Для этого в файле /boot/armbianEnv.txt добавляем следующие строки:
overlays=spi-spidev spi-add-cs1
param_spidev_spi_bus=0
param_spidev_spi_cs=1
RESET на OPI PC подключен к GPIO2, а DC к 71. Остальные GPIO — SPI интерфейс. Старт модуля ядра выглядит следующим образом
modprobe fbtft_device rotate=90 name=piscreen speed=16000000 gpios=reset:2,dc:71 txbuflen=32768 fps=25
Параметр rotate=90 говорит о повороте изображения на экране на 90 градусов. Можно заменить его на 180 и 270.
Для того чтобы модуль с заданными параметрами стартовал при запуске Linux — создаем файл загрузки модулей /etc/modules-load.d/98-fbtft.conf
fbtft
fbtft_device
И файл с параметрами модуля fbtft_device /etc/modprobe.d/fbtft.conf
options fbtft_device rotate=90 name=piscreen speed=16000000 gpios=reset:2,dc:71 txbuflen=32768 fps=25
Теперь на нашем экранчике мы видим текстовую консоль загрузки системы Armbian а в журнале загрузки ядра по команде dmesg видим что наш экран система опознала
Поддержка графического режима на TFT экране производится установкой пакета
apt-get install xserver-xorg-video-fbdev
и создания файла /usr/share/X11/xorg.conf.d/99-fbdev.conf
Section "Device"
Identifier "piscreen"
Driver "fbdev"
Option "fbdev" "/dev/fb0"
EndSection
С сенсорным экраном все немного сложнее — готовых модулей-драйверов нету, придется их собирать из исходников. Для этого мы и устанавливали пакет для сборки модулей ядра
Качаем драйвер тачскрина ADS7846, совместимого с микросхемой XPT2046 на нашем модуле
mkdir ads7846
cd ads7846
wget https://sourceforge.net/p/openipmi/linux-ipmi/ci/master/tree/drivers/input/touchscreen/ads7846.c?format=raw
mv ads7846.c?format=raw ads7846.c
Создаем файл Makefile с следующим содержимым:
obj-m := ads7846.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KDIR) M=$(PWD) clean
install:
$(MAKE) -C $(KDIR) M=$(PWD) modules_install
После этого запускаем сборку и установку модуля
make
make install
depmod
Похожим образом скачиваем, собираем и устанавливаем модуль ads7846_device:
cd ..
git clone https://github.com/notro/fbtft_tools/
cd fbtft_tools/ads7846_device
make
make install
depmod
Теперь можно загрузить модуль вручную и посмотреть dmesg
modprobe ads7846_device model=7846 cs=1 gpio_pendown=1
Проверить работу сенсорного экрана можно командой с выбором нашего устройства (в моем случае /dev/input/event2)
evtest
Теперь если мы прикоснемся к экрану — на экран выведутся координаты точки и другие параметры
Осталось добавить поддержку сенсорного экрана при загрузке системы. Для этого создаем файл загрузки модулей /etc/modules-load.d/99-ads7846.conf
ads7846
ads7846_device
И файл параметров модуля ads7846_device /etc/modprobe.d/ads7846_device.conf
options ads7846_device model=7846 cs=1 gpio_pendown=1
Теперь начинаются те самые нюансы, с которыми пришлось поразбираться:
В графическом режиме у меня модуль не виделся утилитами xinput и xinput_calibrate. Иногда в системе устанавливался с каким то пакетом файл /usr/share/X11/xorg.conf.d/40-libinput.conf и сенсорный экран виделся системой, но ни в какую не хотел настраиваться
Создание файла /usr/share/X11/xorg.conf.d/99-calibrate.conf ничего не давало. Вернее, строка
Option "TransformationMatrix" "0 -1 1 1 0 0 0 0 1"
в этом файле позволяла привести соответствие тачкрина с ориентацией экрана, а вот точная настройка положения указателя игнорировалась. xinput_calibrator давал при этом совершенно «левые» значения, которые находились далеко за пределом экрана.
Все оказалось просто — тачкрин работал через «мышиный» драйвер libinput вместо evdev, который должен работать по событиям нажатия на экран. Для его включения создаем файл /usr/share/X11/xorg.conf.d/45-evdev.conf со следующим содержимым
Section "InputClass"
Identifier "evdev touchscreen catchall"
MatchIsTouchscreen "on"
MatchDevicePath "/dev/input/event*"
Driver "evdev"
EndSection
После перезагрузки драйвер заработал как нужно и стал брать все параметры калибровки из файла /usr/share/X11/xorg.conf.d/99-calibrate.conf как нужно
Section "InputClass"
Identifier "calibration"
MatchProduct "ADS7846 Touchscreen"
Option "Calibration" "300 3932 294 3801"
Option "SwapAxes" "0"
Option "TransformationMatrix" "0 -1 1 1 0 0 0 0 1"
EndSection
Если ваш экран не точно откалиброван, то просто запустите с консоли
export DISPLAY=:0.0
xinput_calibrate
и ткнув стилусом в четыре предложенные на экране точки получаете новые значения «Calibration». Чтобы каждый раз не перезапускать при калибровке XWindow можно устанавливать новые значение командой xinput
export DISPLAY=:0.0
xinput list-props 'ADS7846 Touchscreen'
xinput set-prop 'ADS7846 Touchscreen' 'Evdev Axes Swap' 135 4025 226 3754
xinput set-prop 'ADS7846 Touchscreen' 'Coordinate Transformation Matrix' 0 -1 1 1 0 0 0 0 1
Пока разбирался со всеми этими настройками, нашел альтернативный способ калибровки тача. Все параметры можно указать при загрузке модуля ядра и не возиться с фалами /usr/share/X11/xorg.conf.d/
modprobe ads7846_device model=7846 cs=0 gpio_pendown=1 keep_vref_on=1 swap_xy=1 pressure_max=255 x_plate_ohms=60 x_min=200 x_max=3900 y_min=200 y_max=3900 busnum=1
может кому пригодиться
В файле /boot/armbianEnv.txt прописываем SPI1
overlays=spi-spidev spi-add-cs1
param_spidev_spi_bus=1
param_spidev_spi_cs=1
Строка запуска модуля будет выглядеть следующим образом
modprobe fbtft_device rotate=270 name=piscreen speed=16000000 gpios=reset:2,dc:18 txbuflen=32768 fps=25 busnum=1
Параметр rotate=270 делает правильное положение картинки на экране при условии если контроллер снизу экрана
Обновление системы до нужной версии и сборка драйвера сенсорного экрана полностью идентична OPI PC. В строке запуска модуля добавляется только номер шины SPI
modprobe ads7846_device model=7846 cs=1 gpio_pendown=1 busnum=1
Все остальные настройки экрана и программ не зависят от аппаратного обеспечения и полностью идентичны с Orange PI PC
При таком неудачном размещении экрана и контроллера общие габариты получаются даже больше, чем у Orange PI PC и поэтому особого смысла использования платы ZERO я не вижу, так как ее единственное преимущество — габариты, здесь не используются
1. Команда питона virtualenv в Armbian заработала только после следующего действия:
/usr/bin/easy_install virtualenv
2. Браузера chromius при помощи которого выводится консоль Octoprint на экранчик в репозитарии Armbian нету. Можно установить chromius из другого репозитария
apt-get update
wget -qO - http://bintray.com/user/downloadSubjectPublicKey?username=bintray | apt-key add -
echo "deb http://dl.bintray.com/kusti8/chromium-rpi jessie main" | tee -a /etc/apt/sources.list
apt-get update
apt-get install chromium-browser
3. После установки Octoprint не захотели устанавливаться плагины, в частности TouthUI с интерфейсом для нашего дисплея. Помогла установка прав на каталоги Octoprint
chown -R octoprint.octoprint .
Делаем корпус
Чем отличается обычный радиолюбитель, от радиолюбителя с 3D-принтером? Правильно. Последний изводит килограммы пластика, чтобы поместить в него свои изделия. Освоив пакеты для проектирования печатных плат и моделирования схем, приходится осваивать и 3D-моделирование для создания корпусов (не побираться же всю жизнь на готовых моделях!)
Проектирую простые модели для принтера я в TINKERCAD
Модель корпуса положил туда
Итоги
Всех с первым днем весны!