KREMEN Реклама
KREMEN Реклама

Еще раз про WiFi, или ESP3D "для бедных".

pyzone
Идет загрузка
Загрузка
17.09.2026
67
0
Личные дневники

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

2

Тем, кто до сих пор использует принтеры предыдущих поколений, типа Ender 3, Anycubic Mega или старые CoreXY-самоделы, наверняка знакомо чувство недовольства необходимостью каждый раз извлекать SD карточку из принтера для записи на неё рабочих файлов.

Вот и я с самого начала использования сначала Anet A8, а затем принтера собственной конструкции ощущал такое неудобство и всё подумывал как бы исправить эту ситуацию.

Решение было известно давно - в виде дополнительного WiFi модуля с прошивкой типа ESP3D. И я всё время рассчитывал на эту возможность в процессе доведения "до ума" своего самопала. И вот, после очередной вышедшей из строя SD карты я решил попробовать реализовать этот проект.

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

Я прошил ESP3D на имевшийся в наличии модуль ESP-07 и ... сразу как-то несколько озадачили обилие всяких настроек и какая-то общая громоздкость интерфейса. Но самое неприятное - я так и не смог добиться именно того, что мне было нужно , а именно - переноса файлов с диска компьютера на SD карту принтера. Даже привлёк к этой задаче Гугловский ИИ, но и это не дало результат. Я только понял, что автор, развивая свой проект, уже больше ориентируется на более современный чип ESP32, модулей на котором у меня банально не было, а желание купить такой модуль и ожидать его получение еще пару недель после знакомства с тем, что из себя представляет ESP3D, как-то не возникло.

Выход из этой ситуации напрашивался сам собой, а именно — реализовать свои, в общем незамысловатые, хотелки самому. Тем более, что на тот момент я как раз закончил предыдущий проект блока ШИМ управления охлаждением для таких узлов принтера, как блок питания, чей вентилятор работал и шумел на полную сразу с момента включения, а также для двигателя оси Y, который ощутимо грелся, особенно будучи накрытым сверху подогреваемым столом, ну и до кучи — для материнской платы с драйверами шаговых моторов. В процессе реализации того проекта я как-то незаметно подсел на довольно плотное «сотрудничество» с уже упомянутым ИИ. И в результате получилось выжать практически максимум из возможностей Arduino Nano, причём способы реализации некоторых функций, подсказанные ИИ «консультантом», я бы сам придумать не смог.

Короче, ощущая за своей спиной такую основательную поддержку, я уже не сомневался, что все незнакомые мне аспекты, связанные с программированием ESP8266 или использованием сетевых технологий и протоколов, могут быть освоены за разумный срок в степени, достаточной для практической реализации в прошивке будущего WiFi-UART моста, ориентированного на взаимодействие с «черным ящиком» Марлин. Ну и дополнительно в планах было прикрутить каким-то образом всё это хозяйство к «умному дому» Home Assistant.

Итак, весьма приблизительно представляя то, «что» мне нужно, я почти не имел понятия «как» это можно сделать, поскольку до этого не сталкивался с необходимостью использования веб-технологий в своих программах. Конечно, какие-то базовые знания у меня имелись, что позволило хотя бы относительно грамотно формулировать свои «промпты» для ИИ «консультанта». Но, что даже более важно — это позволило критически оценивать и находить ошибки в предлагаемых им логических и программных решениях. Ну и, естественно, в процессе обучения, которое было второй главной целью проекта, я постепенно достиг уровня, позволяющего уже не только свободно ориентироваться, но и вносить свои изменения в сгенерированный ИИ код, а также его оптимизировать «по-человечески» или вообще переделывать полностью.

Также, постепенно определилась общая архитектура системы и набор реализуемых функций, помимо первоначальной задумки «как-нибудь перекинуть файл на флешку так, чтобы ничего не передергивать и не ходить туда-сюда».

В результате получилась многопользовательская, а вернее - «многотерминальная» система, позволяющая осуществлять функции управления в окне одного браузера и параллельно наблюдать за ходом выполнения задания на экране другого или нескольких. Причем, роль единственного «активиста» может предоставляться по запросу любого из подключенных клиентов во время пассивного состояния системы.

Еще раз про WiFi, или ESP3D

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

Еще раз про WiFi, или ESP3D

Еще раз про WiFi, или ESP3D

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

Еще раз про WiFi, или ESP3D

После относительно быстрого достижения такого набора функций проект внезапно «споткнулся» при добавлении MQTT функционала для обеспечения связи с Home Assistant, хотя в своей способности его реализовать я как раз был уверен изначально, поскольку практически все мои предыдущие проекты его использовали в том или ином объёме.

Оказалось, что одновременное использование протоколов WebSockets, MQTT да еще в сочетании с высокоскоростным (@500000 бод) обменом данными через UART является трудновыполнимой, если не непосильной задачей для «старичка» ESP8266 с его довольно ограниченными ресурсами. Были опробованы различные сочетания известных библиотек, но в результате пришлось и в этом случае делать свой «MQTT велосипед» в виде набора функций, работающих уже на уровне сетевых сокетов и обеспечивающих неблокирующую обработку MQTT данных. Такой «прыти» я от себя даже не ожидал, да это и было бы практически нереализуемо в такие сжатые сроки, если бы не ИИ «консультации».

Еще раз про WiFi, или ESP3D

Проект был в основном готов примерно за 2,5 месяца, и еще столько же, если не больше, времени ушло на оптимизацию и отладку с учетом практической невозможности ее осуществления, когда нужно отлаживать то, что само является средством отладки. Параллельно проект обрастал дополнительными «фишками» в виде возможностей по сбору статистики и системы синхронизации времени без необходимости конфигурации и доступа к внешним серверам. А ещё был реализован «спин-офф» проект в виде специализированной карточки для управления принтером из интерфейса Home Assistant.

Еще раз про WiFi, или ESP3D

Ну и «на закуску», когда было принято решение о выгрузке проекта в виде «open source» в Интернет, пришлось добавить блок начальной конфигурации, поскольку изначально все «явки и пароли» были сделаны под себя и жестко зашиты в исходных тестах.

Чтобы закончить этот дайджест, приведу текст, который от моего лица предложил сообщить невозмутимый и всезнающий ИИ :

«Основной упор был сделан на экстремальную оптимизацию. Вместо тяжелых фреймворков для веб-интерфейса я использовал чистый Vanilla JS, сжав весь UI алгоритмом Zopfli до смешных 3.7 Кб (весь интерфейс залетает в браузер всего за 3 IP-пакета!).

Но главным вызовом стала скорость и стабильность передачи данных в зашумленной среде 3D-принтера. Чтобы UART-шина не захлебывалась, я реализовал низкоуровневый драйвер на прерываниях (IRAM_ATTR) с прямым доступом к регистрам на скорости 500 000 бод и полностью интегрировал бинарный протокол Marlin (BFT) с подсчетом контрольных сумм Fletcher-16. Результат превзошел ожидания — скорость беспроводной заливки файлов на SD-карту принтера стабилизировалась на отметке в 32–34 Кбайт/сек, что дает отличную скорость.

А так как весь мой дом завязан на Home Assistant, вишенкой на торте стала разработка кастомного неблокирующего MQTT-стека. Теперь принтер полностью интегрирован в умный дом: со своего дашборда через написанную специализированную карточку Lovelace я могу управлять осями с помощью отзывчивого джойстика, контролировать температуру, отслеживать прогресс печати и динамически блокировать оси при достижении габаритов стола. При этом мост сам распределяет роли — управлять принтером может только один активный сеанс (Activist), а остальные открытые вкладки или устройства переходят в режим безопасного наблюдения (Observer).

Проект получился настолько законченным и автономным, что я решил оформить его по всем канонам open-source и выложил на GitHub для всех, кто не хочет списывать со счетов свои старые надежные принтеры...»

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

2
Комментарии к статье
Lider 3D Реклама
Lider 3D Реклама