3D-принтер Flyingbear GHOST6 построен с использованием 3.5" TFT жк-дисплея с резистивным сенсором прикосновений MKS TS35-R V2.0.
В отличие от раннего собрата GHOST5, в данном принтере дисплей подключается к основной плате двумя десятиконтактными шлейфами с разъёмами типа IDC. Используется распространённая среди 3D-принтеров цоколёвка EXP1-EXP2, известная с RepRapDiscount GLCD 128*64 и символьных ЖКИ
TFT-дисплей в интерьере
На момент написания руководства цены одноплатных компьютеров RaspberryPi сохраняются спекулятивно высокими, и наиболее популярным SBC для установки Klipper на Flyingbeag GHOST6 является компьютер Orangepi 3 LTS. Однако, при наличии в запасах RaspberryPi (а также RaspiCam), использование "малинки" по-прежнему актуально.
Основной процесс подключения Klipperscreen на RaspberryPi был расписан здесь https://github.com/willngton/3DPrinterConfig/blob/main/mks_ts35/mks_ts35_guide_archived.md
В оригинальном описании присутствуют неточности из-за опечаток, мигрирующих из источника в источник, отличия конфигурации экрана и устаревания информации. Данное руководство призвано исправить вышеупомянутые ошибки.
Убедитесь, что установлены klipper, moonraker, fluidd/mainsail и klipperscreen
ВНИМАНИЕ! Нумерация контактов в разъёмах IDC-10M, распаянных на плате, НЕ СОВПАДАЕТ с традиционной, принятой для шлейфов и определяемой ключом на ответной части IDC10-F. Далее в приведённой таблице используется именно "неправильная" нумерация.
Сверяйте с иллюстрацией, и дважды перепроверяйте по шинам питания, особенно, если не используете готовые наборы DUPONT, а делаете самодельный кабель IDC-10x2->BLD40.
Расположение подключаемых пинов
Таблица соединений
EXP1 | цепь | GPIO | RPI |
---|---|---|---|
1 | BEEP | nc | nc |
2 | BTN_ENC | nc | nc |
3 | LCD_BLK | GPIO18 | 12 |
4 | LCD_RST | GPIO25 | 22 |
5 | TOUCH_LCD | GPIO7 | 26 |
6 | TOUCH_INT | GPIO23 | 16 |
7 | LCD_CS | GPIO8 | 24 |
8 | LCD_RS | GPIO24 | 18 |
9 | GND | GND | 14 |
10 | BOARD_5V | 5V | 4 |
EXP2 | цепь | GPIO | RPI |
---|---|---|---|
1 | MISO | GPIO9 | 21 |
2 | SCK | GPIO11 | 23 |
3 | BTN_EN1 | nc | nc |
4 | nc | nc | nc |
5 | BTN_EN2 | nc | nc |
6 | MOSI | GPIO10 | 19 |
7 | nc | nc | nc |
8 | RESET | nc | nc |
9 | GND | GND | 25 |
10 | BOARD_3.3 | nc | nc |
Выводы GPIO14 и GPIO15 сохранены незадействованными для подключения через UART1 управляющей платы (Klipper-MCU)
EXP2_10 (BOARD_3.3) на плате дисплея не подсоединён, дисплей использует собственный стабилизатор 3.3В
$ sudoedit /boot/config.txt
Убедитесь, что включён оверлей spi:
dtparam=spi=on
Закомментировать включение оверлея видеоускорителя (может встречаться не один раз, закомментировать все вхождения)
#dtoverlay=vc4-fkms-v3d
Вышеупомянутое руководство упоминает файл https://github.com/willngton/3DPrinterConfig/blob/main/mks_ts35/config.txt как образец. В файле есть ошибки, игнорируйте все строки, начиная с 72:
###### MKS TS35
...
Сверяться с этим файлом нужно в том случае, если ставите клиппер на чистый Raspbian, в образах FluidPi/MainsailOS лишние оверлеи отключены.
САМАЯ ВАЖНАЯ ЧАСТЬ:
добавить в конце /boot/config.txt параметры экранного буфера и настройки его трансляции через fbcp
hdmi_force_hotplug=1
hdmi_cvt=320 480 60 5 0 0 0
hdmi_group=2
#hdmi_mode=1
hdmi_mode=87
display_rotate=0x10002
dtparam=spi=on
dtoverlay=tinylcd35,rotate=0,speed=36000000,touch,touchgpio=23,fps=10
Образец config.txt
Взять оверлей здесь: https://drive.google.com/file/d/1BjEr-IkiOSmBhzX91KLA9PSWtEvyiL5W/view?usp=sharing
$ sudo cp tinylcd25.dtbo.2 /boot/overlays/tinylcd35.dtbo
Информация устарела, на форуме RaspberryPi упоминается, что с октября 2020г правильный оверлей уже включён в состав свежих образов.
$ sudo apt-get install cmake xserver-xorg-input-evdev xserver-xorg-video-fbdev
$ cd ~
$ sudo git clone https://github.com/tasanakorn/rpi-fbcp
$ cd rpi-fbcp/
$ sudo mkdir build
$ cd build
$ sudo cmake ..
$ sudo make
$ sudo install fbcp /usr/local/bin/fbcp
$ cd ../..
// вряд-ли для ВСЕХ команд сборки необходимы root-права, надо проверить, хватит ли первого и последнего sudo
создать юнит для fbcp
$ sudoedit /etc/systemd/system/fbcp.service
[Unit]
Description=fbcp
After=KlipperScreen.service
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/usr/local/bin/fbcp
[Install]
WantedBy=multi-user.target
разрешить запуск сервиса
$ sudo systemctl enable fbcp.service
$ sudo apt-get install xserver-xorg-input-evdev
ВНИМАНИЕ Все дальнейшие действия предполагают, что к одноплатнику НЕ ПОДКЛЮЧЕНЫ HDMI-монитор, клавиатура и мышь. Выполняйте все действия через ssh-соединение.
$ sudo reboot
После перезагрузки должен отобразиться KlipperScreen
Если на данном этапе вы видите консоль с приглашением залогиниться - поздравляю, вы, как и я, забыли установить klipperscreen (а заодно и не подтянулся X-сервер) Запускаем KIAUH и доустанавливаем. (инструкция по KIAUH выходит за рамки данного руководства)
Базовая (без выполнения калибровки) точность определения координат резистивного экрана, по субъективным оценкам, около 5%. Это означает, что большие контролы клипперскрина можно нажимать без риска ложных срабатываний, но работа с экранной клавиатурой будет вызвыать сложности. Улучшить соответствие экранных координат и координат сенсора можно при помощи калибровки.
Также можно попробовать сразу взять настройки из п.10 - сенсоры MKS имеют повторяемость лучше 1%
$ sudo apt install xinput-calibrator
Узнаём id устройства ввода, в нашем примере получили id=6:
$ DISPLAY=:0 xinput_calibrator --list
Device "ADS7846 Touchscreen" id=6
Вызываем утилиту калибровки, указав ранее полученный id
DISPLAY=:0 xinput_calibrator -v --device 6
[место для картинки] Поочерёдно стилусом касаемся 4х указанных точек, после чего получаем вот такой результат (коэффициенты "Calibration" будут отличаться в зависимости от конкретного экземпляра тачскрина):
DEBUG: XInputExtension version is 2.3
DEBUG: Skipping virtual master devices and devices without axis valuators.
DEBUG: Selected device: ADS7846 Touchscreen
...
DEBUG: Successfully applied axis calibration.
--> Making the calibration permanent <--
DEBUG: Found that 'ADS7846 Touchscreen' is a sysfs name.
copy the snippet below into '/etc/X11/xorg.conf.d/99-calibration.conf' (/usr/share/X11/xorg.conf.d/ in some distro's)
Section "InputClass"
Identifier "calibration"
MatchProduct "ADS7846 Touchscreen"
Option "Calibration" "165 3859 157 3848"
Option "SwapAxes" "0"
EndSection
Забираем в буфер обмена предложенный сниппет - строки Section "InputClass" ... EndSection включительно.
$ sudo mkdir -p /etc/X11/xorg.conf.d/
$ sudoedit /etc/X11/xorg.conf.d/99-calibration.conf
В открывшийся текстовый редактор вставляем строки из буфера обмена:
Section "InputClass"
Identifier "calibration"
MatchProduct "ADS7846 Touchscreen"
Option "Calibration" "165 3859 157 3848"
Option "SwapAxes" "0"
EndSection