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

Привет, сообщество!
Хочу поделиться проектом, к реализации которого подтолкнула обычная лень — надоело каждый раз бегать с 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 и, конечно же, звездочкам на гитхабе от тех, кто ценит стремление выжать максимум из базовых микроконтроллеров!

Привет, сообщество!
Хочу поделиться проектом, к реализации которого подтолкнула обычная лень — надоело каждый раз бегать с 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:
Буду рад конструктивной критике архитектуры, обсуждению битовых масок UI и, конечно же, звездочкам на гитхабе от тех, кто ценит стремление выжать максимум из базовых микроконтроллеров!