вторник, 26 января 2021 г.

Прозрачный настраиваемый мост wifi-uart на esp8266, со встроенным эмулятором терминала

Предисловие

В бытность мою инженером связи, мне часто приходилось настраивать различное оборудование. Зоопарк из коммутаторов различных производителей, телефонные станции и прочее. Первоначальную настройку на коммутаторах удобнее делать подключившись через rs232, шнурком с преобразователем COM-USB к ноутбуку. Однако этот кабель не всегда удобен. Бывали ситуации когда ты в подвале (шкафы с оборудованием, в сетях ДРС которые я обслуживал, находились именно там), пытаешься стоя одной рукой держать ноутбук, а другой печатать, а короткий кабель соединённый с коммутатором не способствует удобству. Или зимой в минус 25 приходилось стоять возле базовой станции с ноутбуком в такой же позе. Вместо того чтобы сидеть в тёплой машине, припаркованной в 20 метрах. Предвидя упрёки в комментариях, о том что оборудование настраивать надо уделёно, скажу что эти случаи были аварийными (оборудование не в доступе) и оптимально было действовать именно так (сроки устранения повреждений не резиновые).

В общем тогда я прямо таки мечтал о беспроводном удлинителе 232-ого интерфейса. И на то время у китайцев существовали такие приблуды. Но, во первых дорого, во вторых громоздко и не автономно (был отдельный БП на 9-12В). И вот прошли годы, я работаю в другой области и с оборудованием связи имею мало общего. Но иногда с настройкой коммутаторов всё-же приходится сталкиваться. Тут заходя в очередной раз на mysku.ru вижу акцию на отладочную плату TTGO T-OI с микроконтроллером esp8266 за 1 доллар. Заказав такую халяву, я начал думать что бы с ней такого полезного сделать. Собирать очередную метеостанцию не особо хотелось. И тут мне вспомнилась идея беспроводного преобразователя, хотя сейчас полно аналогичных решений и алишке, и даже есть такие вещи как Air Console с впечатляющим функционалом и не менее впечатляющей ценой. Но было интересно реализовать самому, попрактиковаться, так сказать, ведь такое хобби приносит море удовольствия.

Аппаратная часть

Краткие характеристики модуля TTGO T-OI со страницы продавца:
Спецификации оборудования 

Чипсет:                 ESP8266EX
Флэш-память:            4 Мб 
Размер:                 43,96x25,63x20,80 мм
Вес:                    7,87 г.
Питание:                MicroUSB 5V/Батарея 16340 3,7V
Органы управления:      Кнопка reset, переключатель питания
Разьемы:                Micro USB, Grove, IPEX(внешняя антенна)
Живые фото: Распиновка модуля:
Данный модуль привлекателен тем что в нём встроена зарядка для лития и держатель для аккумуляторов формата 18340. Что без лишних телодвижений делает устройство автономным. Для включения отладочной платы служит переключатель в правом нижнем углу. Еще одним достоинством является совместимость по пинам с Wemos D1 Mini, что даёт возможность подключать к TTGO все шилды от Mini. Этим я и решил воспользоваться, накидав в Easy EDA шилд, преобразовывающий uart в rs232:
Так-как напряжение логических уровней на esp8266 3.3В, то в качестве преобразователя в/из интерфейса rs232, в место традиционного MAX232 использовал микросхему MAX3232 в корпусе SOIC-16, которая как раз работает с этим напряжением. Далее, мне понадобилось 5 конденсаторов на 100 нанофарад и резистор на 1 килоОм со светодиодом. Всё в SMD исполнении, типоразмера 0805. Еще понадобится разъем DRB- 9MA.
Компоненты списком:
С ЛУТом возиться не хотелось, поэтому заказал её изготавливание в Китае. Шилд занимает GPIO13, GPIO15 пины, для работы с uart'ом. Отладочная информация, сыпется в GPIO2. Особенностью esp8266 является то что она позволяет переназначать аппаратный uart с ножек GPIO1 и GPIO3 на GPIO15 (TX) и GPIO13 (RX), вызовом метода Serial.swap(). Преимуществом такого трюка является то, что подключение не мешает перепрошивке модуля, а так-же в порт не сыпется отладочный мусор. Однако я оставил возможность назначить стандартные GPIO для uart. Для этого необходимо перерезать старые дорожки и напаять перемычки на TX и RX на нижней стороне платы. Фото шилда, собранного "будерброда":

Программная часть

Я начал с изучения того что уже написано в данной области. Оказывается в пакете поставки с esp для Ардуино уже лежит пример кода для соединения устройства и хоста, (например телефона или ноутбука) через wifi по telnet. Пример так и называется WiFiTelnetToSerial. Взяв его за основу, я написал веб-интерфейс для настройки соединения и точки доступа. С сохранением настроек в во флеш-память. А так-же воспользовавшись библиотекой jQuery Terminal, реализовал эмулятор терминала, прямо в браузере. Общение web-терминала с преобразователем происходит через web-sockets. Сам код можно скачать на гитхабе, ссылки будут к конце статьи. Писался он с помощью PlatformIO . При компиляции нужно учитывать тот момент что для взаимодействия с файловой системой esp8266, я воспользовался библиотекой LittleFS в место привычной многим SPIFFS. Дело в том что SPIFFS признана устаревшей и рекомендуется переходить на LittleFS. В связи с этим у меня возникли некоторые проблемы с библиотекой FTP, пришлось пройтись по её исходникам и переписать все вызовы с SPIFFS на LittleFS. У обоих библиотек практически совместимый API, так что такой простой заменой всё и решилось. При подаче питания esp создаёт точку доступа WirelessTerminal с паролем 123456789. Так-же запускаются web-сервер на 80 порту. И ftp-сервер на 21 (нужен для доступа к флеш памяти контроллера, в основном для отладки). При заходе на ip-адрес 192.168.4.1 (по умолчанию) через браузер, появляется страница настроек:

Тут возможно настроить параметры соединения, и точки доступа. Для того чтобы подключится к устройству по 232 интерфейсу подойдёт любой эмулятор терминала (я по старинке пользуюсь HyperTerminal), либо воспользоваться web консолью, нажав на кнопку RUN TERMINAL в главном окне.


Примеры сессий

Для телефонов на андроид подойдёт бесплатный Serial WiFi Terminal из Google Market. Так-же оставлю несколько скриншотов того как выглядит интерфейс на телефоне:

Выводы

По моему мнению получилась хорошая тренировка для мозгов, а как-же полезная в хозяйстве сисадмина/инженера устройство, для желающих повторить оставляю ссылки на исходники:
Проект шилда в easyeda: https://easyeda.com/clericJ/wemos-d1mini-rs232shield
Программная часть: https://github.com/clericJ/wifi-terminal

1 комментарий:

  1. Блин и как ты до этого додумался. Вообще молодчина, читаю статьи и поражаюсь твоими возможностями. Спасибо за интересную информацию!

    ОтветитьУдалить