• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Прошивка TCP2UART переходника с настройкой по Web

oleg_777

New member
Уважаемый pvvx.

Помогите сделать фичу ту, что я описал выше, а то голова идет кругом от исходников. Ведь для вас это легкое дело, а для меня просто виселица (я с С вообще не знаком.).

Плиз, плиз, плиз ...
 

pvvx

Активный участник сообщества
Уважаемый pvvx.

Помогите сделать фичу ту, что я описал выше, а то голова идет кругом от исходников. Ведь для вас это легкое дело, а для меня просто виселица (я с С вообще не знаком.).

Плиз, плиз, плиз ...
Неа. На это наложено табу. :) (в принципе и на все с ESP8266)
Возможна передача и прием в UART только через websocket как бинарных данных...
 

pvvx

Активный участник сообщества

vad7

Active member
@pvvx, у меня на планшете выдавал какую-то ошибку, уже не помню какую, вылечилось этим.
Возможно и по другому вылечить можно. Щас работает, а новые проблемы буду решать по мере поступления...
 

oleg_777

New member
Два дня мучений и сделал фичу о которой просил ранее. Тестировал вроде все работает отлично.

pvvx посмотри и если нормально то можешь включить это в репозитарий.

Надеюсь это многим пригодиться.

Все ушел делать HMI интерфейсы к своим устройствам. :)
 

Вложения

pvvx

Активный участник сообщества
Все ушел делать HMI интерфейсы к своим устройствам. :)
HMI без websocket? На устаревшей ajax? На HTML5 и SSL/TSL у ESP8266 критически не хватает ресурсов, а ESP-32S - это всего альфа версия и слишком много закрытого кода (т.е. только для энтузиастов-мазохистов).
Сильно страдает интерактивность. Всё это планируется на RTL871x, т.к. там больше ресурсов, да есть RTOS и они устойчивее по всем параметрам и стандартизирован внутренний интерфейс api и mbed, что дает возможность переноса приложений и на другие модули с ARM. Но пока дорабатывается SDK и никак не успеть всё и сразу :)
Уже выходят новые RTL871xBx - скоро в продаже...
По этому с любыми доработками на ESP8266 уже завязал. Только исправление ошибок в проекте web-свалки в качестве "поддержки", и то по указанию пользователей. На них уже и времени жалко - устарели.
 
Последнее редактирование:

oleg_777

New member
Понятно, но мне деваться некуда, т.к. были закуплены 50 шт. ESP-12E.

А потом буду с нетерпением ждать, все этого на базе RTL871x.

Но вы все равно добавьте ajax фичу в RTL871x, т.к. в IE11 это единственная возможность (при работе в локалке). А таких пользователей в ближайшие годы будет еще много.
 

oleg_777

New member
В архиве есть файл readme.txt
работает следующим образом:
отправляем запрос (можно на любую страницу), например:
http://sesp8266/uart.htm?uart_data=Fe0045

где Fe0045 - это бинарные данные в hex кодировке

получаем ответ (тоже бинарные данные в hex кодировке) через макрос ~uart_data~ или ~uart_data_tmo_100~

где 100 - это таймаут в миллисекундах.

только коммитте с учетом того что, я использовал исходники из версии 0.6.2, а сейчас у вас что-нибудь изменилось.
 

aloika

Active member
отправляем запрос (можно на любую страницу), например:
http://sesp8266/uart.htm?uart_data=Fe0045

где Fe0045 - это бинарные данные в hex кодировке

получаем ответ (тоже бинарные данные в hex кодировке) через макрос ~uart_data~ или ~uart_data_tmo_100~

где 100 - это таймаут в миллисекундах.
А как связан запрос с ответом?
 

pvvx

Активный участник сообщества
Блин - ну сказано же уже - websocket c бинарными данными.
В web-свалке стоит заглушка на бинарные данные в нем. Меняете на прием передачу блоков в UART. Прием должен проверять, что открыт websocket и передавать в него. Если websocket закрыт, то принимаемые данные по UART просто скипаются.
Это позволяет КАК УГОДНО работать с UART на web странице. Можно сделать простой WEB-UART терминал на javascript. Но он будет конфликтовать с TCP2UART каналом.
Так-же, такое решение не позволяет работать с UART в многопользовательском варианте - не известно какие данные с UART пришли для какого пользователя, если даже от каждого открытого одновременно сеанса пользователя мы можем послать всё в UART.
А предложенное oleg_777 - это костыль для ajax с тысячами ограничений.
Представьте двух пользователей или открытых окон в браузере, опрашивающих uart.htm. Они не дождутся ответа на свой запрос, т.к. ответ выдаст первому опросившему uart.htm, после ответа внешнего устройства по UART. :)
Хочется баловаться - балуйтесь... :) HMI на таких глупостях не будут работать. Это дет-сад и Arduino.
Вставил, т.к. надоело бороться с детсадом - пусть он и там растет :)
 
Последнее редактирование:

oleg_777

New member
Протестировал работу на одновременные запросы.
Сделал страницу запрашивающую по ajax с периодом от 200 до 300 мс. Открыл таких вкладок по 3 шт. в 3 разных браузерах. На странице сделал проверку принятых данных. Бывает раз в 1000 запросов, какой-либо запрос теряется, но не портиться и не вклинивается в другой, так что статус равен 0, и это можно обработать.

Я прекрасно понимаю pvvx в вопросе надежности таких вещей, но т.к. uart не подрузамевает многопользовательскую работу, то и такой результат более чем достаточен, если другого способа нет.

В моих устройствах в протоколе uart используется подобие modbus (только без адресации), поэтому целостность данных более менее проверяема.

Также можно вставить код на проверку открытого канала tcp2uart и не выполнять ajax запросы если он открыт.

Это решение мне подходит тем, что у моих устройств уже есть каналы общения с пользователем:
1) Родной экран и кнопки
2) USB-UART-TTL переходник
3) Bluetooth переходник
А теперь еще и WiFi ESP8266, так что меня устраивает.

Также вопрос к pvvx:

Если сервер парсить страницу (1), то в это время если поступает другой запрос, сервер одновременно начинает парсить и эту страницу (2) или ждет окончания парсинга страницы (1).
Т.е. ос вытесняющая или другая?
Как можно задействовать мьютексы?
И что происходить, если в коде парсинга встречается os_delay_us ?

Я использовал файл web_int_callbacks.c от версии 0.6.2 а при коммите он у вас вырезал ваш код add uart_ajax @oleg_777 · pvvx/esp8266web@8ac1fde · GitHub

Вот прикрепил правильный файл.
 

Вложения

Последнее редактирование:

pvvx

Активный участник сообщества
Как можно задействовать мьютексы?
Нету в NON OS мультизадачности. Всё работает последовательно по событиям.
Не последовательно (вклиниваются) только аппаратные прерывания.
>И что происходить, если в коде парсинга встречается os_delay_us ?
Всё, кроме прерываний останавливается.
>Я использовал файл web_int_callbacks.c от версии 0.6.2 а при коммите он у вас вырезал ваш код
Я не брал ваши исходники, а вставил в свои, то что надо было. Исключены обрашения к TSF...
 
Последнее редактирование:

oleg_777

New member
Спасибо за ответы, я так и думал, почему все прекрасно заработало без сбоев. На freertos (RTL871x) придеться с мьютексами (или еще как) делать значит.

И еще раз спасибо вам за ваши усилия, вы просто с этой прошивкой сделали мою мечту осуществимой.

P.S. читая ваши посты, понимаешь насколько вы глубоко и правильно мыслите, так что не обращайте внимания на нашу критику, мы просто иногда не догоняем вас. :oops:
 

safari

New member
Всем добрый вечер.
А может ли глубоко уважаемая мной прошивка TCP2UART(использую больше года в одном проекте) одновременно быть и клиентом и севером?
Необязательно для разных UART, можно и на одном висеть.
 

pvvx

Активный участник сообщества
Всем добрый вечер.
А может ли глубоко уважаемая мной прошивка TCP2UART(использую больше года в одном проекте) одновременно быть и клиентом и севером?
Необязательно для разных UART, можно и на одном висеть.
Одновременно - нет. Необходимо переделывать и дополнять.
 

alex35567

New member
Здравствуйте! Уважаемый pvvx, подскажите пожалуйста как заставить оверлей wdrv запускать генерацию при запуске (перезагрузке) модуля? Пробовал по всякому в init.ini настраивать, добился только чтобы оверлей загружался при перезапуске модуля, а чтобы запустить генерацию надо в веб интерфейсе старт нажимать...
Пробовал и ovl$=1 и ovl$=2.
 
Сверху Снизу