RSS блога
Подписка
Сенсорный экран 3.5". Запускаем OCTOPRINT на Orange PI
- Цена: $12.99 (на момент покупки было $10.91)
- Перейти в магазин
После покупки нового 3D принтера я задумался над его удаленным управлением. В наличии имелись апельсиновые ПК Orange PI PC, Orange PI PC+ и Orange PI ZERO — вполне годные микрокомпьютеры для того чтобы установить Octoprint с камерой. Захотелось сразу еще и маленький сенсорный экран. HDMI экраны с USB тачем показались дороговатыми и слишком громоздкими. Решил попробовать недорогой дисплейчик для Raspberry PI с SPI интерфейсом.
Модуль дисплея состоит из собственно экрана 3.5″ на встроенном контроллере ILI9486 с параллельным 60-пиновым гибким интерфейсом. На основной плате стоят сдвиговые регистры 74-й серии, превращающие параллельный интерфейс в SPI
Там же на плате находится контроллер сенсорного экрана XPT2046 и 3.3В стабилизатор AMS1117
Ну и двухрядный разъем PBD-26 для подключение к 26 и 40-пиновому GPIO Rapberry PI.
В комплект поставки входит сам дисплей,CD-диск (о где же взять читалку?) с драйверами для Raspberry PI и стилус для резистивного сенсорного экрана.
Размеры дисплея соответствуют габаритам плат микрокомпьютеров — Raspberry PI, Asus Tinker Board, Orange PI (PC)
Разъем позволяет подключить к любому одноплатнику, совместимому с Raspberry PI 40 пин или 26 пин. Orange PI PC встает идеально прямо над платой
У Orange PI ZERO разъем повернут на 180 и экран превращает его в этакого монстр
Винить инженеров OPI ZERO не нужно.Такое размещение гребенки GPIO на микро ПК сделано для того, чтобы экран (и другие подобные платы) можно было использовать совместно с платой расширения, добавляющей к микрокомпьютеру два USB, микрофон, звуковой выход и ИК порт.
Купленный дисплейный модуль «заточен» под Raspberry PI и работает с этими компьютерами «практически из коробки». На диске имеются «драйвера» — файлы для UBOOT, ядро с модулями и конфигурационные файлы, которые нужно просто переписать поверх чистого Raspbian.
Для Orange PI такой поддержки нету и приходится уповать на сторонних разработчиков LINUX (ту же команду Armbian), которые осуществляют поддержку этих дешевых, но очень непростых микро ПК.
В интернете есть разные описания подключения 3.5" сенсорного экрана к Orange PI род управлением той или иной версии LINUX. Поэтому в настройках, как говорится, имеются нюансы, о которых я постараюсь написать далее.
Проектирую простые модели для принтера я в TINKERCAD
Модель корпуса положил туда
Итоги
Всех с первым днем весны!
Начну с характеристик модуля
- LCD дисплей 3.5″ (49 x 73.4 мм) со светодиодной подсветкой
- Разрешение 340*480 пикселей (8:5)
- Количество поддерживаемых цветов — 65536
- Сенсорная резистивная панель
- Интерфейс SPI
- Подключение — двухрядный разъем PBD-26 (совместим с Raspberry PI 40-пин и 26-пин разъемом)
- Габариты 56.6 x 97.6 x 20.8 мм
Внутренний мир сенсорного дисплея
Модуль дисплея состоит из собственно экрана 3.5″ на встроенном контроллере ILI9486 с параллельным 60-пиновым гибким интерфейсом. На основной плате стоят сдвиговые регистры 74-й серии, превращающие параллельный интерфейс в SPI
Там же на плате находится контроллер сенсорного экрана XPT2046 и 3.3В стабилизатор AMS1117
Ну и двухрядный разъем PBD-26 для подключение к 26 и 40-пиновому GPIO Rapberry PI.
Комплектность, внешний вид, подключение
Доехал дисплей до Перми всего за 15 дней. Оказывается, случаются и добрые чудеса у Почты России. Упаковка — двойная картонная коробочкаВ комплект поставки входит сам дисплей,CD-диск (о где же взять читалку?) с драйверами для Raspberry PI и стилус для резистивного сенсорного экрана.
Размеры дисплея соответствуют габаритам плат микрокомпьютеров — Raspberry PI, Asus Tinker Board, Orange PI (PC)
Разъем позволяет подключить к любому одноплатнику, совместимому с Raspberry PI 40 пин или 26 пин. Orange PI PC встает идеально прямо над платой
У Orange PI ZERO разъем повернут на 180 и экран превращает его в этакого монстр
Винить инженеров OPI ZERO не нужно.Такое размещение гребенки GPIO на микро ПК сделано для того, чтобы экран (и другие подобные платы) можно было использовать совместно с платой расширения, добавляющей к микрокомпьютеру два USB, микрофон, звуковой выход и ИК порт.
Купленный дисплейный модуль «заточен» под Raspberry PI и работает с этими компьютерами «практически из коробки». На диске имеются «драйвера» — файлы для UBOOT, ядро с модулями и конфигурационные файлы, которые нужно просто переписать поверх чистого Raspbian.
Для Orange PI такой поддержки нету и приходится уповать на сторонних разработчиков LINUX (ту же команду Armbian), которые осуществляют поддержку этих дешевых, но очень непростых микро ПК.
В интернете есть разные описания подключения 3.5" сенсорного экрана к Orange PI род управлением той или иной версии LINUX. Поэтому в настройках, как говорится, имеются нюансы, о которых я постараюсь написать далее.
Настройка сенсорного экрана на Orange PI PC
Первым делом качаем и устанавливаем последнюю версию Armbian для нашей версии Orange PI PC с официального сайта. Я остановился на дистрибутиве Armbian Stretch 5.69 на базе ядра 4.19.13.
Сразу ставим пакет для сборки ядра 4.19.13
apt-get upgrate делать не рекомендую, так как в последних обновлениях есть проблемы со скриптами для сборки модулей ядра
Модуль экрана fb_ili9486 уже давно есть в Armbian (в других дистрибутивах не смотрел). Нужно только правильно указать, как подключен экран.
Включаем SPI шину. Для этого в файле /boot/armbianEnv.txt добавляем следующие строки:
RESET на OPI PC подключен к GPIO2, а DC к 71. Остальные GPIO — SPI интерфейс. Старт модуля ядра выглядит следующим образом
Параметр rotate=90 говорит о повороте изображения на экране на 90 градусов. Можно заменить его на 180 и 270.
Для того чтобы модуль с заданными параметрами стартовал при запуске Linux — создаем файл загрузки модулей /etc/modules-load.d/98-fbtft.conf
И файл с параметрами модуля fbtft_device /etc/modprobe.d/fbtft.conf
Теперь на нашем экранчике мы видим текстовую консоль загрузки системы Armbian а в журнале загрузки ядра по команде dmesg видим что наш экран система опознала
Поддержка графического режима на TFT экране производится установкой пакета
и создания файла /usr/share/X11/xorg.conf.d/99-fbdev.conf
С сенсорным экраном все немного сложнее — готовых модулей-драйверов нету, придется их собирать из исходников. Для этого мы и устанавливали пакет для сборки модулей ядра
Качаем драйвер тачскрина ADS7846, совместимого с микросхемой XPT2046 на нашем модуле
Создаем файл Makefile с следующим содержимым:
После этого запускаем сборку и установку модуля
Похожим образом скачиваем, собираем и устанавливаем модуль ads7846_device:
Теперь можно загрузить модуль вручную и посмотреть dmesg
Проверить работу сенсорного экрана можно командой с выбором нашего устройства (в моем случае /dev/input/event2)
Теперь если мы прикоснемся к экрану — на экран выведутся координаты точки и другие параметры
Осталось добавить поддержку сенсорного экрана при загрузке системы. Для этого создаем файл загрузки модулей /etc/modules-load.d/99-ads7846.conf
И файл параметров модуля ads7846_device /etc/modprobe.d/ads7846_device.conf
Теперь начинаются те самые нюансы, с которыми пришлось поразбираться:
В графическом режиме у меня модуль не виделся утилитами xinput и xinput_calibrate. Иногда в системе устанавливался с каким то пакетом файл /usr/share/X11/xorg.conf.d/40-libinput.conf и сенсорный экран виделся системой, но ни в какую не хотел настраиваться
Создание файла /usr/share/X11/xorg.conf.d/99-calibrate.conf ничего не давало. Вернее, строка
в этом файле позволяла привести соответствие тачкрина с ориентацией экрана, а вот точная настройка положения указателя игнорировалась. xinput_calibrator давал при этом совершенно «левые» значения, которые находились далеко за пределом экрана.
Все оказалось просто — тачкрин работал через «мышиный» драйвер libinput вместо evdev, который должен работать по событиям нажатия на экран. Для его включения создаем файл /usr/share/X11/xorg.conf.d/45-evdev.conf со следующим содержимым
После перезагрузки драйвер заработал как нужно и стал брать все параметры калибровки из файла /usr/share/X11/xorg.conf.d/99-calibrate.conf как нужно
Если ваш экран не точно откалиброван, то просто запустите с консоли
и ткнув стилусом в четыре предложенные на экране точки получаете новые значения «Calibration». Чтобы каждый раз не перезапускать при калибровке XWindow можно устанавливать новые значение командой xinput
Пока разбирался со всеми этими настройками, нашел альтернативный способ калибровки тача. Все параметры можно указать при загрузке модуля ядра и не возиться с фалами /usr/share/X11/xorg.conf.d/
может кому пригодиться
Сразу ставим пакет для сборки ядра 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
может кому пригодиться
Настройка на Orange PC ZERO
Orange PI ZERO имеет SPI1 вместо SPI0 на GPIO экрана и сами GPIO имеют другие номера
В файле /boot/armbianEnv.txt прописываем SPI1
Строка запуска модуля будет выглядеть следующим образом
Параметр rotate=270 делает правильное положение картинки на экране при условии если контроллер снизу экрана
Обновление системы до нужной версии и сборка драйвера сенсорного экрана полностью идентична OPI PC. В строке запуска модуля добавляется только номер шины SPI
Все остальные настройки экрана и программ не зависят от аппаратного обеспечения и полностью идентичны с Orange PI PC
При таком неудачном размещении экрана и контроллера общие габариты получаются даже больше, чем у Orange PI PC и поэтому особого смысла использования платы ZERO я не вижу, так как ее единственное преимущество — габариты, здесь не используются
В файле /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 я не вижу, так как ее единственное преимущество — габариты, здесь не используются
Установка OCTOPRINT
В интернете пишут, что установка Octoprint на Orange PI ничем не отличается от установки на Raspberry PI, которая везде детально расписана, причем прямо для нашего дисплейчика. Но, как оказалось, все же есть отличие дистрибутивов Armbian и Raspbian, те самые «нюансы», которые здесь упомяну
1. Команда питона virtualenv в Armbian заработала только после следующего действия:
2. Браузера chromius при помощи которого выводится консоль Octoprint на экранчик в репозитарии Armbian нету. Можно установить chromius из другого репозитария
3. После установки Octoprint не захотели устанавливаться плагины, в частности TouthUI с интерфейсом для нашего дисплея. Помогла установка прав на каталоги Octoprint
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
Модель корпуса положил туда
Итоги
- Сенсорный дисплейный модуль 3.5" полностью оправдал мои ожидания
- Несмотря на то, что многие ругают Orange PI за их глючность, подобные железки вполне прикручиваются к этим недорогим микро ПК, хотя поддержка и коммьюнити у них значительно хуже чем у «малиновых друзей»
- Данный экран вполне может найти применения в автономных миниатюрных системах, например, как панель к умному дому
- При желании, данный модуль можно подключить у всевозможным Arduino/ESP (библиотеки готовые есть), но, на мой взгляд, применение будут довольно ограниченным из за низкой производительности и малому объему памяти указанных контроллеров.
А еще можно сделать маленький компьютер или телевизор для кота )))
Всех с первым днем весны!
Самые обсуждаемые обзоры
+57 |
2779
71
|
Можно ли прикрутить графическую оболочку для мультимедиа типа openelec/libreelic на Kodi? Хочу сделать из Orange pi hi-fi плеер. Вернее оболочку для подключения к ЦАПу.
Сам дисплей поднимается без проблем, а вот с тачем у меня глючило на этом ядре впоть до зависания системы.
Ну и KODI будет ли работать на 480x320 я не знаю. Запускал на телик с FullHD, а сейчас поставил H3droid.
Нормально работает
По поводу плеера вот не скажу. У меня цель — интерфейс IoT и Octoprint
Ну и настройка автологина здесь описана
Есть образы для Orange Pi Lite/Orange Pi PC/Orange Pi One.
А вообще… сенсорный дисплей полностью не не устроил. 1. разрешение маленькое, даже с touchui не очень удобно и постоянно надо скролить. 2. Тупит… в смысле отрисовка… хотя с включением DMA вроде бы как можно сделать и 25 кадров, но… Меня не устроили тормоза и да и сам сенсор далеко не идеал. 3. Сами апельсины надоели точить карты и сами по себе умирать временами. Итого через год был поставлен какой-то miniitx с AMD каким-то. А сейчас удалось на халяву урвать нетбук на атоме (не сильно старый) и перенсти все на него. Милейшее дело.
Из всего что реально нужно когда стоишь непосредственно перед принтером — 3 кнопки: загрузить филамент, извлечь филамент и опустить сопло на 0.1 мм ) все ))) Остальное либо с web'а с ББ, либо с OctoRemote на смарте. По сему городить это… не вижу смысла. Я убрал через месяц наверное.
По поводу поиграться и забыть — так оно и бывает обычно.
Если надоест — наработка в умный дом пойдет, как панель маленькая для MajorDoMo
Как прикручу, выложу на samopal.pro
Установил 32 битную плату mks sbase 1.3 и тач дисплей mks 35. Так же стоит raspberry pi 3+ с hd камерой и кастомное охлаждение в виде улитки. На стол положил стекло, заменил все моторы на 1.7А, на всех моторах демпфера, сейчас едет hotend и bltouch. Выше коммент про слайсер в октопринт — фигня полная, старая версия cura и подойдет разве что совсем для простых моделей. Апгрейд плат и экрана вышли мне +200 руб, т.е. мне доплатили за апгрейд)) Родная плата creality 1.1.3 с монохром экраном стоит дороже чем 32 битная sbase с тач экраном :)
На каждый есть «оригинал» и «подделки» )))
Но логотип все равно другой, так что подделка
На скриншоте заказа тоже без провода (вернее провод на другой стороне)
Но я думаю, что разницы нет никакой, если чип сенсора и контроллер экрана одинаковые
Собсно миниписюк можно так в корпус убрать.
В принципе, можно DTR попробовать в параметрах порта отключить командой stty. Но это каждый раз придется делать
а во вторых — у меня принтер стоит в подвале, и включен через смарт wifi розетку, которая включается/выключается удаленно. процес можно контролировать через вэб камеру которая подключена в тот же расбери пай.
да и передергивать флешку туда-сюда — это трэш. Намного проще прямо из Куры печатать через Октопринт.
[ 0.000000] Kernel command line: root=UUID=df23b698-dcd8-45f2-a65d-f60ea247be6b rootwait rootfstype=ext4 console=ttyS0,115200 console=tty1 hdmi.audio=EDID:0 disp.screen0_output_mode=1920x1080p60 panic=10 consoleblank=0 loglevel=1 ubootpart=41fa557d-01 ubootsource=mmc usb-storage.quirks=0x2537:0x1066:u,0x2537:0x1068:u sunxi_ve_mem_reserve=0 sunxi_g2d_mem_reserve=0 sunxi_fb_mem_reserve=16 cgroup_enable=memory swapaccount=1
[ 5.956383] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
В логах X11 — Fatal server error: (EE) no screens found(EE)
Ну и при попытке найти /dev/fb0 или fb1 говорит, что нет ничего такого. Ни файла ни каталога. Модули ядра вроде загружены
fbtft 28672 0 — Live 0xbf826000 ©
Что делать?..
что нажать? :)