RSS блога
Подписка
Прозрачный настраиваемый мост wifi-uart на esp8266, со встроенным эмулятором терминала
Предисловие
В бытность мою инженером связи, мне часто приходилось настраивать различное оборудование. Зоопарк из коммутаторов различных производителей, телефонные станции и прочее. Первоначальную настройку на коммутаторах удобнее делать подключившись через rs232, шнурком с преобразователем COM-USB к ноутбуку. Однако этот кабель не всегда удобен. Бывали ситуации когда ты в подвале (шкафы с оборудованием, в сетях ДРС которые я обслуживал, находились именно там), пытаешься стоя одной рукой держать ноутбук, а другой печатать, а короткий кабель соединённый с коммутатором не способствует удобству. Или зимой в минус 25 приходилось стоять возле базовой станции с ноутбуком в такой же позе. Вместо того чтобы сидеть в тёплой машине, припаркованной в 20 метрах. Предвидя упрёки в комментариях, о том что оборудование настраивать надо уделёно, скажу что эти случаи были аварийными (оборудование не в доступе) и оптимально было действовать именно так (сроки устранения повреждений не резиновые).В общем тогда я прямо таки мечтал о беспроводном удлинителе 232-ого интерфейса. И на то время у китайцев существовали такие приблуды. Но, во первых дорого, во вторых громоздко и не автономно (был отдельный БП на 9-12В).
И вот прошли годы, я работаю в другой области и с оборудованием связи имею мало общего. Но иногда с настройкой коммутаторов всё-же приходится сталкиваться. Тут заходя в очередной раз на mysku.club вижу акцию на отладочную плату 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: easyeda.com/clericJ/wemos-d1mini-rs232shield
Программная часть: github.com/clericJ/wifi-terminal
Самые обсуждаемые обзоры
+59 |
1716
147
|
+35 |
2111
65
|
⚡️ Огонь
а так: берем HW VSP3 — Virtual Serial Port или скажем hub4com
они создают виртуальный порт, бэсссплатно. Но можно и платно — еще софтов 5 таких есть.
esp8266 прекрасно сможет перебросить tcp на uart, что дешево заменит железку от hw
насколько я понимаю рассматриваемая здесь реализация тоже это может
но есть пример попроще github.com/roboremo/ESP8266-WiFi-UART-Bridge
— и все это находиться за полчаса гуглом
— ГрушОвый
© Задорнов
Я прекрасно знаю другие истории и как это сделать дешево и сердито. Вопрос был к автору по поводу конкретно этой разработки. Спасибо за участие.
ЛЮБОЙ софт для последовательного порта работает с последовательным портом а не с telnet сервером через tcp и «гонит поток как есть» в com порт. А софт работающий по telnet c мостами не гонит туда поток «как есть» а гонит в соответсвии с интрепретацией IAC реализованной автором моста, или как минимум экранирует IAC. А поскольку стандартов на соответсвие команд IAC управлению последовательным портом нет — каждый автор городит свой огород и нет «универсальных» драйверов виртуальный_com_порт — telnet_сервер.
Так что, как вы выражетесь, БЕРЕТЕ свой бесценный совет и используете его со своим подходящим функционалом, т.к. лично мне ваши советы не нужны и я их у вас не просил и вопросов вам не задавал.
Учите уже матчасть.
мост то прозрачный, протокол телнет не прозрачный…
О чём и было написано в заголовке статьи.
Для того чтобы в этом убедиться, достаточно открыть исходники
особенно когда понаделали железок «попроще» и дергают пины порта прямо из под dos софтом без исходников и неизвестным автором который сам не помнит что и как работает
для случаев «по другому никак» можно и ноутбук с dos на помойке найти
У меня до сих пор стоит станция от Nokia. Она вообще требует COM на физическом первом порту. Ни каких эмуляторов или преобразователей не принимает. Только для неё имеется ноут с COM портом.
порт тотна самом деле переназначить можно в винде.
а она этому не обучена
и вывести их на отдельные кнопки в своём приложении с пасьянсом и стюардессами?
или на такой же порт на другой esp8266, и связать их по ESP-NOW?
берем модуль HC-05 или даже что нить на bluetoth LE
софты под андройд в принципе есть
android конектиться по синезубу к маленькой платке которая проводами подключена к разьему rs232
для чего на аддройде запускаться соотв. софт
куда уж проще
ну а в рассматриваемом же случае android коненктиться к маленькой платке через wifi
как дополнительная фишка при этом — софта даже ставить не обязательно, работает через браузер
под яблоко должен быть софт
даже под winmobile есть
разве что sailfish os (Аврора) обделена таким софтом (наверное)
Кому удобнее бегать с телефончиком и модуль подешевле, а кто готов платить любые деньги за оперативность и удобство. Приоритеты у всех разные.
838,22 руб. | HF Elfin-EE10A Wide Voltage 5~36V Serial Port RS232 to Ethernet Serial Device Server TCP/IP Telnet Modbus TCP Protocol
или чуть подороже но довольно таки солидные коробочки стоят порядка 2000 руб это сложно отнести «к ну очень дорогим»
habr.com/ru/post/425281/
https://aliexpress.ru/item/item/32815572991.html
выглядит как дешовый вариант для тех кто не хочет/не может память.
готовый вариант в коробке стоит куда дороже.
но как уже говорилось выше для этого нужен соотв. софт
и ещё один девайс с блютусом на котором будет запускаться этот софт.
с WiFi.mode(WIFI_AP); можно догадаться что здесь включаться режим точки доступа
режим клиента соответвенно WiFi.mode(WIFI_STA)
дальше подключаем wifi примерно так
/* Put your SSID & Password */
const char* ssid = «tfsi»; // Enter SSID here
const char* password = «1234567890»; //Enter Password here
WiFi.begin(ssid, password);
и ещё экранчик нужен будет
единственное надо только уточнить:
нужно ли чтобы платка лезла в интернет и оттуда погоду брала и на экранчике казала — таких не один проект.
либо ещё подключить разные датчики а то еще выкладывать с них температуру скажем на narodmon.
получаем детальную инструкцию с картинками www.instructables.com/id/Minitaure-Weather-Station-ESP8266/
хотя мне вот эта больше нравиться lastminuteengineers.com/bme280-esp8266-weather-station/
чётко есть эти два течения: кто тотхочет с интернета грузить, а кто-то хочет свой датчик. у обоих вариантов естьтсвои плюсы и недостатки. а можно и то и то.
на картинке скриншот вебморды часов. на экране самих часов вывожу только температуру. от вывода влажности отказался — бесполезно и не информативно.
Так же можно закинуть отправку на тот же narodmon. Уличные можно публиковать, домашние датчики не публиковать. Есть приложение для много чего.
Вроде бы как автор пишет все с нуля и может быть когда-нибудь будет новая версия.
И работает стабильно.
и конфигуратор прошивок где можно было «подключить» релешки
Я бы еще добавил настойку выходной мощности. Щас пишу часы на esp8266 и матричных дисплея, так путём уменьшения мощности до 10mW удалось значительно уменьшить ток потребления и нагрев esp.
— recommended < 18dBm (reduce power consumption, RF noise especially in PHY_MODE_11N mode & improve connectivity, but range will also be reduced)
— PHY_MODE_11B=1 (longest LOS range) и PHY_MODE_11N=3 (longest indoor range)
Но сама концепция очень правильная. У меня сейчас дофига девайсов в доме, которые любят настраиваться (по крайней мере первоначально или после слёта) исключительно по RS232 (кто с родными уровнями, кто с TTL, кто с 3,3). Сейчас таскаюсь к ним с ноутбуком ежели приспичит, а от ноутбука шлейф переходников и проводов. И всё равно приходится на чердаке где-нибудь с сомнительным удобством располагаться. Если не вообще на улице.
Так что подобная штукенция — вполне логичное и удобное решение.
Автору поста респект и уважуха, утянул в свой приватный гит исходнячки. В свободное время подумать как в TLS обернуть, безопасности много не бывает ;)
а на девайсах к которыми подключается данная шутка эти сигналы могут быть и вообще не реализованы
А «три провода» это TTL.
Также рекомендую внимательно почитать про
допустисые уровни сигнала в COM (RS-232) и TTL
три провода RXd txd gnd работающих на физическом и байтовом уровне rs232 вполне достаточны для организации передачи данных. на остальные сигналы при этом просто положен болт.
стандарт, спецификация при этом никого не волнует.
ну а ttl это вобще только физичкские уровни сигнала, поскольку физика rs232 требует отдельной микросхемы а городить огород для 10см провода совершенно незачем. байтовый протокол при этом обычно именуют UART что как бы не совсем точно, но всем все понятно и работает у всех, везде стартовые и стоповые биты, контроль четности совместимые на логическом уровне с rs232, вот только скоростей добавили нестандартных.
И кстати о стандарте. Если вы подадите на вход китайской MAX3232 24 вольта, что вполне допустимо по EIA232, она просто сгорит. И пофиг, что даташит на оригинальную микросхему разрешает 25 вольт.
Вот в таком реальном мире мы живем. Я ответил про уровни?
И вот в этом самом реальном мире есть RX, TX и GND (еще RTS и CTS, у примерно 0.1% извращенцев). Остальные сигналы остались в пыльных манускриптах прошлого века.
Сказано, что при наличии двух штук при включении они автоматически подключаются друг к другу и можно использовать как беспроводной канал.
Верить или не верить — каждый решит сам)
www.diymore.cc/collections/wifi-module/products/arduino-db9-rs232-rf-wireless-bluetooth-module-hc-06-slave-serial-port
не все так просто с ними но как бы должно быть.
смысл ссылки в том что там инфа типа от производителя. а то что при этом у него цена выше тоже факт занятный…
Можно. Много что можно. Но он автор, он так видит.
собственно автор прошивку то и написал, только прошить ее
А можете сделать сравнение уже существующих решений типа ESP-Link github.com/jeelabs/esp-link
atadiat.com/en/e-esp8266-esp32-wifi-serial-bridge-converter/ — хорошая стать и тут другие проекты есть
Я думаю многим будет интересно!
Подозреваю что эта штука не заменит мне связку Wemos D1 Mini + Battery Shield, а уже заказал…
На «5V» при питании от АКБ напряжение идет с батареи, так что выше 4,2 не будет.
У вас отсутствует U2, а на схеме проекта есть:
ссылка
Прошу прошения может вопрос не корректный.
Но всё же нужна помощь
При компиляции есть несколько проблем.
Согласно ваше инструкции в библиотек ESP8266FtpServer.срр были заменены исходные команды SPIFFS на LittleFS
Точка досeуцпа работает и подключается, но при переходе на web-server в браузере пишет «Not found»
WinSCP очень удобная вещь, но с доступом FTP есть трудность.
Не могу найти пароль и логин
спасибо большое за классный проект
static const char FTP_LOGIN_[] PROGMEM = «admin»;
static const char FTP_PASSWORD_[] PROGMEM = «admin»
«Could not retrieve directory listing. No data connection MLSD».
Пробовал подключиться из FAR — та же бодяга…
Если что — точка доступа поднимается и к ней можно подключиться, т.е. как минимум прошивка в этой части работает.
Ну и конечно, у меня тоже были варнинги при компиляции в PaltformIO, но как и было рекомендовано — забил.
ps: варнинги при компиляции выходят в библиотеке ftp и не влияют ни на что
Поставил Platformio, компилятор выдаёт ошибки. почему?