Marlin_WiFi_Bridge — WiFi-UART мост на ESP8266

pyzone

✩✩✩✩✩✩✩
29 Янв 2025
1
0
Marlin_WiFi_Bridge — Асинхронный WiFi-UART мост на ESP8266 (WebSockets, BFT для загрузки файлов на SD, UART 500k бод, MQTT-стек на сокетах LwIP, интеграция с Home Assistant)
web_ui_3.png ha_card.png

Привет, сообщество!
Хочу поделиться проектом, к реализации которого подтолкнула обычная лень — надоело каждый раз бегать с SD-картой от компьютера к 3D-принтеру. В итоге это вылилось в создание жестко оптимизированной прошивки для «старичка» ESP8266, проходившее в том числе с активным использованием ИИ-консультаций. Проект полностью открытый.
Marlin_WiFi_Bridge — это легковесный асинхронный WiFi-UART мост, разработанный для взаимодействия с «черным ящиком» прошивки Marlin на принтерах предыдущих поколений (Ender 3, Anycubic Mega, старые CoreXY-самоделы), где устанавливать Klipper избыточно и накладно, и обеспечивающий интеграцию принтера в сеть при затратах не более 2$. Таким мог бы стать ESP3D, если бы его автор не увлёкся "тяжелым машиностроением".
---
🛠 Ключевые возможности и технические решения.
Скоростной UART-драйвер (500 000 бод) и передача бинарных данных :
Для обеспечения высокоскоростной поддержки UART реализован низкоуровневый драйвер с прямым доступом к регистрам. Полностью интегрирован бинарный протокол Marlin (BFT). Скорость беспроводной заливки файлов на SD-карту принтера стабильно держится в районе 32–34 Кбайт/сек.
Неблокирующий MQTT-стек на низкоуровневых сокетах LwIP :
Попытки использовать готовые библиотеки MQTT совместно с WebSockets и плотным UART-потоком намертво вешали одноядерный ESP. В итоге был написан свой «MQTT-велосипед» — побайтовый автомат сборки-разборки пакетов, работающий напрямую на уровне сокетов LwIP. Память не течет, Wi-Fi не отваливается при 100% утилизации UART.
Экстремальная оптимизация WebUI (3.7 Кб Gzip) :
Никаких тяжелых фреймворков. Чистый Vanilla JS, написанный в аскетичном стиле. Весь интерфейс со встроенными стилями сжат Zopfli-gzip до ~3.7 Кбайт и залетает в браузер клиента всего за 3 IP-пакета.
Многотерминальность и разделение ролей :
Система поддерживает параллельное подключение нескольких клиентов. Сервер на лету распределяет роли: управлять принтером и слать команды может только один активный сеанс (Активист), а остальные автоматически переходят в режим безопасного наблюдения (Наблюдатель) с трансляцией лога и возможностью при необходимости самим получить роль Активиста .
Интеграция в Home Assistant :
Поддержка механизма MQTT Discovery, автоматически регистрирующего устройство в среде умного дома Home Assistant для публикации текущих значений основных параметров 3D принтера.
В качестве сопутствующего проекта разработана специализированная JavaScript-карточка HA Lovelace. Прямо из интерфейса HA доступен джойстик осей, управление нагревом, G-code макросы и динамическая блокировка движений при достижении габаритов стола.
И кроме того.. :
* Механизм синхронизации системного времени, не требующий предварительной настройки.
* Система сбора статистики работы моста.
* Несложный процесс конфигурации.
* Доступность отладочной информации по всем аспектам работы моста.
* Обновление прошивки OTA теми же средствами, что и передача рабочих файлов.
* Минимальное вмешательство в работу 3D принтера.
* Поддержка любых модулей на основе ESP8266.
* ..что-то ещё.
---
📦 Исходный код и репозиторий
Полный исходный код прошивки, описание аппаратного подключения модулей ESP-07/ESP-12 и подробный пошаговый гайд по интеграции в систему умного дома Home Assistant лежат в репозитории на GitHub:
👉 Marlin_WiFi_Bridge
Буду рад конструктивной критике архитектуры, обсуждению битовых масок UI и, конечно же, звездочкам на гитхабе от тех, кто ценит стремление выжать максимум из базовых микроконтроллеров!