• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

pvvx

Активный участник сообщества
Pvvx , а где выполняется отправка буфера в тср ?
Встречный вопрос - когда?
Система работает по событиям.
Если приходит запрос открытия соединения TCP, то инициализируется UART драйвер. (если TCP закрыто или закрывается, то драйвер UART зарывается и не работает).
Далее, если приняты символы с этого TCP соединения, то они передаются на отправку UART драйверу, который работает по прерываниям. Он регулирует размер "приемного окна TCP", т.к. поток по TCP (у нас по WiFi 1.2 мегабайта в секунду) превышает скорость вывода UART. Размер "приемного окна в TCP стеке" говорит передающему, что больше не мы не примем. Может падать до нуля, если буферы передачи в UART забиты - тогда передающий ждет. Так-же буфера передачи в UART могут быть заполнены по выставленному сигналу RTS-CTS приемником на ответной UART стороне.
Когда приняты байты по UART, то происходит прерывание, проверяется наличие TCP соединения и байтики отправляются в буфер LwIP с расчетами порций передачи для достижения максимальной производительности и других условий (тех-же "приемного окна в TCP стеке" у принимающей стороны, и если не лезет, то выставляет RTC/CTS сигнал означающий, что больше не может быть принято - занят принимающий или низкая скорость канала). LwIP выдает событие, что отправил предыдущий кусок. Вы туда и впихнули свои процедуры :) Но там очень критически размеры буферов и блоков отправки основного процесса для получения максимальной производительности при передаче методом TCP (стеком TCP).
Во всей этой цепочке нет места для ваших вставок - они будут нарушать работу теми или иными способами.
Вписывайте специальную задачу вставки в поток приема или передачи своих байтиков при условии активности соединения UART2TCP и анализом свободных объемов в блоках для передачи/приема TCP стека. Это типа ещё один процесс, работающий по событиям, который должен учитывать работу множества других процессов и уловий, не только своих, но и у приемной/передающей стороны :) :p

По методу вашей вставки видно, что вам рано даже Arduino, где никакие стандарты TCP или ещё чего не выполняются. По этому, вам и совет – осваивайте Arduino– там ничего не учитывается и без разницы будет ли это работать у других.
 
Последнее редактирование:
По методу вашей вставки видно, что вам рано даже Arduino, где никакие стандарты TCP или ещё чего не выполняются.
Не будьте такими категоричными в предположении.
Я просто впервые столкнулся с TCP, IP, UDP, WiFi и т.д. на программном уровне . А вообще я занимаюсь программированием МК ATmega, ATtiny, STM32 . Эта "пластмаска" понравилась своей относительной компактностью законченного устройства , и понравилась своими возможностями .
Недавно на АТ командах сделал полноценный клиент , который пересылает с расходомера данные на сервер с запакованным таймстемп (который считывается по определенному адресу ) в формате JSON , все отлично работает . Хотя где-то тут на форуме , Вы писали что на АТ командах все коряво будет, будет валиться , плохо передавать данные и т.д.
Я сделал на ATmega328 это , и заняло примерно 40% флешь памяти .

Встречный вопрос - когда?
Система работает по событиям.
Если приходит запрос открытия соединения TCP, то инициализируется UART драйвер. (если TCP закрыто или закрывается, то драйвер UART зарывается и не работает).
Теперь понял как работает . А вообще исходник запутанный , куча файлов , сходу непонятно как работает программа .
 

pvvx

Активный участник сообщества
Теперь понял как работает . А вообще исходник запутанный , куча файлов , сходу непонятно как работает программа .
Значит цель дотигнута. Или запутанный или берите проц больше и жирнее чтобы красиво писать и влезало :)
 

vad7

Active member
@Артемий, а вы три темы верхние почитайте в этом разделе.
По ним многое можно понять.
А так да, исходники почти без комментов и сложны для разбора...
Но на халяву, как говорится, и уксус сладкий. :)
 
Последнее редактирование:
@Артемий, а вы три темы верхние почитайте в этом разделе.
По ним многое можно понять.
А так да, исходники почти без комментов и сложны для разбора...
Но на халяву, как говорится, и уксус сладкий. :)
Очень докуя хлама в темах , соответственно много маловажных сообщений :)
Я по-тихоньку читаю конечно . Уже примерно половину осилил .
Вот найти бы что то похожее на это : Работа с ESP8266: Пишем прошивку для управления системой nooLite
и это: Работа с ESP8266: Собираем компилятор и пишем первую прошивку
Только конкретно по компилятору и особенностях программирования ESP8266 :)

Кстати , среда разработки убивает даже тем , что малейшее добавление файлов приводит к добавлению кучи ошибок , не связанных вообще с синтаксисом . Это вообще запутывает .
 

pvvx

Активный участник сообщества
Очень докуя хлама в темах , соответственно много маловажных сообщений :)
Тут не технический форум. Так сложилось, что тут разбирают в основном вопросы не сложнее "как мигать светодиодом", к какой ножке его подключить и где видео как написать это в Arduino... (Это сложилось от специализации чипа ESP8266 - только для игры на вечер.)
Я по-тихоньку читаю конечно . Уже примерно половину осилил .
Вот найти бы что то похожее на это : Работа с ESP8266: Пишем прошивку для управления системой nooLite
и это: Работа с ESP8266: Собираем компилятор и пишем первую прошивку
Ну вы сравнили - там описание по готовому продукту, а тут web-свалка с наслоениями от каждого выходившего SDK и доработками. Начало у неё было в 2014 г, и многое уже не актуально, иногда переделано и наоборот. Ожидалось, что Espressif исправит ошибки и тогда можно будет всё почистить и переписать. Но этого не произошло, а чип тем временем устарел и нашлась замена (RTL871x), что можно сразу ставить в пром.устройства. Вот счас леплю переносной специализированный измеритель... На очереди установка в другие устройства со сроком службы от 10 лет... А тем временем тема RTL-ов стоит - ничего нового :)
 
Последнее редактирование:
Тут не технический форум. Так сложилось, что тут разбирают в основном вопросы не сложнее "как мигать светодиодом", к какой ножке его подключить и где видео как написать это в Arduino...
Согласен с вами , но обычно , основная задача состоит в том , чтобы задействовать основные возможности "пластмаски". По мигать светодиодом (и не только) я могу и на ATtiny13 , 5 минут дела . Тут важно к примеру поднять сервер для конфигурации , или клиент, для отправки данных. Ибо смысл тогда от этого SoC? :)
А вообще , если о моей задаче . То я ее вижу так:
1) Подали питание , инициализируем периферию .
2) Конфигурируем устройство (STA или AP) режим конфигурации или основной режим.
3) Если режим AP , то выводим веб интерфейс для настройки всех параметров.
4) у меня строка одного размера.
5) по нажатию на кнопку , я инициирую соединение с сервером .
6) Подключившись к серверу , я отправляю строку , к примеру 8 байт. Которая задается в настройках.

Сейчас у меня все работает в режиме AP . Конфигурируется АТ командами через UART.
 

Virtual

New member
5) по нажатию на кнопку , я инициирую соединение с сервером .
6) Подключившись к серверу , я отправляю строку , к примеру 8 байт. Которая задается в настройках.
ну наконец то хоть чет внятное по задаче.
смотри пример
esp8266web/ovls/tcp_client
останется только придумать на какое событие повесить опрос кн.
 
Вот счас леплю переносной специализированный измеритель... На очереди установка в другие устройства со сроком службы от 10 лет... А тем временем тема RTL-ов стоит - ничего нового :)
Очень интересно! :) Сейчас почитаю за этот "эртээл" :)
А что за измеритель если не секрет?
 

Yurech

New member
После подачи случайно на пин RX 5V на wemos mini. Перестал модуль работать хоть как то. На главной странице TCPUART соединение закрыто.
Безымянный.JPG
Можно выход перенести на другой пин? Пробовал на пин, подавать программно высокий уровень, меряю 3,35В низкий уровень 0,018В. на других пинах при низком уровне 0В. И как вообще активировать TCP2UART connect чтоб писало Open?
 

oleg_777

New member
Уважаемый pvvx, большое спасибо вам за эту прошивку.

Теперь о грустном (хочеться надеяться что в новом релизе вы это поправите).

Не работает веб-интерфейс при запросе его из внешнего мира, сам Uart порт всегда работает и везде.
Т.е. внутри локалки все отлично, хоть по имени http://sesp8266/ хоть по http://test.asuscomm.com/ (DDNS имя во внешнем мире), а вот когда запрашиваешь веб сервер из вне то браузер висит на стадии загрузки страницы, при этом загружаются лишь простые данные типа http://test.asuscomm.com/protect/aps.xml, а любые другие страницы типа htm нет. Браузеры пробывал все, и чтобы понять нет ли у меня проблем, запускал внутри локалки простые веб-серверы и пробывал из вне получить к ним доступ, все ок. На роутере настраивал проброс портов все правильно (даже пробывал для esp8266 делать режим DMZ зоны, но не помогло).

И еще можете ли сделать чтобы можно было делать запросы типа такого:

http://test.asuscomm.com/web.cgi?uart=FE90A4&timeout=100

а в ответе принятые данные {data: "89AF0E34B1"}

таким образом можно было бы делать веб-морду для устройств и на странице с помощью ajax управлять ими.

Готов оплатить такую работу.

Или когда такая прошивка выйдет под RTL871x?

Если бы все это было так как я описал, то наконец-то можно было делать удобные, недорогие, с управлением через интернет HMI устройства.
 

aloika

Active member
И еще можете ли сделать чтобы можно было делать запросы типа такого:
http://test.asuscomm.com/web.cgi?uart=FE90A4&timeout=100
а в ответе принятые данные {data: "89AF0E34B1"}
таким образом можно было бы делать веб-морду для устройств и на странице с помощью ajax управлять ими.
Это уже многими сделано под свои нужды, и примеры реализаций есть...

Или когда такая прошивка выйдет под RTL871x?
Весь мир замер в ожидании, все с восхищением и надеждой смотрят на pvvx ;)
 

pvvx

Активный участник сообщества
Не работает веб-интерфейс при запросе его из внешнего мира, сам Uart порт всегда работает и везде.
MTU не лезет через российских операторов GSM. Используют всякое устаревшее оборудование, списанное из других стран.
Ставите меньший размер MTU и все пойдет: Разработка ‘библиотеки’ малого webсервера на esp8266.
Весь мир замер в ожидании, все с восхищением и надеждой смотрят на pvvx ;)
Я там пока другим занят... Вычищаю ошибки из SDK...
 

oleg_777

New member
Интернет там и там проводной (не GSM).

Сделал
#define TCP_MSS 1400

и все заработало спасибо ответившим огромное.

Можете ли сделать чтобы можно было делать запросы типа такого (или тыкните меня в пример):

http://test.asuscomm.com/web.cgi?uart=FE90A4&timeout=100

а в ответе принятые данные {data: "89AF0E34B1"}

Готов оплатить такую работу.
 
Последнее редактирование:

aneox

Member
Весь мир замер в ожидании, все с восхищением и надеждой смотрят на pvvx ;)
люто плюсую) тоже жду)


тестировал сброс настроек через прижатие rx ноги к земле на старте
в один из тестов есп перестал обнаруживаться как точка вообще. Ни ресеты, ни длительное отключение питания не помогали. версия 0.5.9. Подумал уже чето сгорело.
подпаял провода, перезалил прошивку и оно ожило, даже не стандартный ssid остался, не сбросился
вот теперь уже страшно чет его ставить в девайсы(бегать потом с отверткой и паяльникомo_O). попробую еще тесты погонять и вывести повторимость
 

oleg_777

New member
в файле web_srv.c ошибка с кэшированием:

tcp_puts_fd("Cache-Control: smax-age=%d\r\n", FILE_CACHE_MAX_AGE_SEC);

надо так max-age или s-maxage
 
Последнее редактирование:

pvvx

Активный участник сообщества
в файле web_srv.c ошибка с кэшированием:

tcp_puts_fd("Cache-Control: smax-age=%d\r\n", FILE_CACHE_MAX_AGE_SEC);

надо так max-age или s-maxage
Это для "кого" надо? Ранее было "smax-age" - чтобы изменить только поведение обратного прокси-сервера.
Для Cache-Control ?
Заменил на "max-age".
 
Последнее редактирование:
Сверху Снизу