Наконец-то отпуск! Наконец-то можно реализовать мечту, которая лежала на полке аж с марта! Пока она реализована на 60%, но объём материалов таков, что лучше первичные мысли вылью в текстовый формат.

   Итак. Как уже отмечалось, по работе я участвую в разработке, так сказать, операционной системы. В общем, RTOS (это ОС для микроконтроллеров). Само собой, мы прорабатывали её дружбу с WiFi. Именно тогда я познакомился с микросхемой ESP8266 в целом и модулем ESP12 в частности. Само собой, мне захотелось приладить такой же модуль к моему многострадальному MZ3D-256. Стал я рыться, и нашёл, что люди зачем-то переделывают прошивку Marlin для того, чтобы она начала дружить с этим модулем. Собственно, темой сегодняшнего трактата будет как раз доказательство того, что это – совершенно не нужное занятие.

   Нет, разумеется, никто не запрещает делать правку прошивок. Можно ещё разработать собственное ПО для печати через WiFi. Это всё можно, но только если ты – большая фирма, у которой имеются ресурсы для того, чтобы всё это сделать. А у любителей (вряд ли этот блог читают представители больших контор по производству принтеров) таких ресурсов нет. Вон, даже мне пришлось ждать 4 месяца, чтобы нашлось время хоть что-то сделать.

   Начнём с того, что некоторые используют ESP8266, как внешний модем, подавая на него AT-команды с центрального процессора. Робинзон Крузо, было дело, изготавливал доски при помощи рубанка. Одно дерево – одна доска. Но у него не было особого выбора. У нас же выбор есть – в этот модуль вполне можно заливать собственные «прошивки». Вообще, официально считается, что для их разработки нужно добыть SDK, для чего следует подписать с производителем микросхем договор NDA. Если полазать по Гуглю подольше, то этот SDK можно найти, но инструкция по установке компилятора под Windows такова, что я даже не рискнул вчитываться в неё (она занимает несколько экранов). Но если порыскать ещё чуть-чуть, то можно найти вот такой замечательный сайт - http://esp8266.ru/arduino-ide-esp8266/

   Там рассказывается, как можно нажать в среде разработки Arduino несколько кнопок, затем – подождать, пока скачается примерно 150 мегабайт всякого барахла, после чего появится не просто возможность писать свои программы под этот модуль, а ещё и делать это, максимально совместимо с библиотеками Arduino.

   Итак. Теперь модуль WiFi станет не ведомым, а ведущим. Никаких AT-команд. Он сам будет решать, что ему делать, а когда надо – слать в COM порт то, что он сам захочет. Мы вполне можем прошить в него свою логику, а его линии UART (TxD и RxD) подключить вместо переходника USB-COM, стоящего на плате в принтере (я не рассматриваю, как это сделать – у меня эта плата уже заменена на ARMовскую, но это точно возможно).

   Отлично. Но как нам объяснить модулю, в какую беспроводную сетку ему следует включиться? Это-то всё-таки придётся прописать в основной прошивке? А вот и нет. Смотрим замечательное кино

   https://www.youtube.com/watch?v=caMpA-wsYLU

   Потом качаем библиотеку WiFiManager и включаем её в проект. Теперь, если модуль не видит своей любимой сетки, он переходит в режим точки доступа (да, он и так умеет!). И у меня дома появляется новая беспроводная сеть

yes3d-yes3d-1.png

   Подключаемся к ней. Входим на адрес 192.168.4.1 и попадаем на замечательный сайтик

yes3d-yes3d-2.png

   Info – там можно посмотреть MAC-адрес модуля, чтобы прописать его на своём роутере, если в том имеется «белый» список

yes3d-yes3d-3.png

   Ну, а по кнопке Configure (или Configure No Scan, если SSID не вещается в эфир) можно указать имя сети и пароль

yes3d-yes3d-4.png

   Вуаля! Теперь этот модуль будет сам подключаться к нашей сети. Можно возвращаться в неё.

   Однако, какой модулю назначился IP адрес? Уж это-то точно будет нужно отображать в основной прошивке? Нет! Не нужно! Есть целых два решения. Первое – протокол mDNS. Его реализация входит в комплект поставки среды разработки. Этот протокол позволяет задать имя модуля в формате вида mz3d.local. Жаль только, что в Windows этот протокол надо ставить отдельно, а мне это делать лень! Но есть второе решение – протокол SSDP. И он тоже входит в комплект поставки среды разработки. Про него можно посмотреть в том же фильме, что и про WiFi Manager. А кому жалко времени – покажу картинки. В сетевом окружении появляется новая запись

yes3d-yes3d-5.png

   Если посмотреть её свойства, то можно увидеть много интересного. IP адрес внизу тоже фигурирует

yes3d-yes3d-6.png

   Но он, собственно, не нужен. Достаточно дважды щёлкнуть по устройству, как его страница сама откроется в браузере

yes3d-yes3d-7.png

   Собственно, вот… 

   В комплекте поставки имеется пример SDWebServer – http сервер, страницы которого хранятся на SD-карте, припаянной к контактам модуля. Очень удобная штука. На этой же SD карте можно хранить файлы GCode для печати, но это – тема отдельного блога.

Заключение

   В статье показано, что использование современных технологий позволяет подключить WiFi модуль в систему, без какой-либо правки основной «Прошивки» 3D принтера. Модуль будет заменять собой переходник USB-COM. Основная «прошивка» просто не будет догадываться, откуда в неё приходят команды. При этом согласование модуля с беспроводной сетью может быть проведено через WEB интерфейс, предоставляемый самим модулем, а определение IP-адреса – либо по протоколу mDNS, либо – SSDP (модуль может реализовывать оба протокола одновременно). Всё описанное, а также поддержка протокола http и работа с SD картой либо уже реализовано в библиотеке, прилагаемой к среде разработки, либо может быть скачано из Интернета. Программирование же целевой части кода осуществляется с использованием библиотек, максимально похожих на библиотеки Arduino. Всё это позволяет легко добавлять поддержку WiFi в любой 3D принтер, не тратя сил на его модификацию, а сосредоточиться только на добавлении нового узла.

C уважением В.Ш.