Разрабатывая открытый проект 4-х экструдерного принтера Z-Bolt, мы столкнулись с проблемой выбора экрана для управления принтером. Из имеющихся экранов лишь решение от Duet Wifi умеет управлять более чем 2-мя экструдерами. Решение, мягко говоря, не бюджетное, да и интерфейс на любителя. Так что мы решили поискать альтернативный вариант с преферансом и куртизанками. Эта история о нем…
На просторах интернета существует масса информации о применении Octoprint. Чуть больше чем пол года назад и мы стали пользователями данного решения, сразу оценив его преимущества. Возможность управления принтером через веб-лицо, действительно трудно переоценить. У Octoprint множество плагинов, а главное для нас — Octoprint отлично управляется с количеством экструдеров, большим чем 2. Но оставалось решить еще один вопрос.
Многие любители Octoprint уверенно утверждают, что экран им больше не нужен от слова “совсем”, что это абсолютно лишняя часть принтера, которая им только мешает.
Однако я убежден, что есть и другая часть пользователей OctoPrint. У всех свои привычки и требования к повседневному использованию 3D принтера, и есть операции выполнять которые удобнее, имея экран:
- Замена филамента
- Калибровка уровня стола
- Запуск печати файла, который уже печатался раньше
- Включение преднагрева принтера
- Возможность увидеть статус печати
- …
Сейчас экраном по умолчанию в принтерах Z-Bolt является MKS TFT. Можно поставить TFT24, TFT32 или TFT35. Это хорошие экраны, но они не умеют интегрироваться с Octoprint. Если Octoprint запустил печать, экран об этом ничего не будет знать. Они используют разные хранилища файлов и т.д. А еще экраны MKS TFT не хотят работать с 3х- и более -головыми 3д принтерами.
Передо мной обозначилась цель найти/сделать/настроить экран для Octoprint, способный управлять более чем 2-мя экструдерами.
Погуглив немного я наткнулся на плагин TouchUI.
Первое впечатление было: вот оно — решение!!!
Я сразу установил плагин и открыл Octoprint c телефона. Интерфейс TouchUI тупил :/. Иногда кнопки нажимались нормально, иногда тормозили, а порой и вовсе не нажимались с первого раза. С подключенного экране TouchUI вел себя также плохо как и с телефона.
Параллельно было найдено другое решение.
Описание обнадеживало, в отличии от TouchUI, это самостоятельное приложение, запускающееся без браузера, а значит требовавшее значительно меньше вычислительных ресурсов.
Установка и настройка проблем не вызвали. Интерфейс действительно работал намного предсказуемее и отзывчивее.
Но и тут не всё оказалось гладко. Приложение регулярно зависало при начале печати. На github’е нашелся issue по этой ошибке, созданный почти год назад и активно обсуждаемый, но не закрытый.
Основная проблема оказалось в том, что автор приложения, судя по всему, утратил к нему интерес и на данный момент больше не развивает.
Поскольку, на мой взгляд, приложение написано достаточно хорошо и имеет потенциал, было решено сделать “hard-fork” и взяться за проект основательно.
Вот что у нас получилось:
- Подобраны оптимальные экраны для проекта
- Сделан “hard-fork” от Octoprint-TFT
- Пересмотрен взгляд на программно-аппаратную архитектуру принтера
- Создана своя тема для интерфейса Octoprint
Но обо всем по порядку…
Выборы экранов
Мы начала с экрана TFT 3.5, который, мягко говоря, не выдержал никакой критики. Углы обзора никакие, картинка блеклая. Поэтому было решено подобрать более качественное решение.
Главными критериями были:
- IPS матрица
- размер 4 — 5 дюйма
- емкостной экран (желательно)
- приемлемая цена
В итоге остановились на двух вариантах:
1. Вариант попроще. 4’’ IPS резистивный Touchscreen
2. Вариант побогаче. 4.3’’ IPS емкостной Touchscreen
Оба экрана имеют разрешение 800х400. У обоих великолепная картинка, цветопередача и угол обзора. Главное их отличие — это емкостной touchscreen. К нему (как и ко всему хорошему) очень быстро привыкаешь и пользоваться им намного приятнее, чем резистивным. Тем не менее, экран с резистивным touchscreen’ом также вполне жизнеспособен.
Это Hard-Fork, детка!
Приложение было серьезно доработано. И почти перестало напоминать своего родителя. Поэтому (а также потому, что создатель Octoprint-TFT официально заморозил развитие своего детища) было принято решение сделать hard-fork и назвать новый проект Octoscreen.
- В первую очередь была полностью устранена проблема зависания экрана, которой страдал Octoprint-TFT.
- — Заметно изменился дизайн и компоновка:
- Экран научился понимать состояния принтера (ожидание/печать):
- Добавлена функция быстрого преднагрева/выключения нагрева по нажатию на значок экструдера или стола, при этом экран подсвечивает статус:
- Добавлен экран ручной калибровки стола:
- Пункт “Menu” вынесен на отдельный экран:
- Добавлена функция управления WiFi:
- Само приложение теперь поддерживает до 4-х экструдеров, собственно для чего оно и создавалось:
Скачать приложение и найти краткую инструкцию по установке можно с нашего GitHub.
Также есть подробная инструкция под экран 3.5, за что отдельное спасибо нашему соратнику Денису (@negativ72rus).
Пересмотр взглядов на программно-аппаратную архитектуру принтера или переобувание на ходу
Изначально мы планировали использовать Marlin в нашем многоэкструдерном принтере, однако в итоге выбор пал на Klipper. Причин несколько:
1. Одна из главных для нас, как разработчиков, причина — это его гибкость. Marlin и его “макаронный” код делают настоящим вызовом процесс внесения в него доработок, а тем более их дальнейшую поддержку.
Klipper в этом плане полная противоположность Marlin. Во-первых все конфигурирование Klipper вынесено из программного кода. Сам код хорошо структурирован. Но что самое важное, Klipper предусматривает модульность!!! Можно добавлять свою логику в прошивку, не внося изменение в ее ядро, и тем самым колоссально упрощать дальнейшую поддержку своего кода.
2. Всю настройку прошивки можно осуществляется прямо через web интерфейс OctoPrint. И при этом возможности настройки на много мощнее чем у Marlin или Smootheiware.
3. Как же тут не сказать о битах, за которыми в последнее время все гонятся )). Сама архитектура Klipper предполагает, что вычислительная нагрузка ложится на Raspberry PI. Функция платы управления MKS Gen L (в случае с принтерами Z-Bolt) остается в передаче сигналов к/от периферии (двигателям, сенсорам, нагревателям, элементам управления).
А ведь Raspberry Pi 3 Model B+ оснащен 64-х битным, 4-х ядерным чипом Broadcom BCM2837B0 A53 1.4GHz.
По сути Octoprint + Klipper, запущенные на Raspberry Pi + тот же MKS Gen L —
на порядок более функциональное и прогрессивное решение, чем Marlin, запущенный на каком-нибудь 32-х битном чипе.
Конфигурационные файлы для Klipper’а под принтеры Z-Bolt также можно найти тут.
Небольшой бонус напоследок!
Так же мы сделали свою тему для интерфейса Octoprint:
Шапку можно настроить нативным пунктом выбора цвета в разделе Appearance:
Инструкция как установить тему вы можете найти у нас на GitHub.
Пишите в комментариях, какие функции экрана вы считаете наиболее полезными и необходимыми к добавлению.
Всем добра, позитива и хорошего обдува нависающих элементов!
Автор: Алексей Квитинский