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

esp8622+stm32 TCP сервер

reg33

New member
Дорый день.
Разрабатываю устройство, в котором esp8622 выступает в качестве tcp сервера подключенному по wifi к сети.
Обрабаотку данных выполняет stm32. связь между контроллерам осуществляется от по usart порту по
средствам AT команд. Набросал веб страничку в которой присутствует java script при загрузке которой
идет запрос на сервер один раз в секунду.На stm32 тикает счетчик. значение счетчика передаются AT
командами на esp сервер отправляет в браузер клиента. Дело в том что нет стабильности. Значения меняются
в браузере а потом пауза несколько секунд и потом проходит обновленне. Причем значения не всегда
корректны. Идет обновление в окне браузера к примеру 80,81,AT+81,82....Прошивка esp8622 версии
ESP8266_NONOS_SDK-3.0.6.
Заранее благодарен.
 

IBAH

New member
Дорый день.
Разрабатываю устройство, в котором esp8622 выступает в качестве tcp сервера подключенному по wifi к сети.
Обрабаотку данных выполняет stm32. связь между контроллерам осуществляется от по usart порту по
средствам AT команд. Набросал веб страничку в которой присутствует java script при загрузке которой
идет запрос на сервер один раз в секунду.На stm32 тикает счетчик. значение счетчика передаются AT
командами на esp сервер отправляет в браузер клиента. Дело в том что нет стабильности. Значения меняются
в браузере а потом пауза несколько секунд и потом проходит обновленне. Причем значения не всегда
корректны. Идет обновление в окне браузера к примеру 80,81,AT+81,82....Прошивка esp8622 версии
ESP8266_NONOS_SDK-3.0.6.
Заранее благодарен.
Здесь нет ни одного вопроса....
 

reg33

New member
Здесь нет ни одного вопроса....
Вопросов два, первый как получается что часть протокола AT попадает в область передаваемых значений клиенту сервера (в браузере периодически отображается вместо 80 символы AT+80 ). И второй на сколько быстро обрабатывает сервер на базе esp способен обрабатывать данные, полученные по usart? Нужны лм паузы при реализации AT протокола по usart?

Код обработки запроса от браузера и ответа на запрос прилагаю прилагаю

else if(chek_answerESP_buff_ring(ptrReceiveData, "tim_value")) {
lenCountTim2=sprintf (prtBuffAjaxCountTim2,"%d",countTim2);
sprintf(ptrTransmitData,"%s%d%c%d%s","AT+CIPSEND=",0,',',strlen(prtBuffAjaxCountTim2),"\r\n");
send_ESP_ring (BuffUsart.espTransmit);
if (chek_answerESP_buff_ring(ptrReceiveData, ">")){

testAjax='>';
sprintf (ptrTransmitData,"%d%s",countTim2,"\r\n");
testTxVar=countTim2;
send_ESP_ring(BuffUsart.espTransmit);
HAL_Delay(130);

if (chek_answerESP_buff_ring(ptrReceiveData, "SEND OK")){
testAjax='Y';

}

}

close_conections_ring();

}

}
 

IBAH

New member
Вопросов два, первый как получается что часть протокола AT попадает в область передаваемых значений клиенту сервера (в браузере периодически отображается вместо 80 символы AT+80 ).
Чего-то кривое. Может , алгоритм передачи УАРТ. Или неправильно обрабатывается AT+CIPSEND. После приглашающего символа '>' передается не указанное количество байт. Кстати. Там ошибка в документации приглашающий не символ '>', а два символа '>' и пробел.


И второй на сколько быстро обрабатывает сервер на базе esp способен обрабатывать данные, полученные по usart? Нужны лм паузы при реализации AT протокола по usart?
АТ команды тем и хороши, что не надо ждать. Всем управляет модем. Если модем ответил, значит он принял и обработал команду.
То есть алгоритм должен быть следующий:
посылаем AT+CIPSEND,
Ожидаем ОК. Это означает что команда верна и может быть выполнена.
Ожидаем приглашения к передачи данных.
Приглашение получено.
Передаем заявленное количество данных
Ожидаем SEND OK
SEND OK получено. Это означает, что данные переданы, а в ТСП и доставлены адресату.
Можно переходить к следующей передаче.
 

reg33

New member
Чего-то кривое. Может , алгоритм передачи УАРТ. Или неправильно обрабатывается AT+CIPSEND. После приглашающего символа '>' передается не указанное количество байт. Кстати. Там ошибка в документации приглашающий не символ '>', а два символа '>' и пробел.




АТ команды тем и хороши, что не надо ждать. Всем управляет модем. Если модем ответил, значит он принял и обработал команду.
То есть алгоритм должен быть следующий:
посылаем AT+CIPSEND,
Ожидаем ОК. Это означает что команда верна и может быть выполнена.
Ожидаем приглашения к передачи данных.
Приглашение получено.
Передаем заявленное количество данных
Ожидаем SEND OK
SEND OK получено. Это означает, что данные переданы, а в ТСП и доставлены адресату.
Можно переходить к следующей передаче.
Добрый день.
Поправил я свой код. Передается посылка корректно. В документации написано что максимальный пакет 2048. Пакет вырос у меня больше чем2048. На данный момент не получается отправить пакет больше 2048. В документации написано что можно разбить пакет на фреймы и отправлять с интервалом 20mS я так понимаю ответ esp8622не должен быть> SEND OK. А что то другое. В теории esp должен понимать что пакет пришел полностью. Вроде есть команда +++. И есть команда AT+CIPSENDEX она вроде принимает пакет до'\0'.
За ранее благодарен.
 

IBAH

New member
Добрый день.
Поправил я свой код. Передается посылка корректно. В документации написано что максимальный пакет 2048. Пакет вырос у меня больше чем2048. На данный момент не получается отправить пакет больше 2048. В документации написано что можно разбить пакет на фреймы и отправлять с интервалом 20mS я так понимаю ответ esp8622не должен быть> SEND OK. А что то другое. В теории esp должен понимать что пакет пришел полностью. Вроде есть команда +++. И есть команда AT+CIPSENDEX она вроде принимает пакет до'\0'.
За ранее благодарен.
команда AT+CIPSEND не умеет больше 2048 байт

Single connection: (+CIPMUX=0)
AT+CIPSEND=<length>
2. Multiple connections: (+CIPMUX=1)
AT+CIPSEND=<link ID>,<length>
3. Remote IP and ports can be set in UDP
transmission:
AT+CIPSEND=[<link ID>,]<length> [,<remote
IP>,<remote port>]

<length>: data length, MAX: 2048 bytes.


В еспешке все таки конечный объем памяти.
а 20мС это для режима прозрачной передачи, хотя сомневаюсь что за 20мС ТСР пакет дойдет до адресата. В режиме UDP может быть и дойдет
 

reg33

New member
команда AT+CIPSEND не умеет больше 2048 байт

Single connection: (+CIPMUX=0)
AT+CIPSEND=<length>
2. Multiple connections: (+CIPMUX=1)
AT+CIPSEND=<link ID>,<length>
3. Remote IP and ports can be set in UDP
transmission:
AT+CIPSEND=[<link ID>,]<length> [,<remote
IP>,<remote port>]

<length>: data length, MAX: 2048 bytes.


В еспешке все таки конечный объем памяти.
а 20мС это для режима прозрачной передачи, хотя сомневаюсь что за 20мС ТСР пакет дойдет до адресата. В режиме UDP может быть и дойдет
Получается если web страничка имеет размер больше 2048 байт то ее ESP передать не сможет?
 

reg33

New member
Добрый день.
Получилось передавать большие пакеты. Но обмен данными достаточно медленный. Если от клиента происходит несколько запросов за короткий промежуток времени (насколько запросов в секунду) то происходит потеря, думаю что это происходит из за AT команд, слишком медленная обработка. По изучав тему наткнулся на TCP2USART. Но не могу найти прошивку для esp8622. Есть ли такая прошивка для esp8622 ?
 

pvvx

Активный участник сообщества
Теоретически корректно невозможно обрабатывать потоки UART-WiFi без использования сигналов RTS-CTS и наличия достаточного объема памяти для буферизации данных.
Пропускная способность WiFi c ESP8266 в TCP составляет до 800 килобайт в сек. От UART это требует 10 Мегабит.
ТСР соединение имеет подтверждения приема и регулировку скорости потока путем ограничения TCP окна. Но на новые запросы установить ограничения невозможно.
Т.е. необходимо успевать обрабатывать запросы со скоростью более 10 Мегабит (учитывая заголовки).
А тут ещё "AT".
По этим и другим причинам вы нигде не встретите адаптер WiFi с подключением по UART.
 

pvvx

Активный участник сообщества
По этим и другим причинам вы нигде не встретите адаптер WiFi с подключением по UART и даже на USB2.0FS (это всего12 Mbit/s). Только от USB2.0HS.
 

pvvx

Активный участник сообщества
а 20мС это для режима прозрачной передачи, хотя сомневаюсь что за 20мС ТСР пакет дойдет до адресата. В режиме UDP может быть и дойдет
Типично доходит быстрее, если интрасеть местная. Даже на открытие TCP соединения требуется не более 10 мс, а в норме менее 1 мс (типа 2 ping).
 

pvvx

Активный участник сообщества
В итоге если используется "AT", то соединения должны быть только между двумя "AT" устройствами. А не эксплорерами - даже в js скрипте вы не сможете ограничить кол-во запросов, т.к. пользователей (открытых страниц с запросами) может быть бесконечное множество. Типа D-DOS атака.
В некоторых роутерах есть возможность ограничения потока на клиента. Установите минимум - пару кбит в сек.
 

pvvx

Активный участник сообщества
Ндас... Роутер позволяет ограничить только до 64 кбит.с.
1745568056526.png
Т.е. для "AT" на ESP8266 не годится, т.к. потребуется от 640 кбит UART. :p

Про использование "AT" можно забыть.
 

pvvx

Активный участник сообщества
Добрый день.
Получилось передавать большие пакеты. Но обмен данными достаточно медленный. Если от клиента происходит несколько запросов за короткий промежуток времени (насколько запросов в секунду) то происходит потеря, думаю что это происходит из за AT команд, слишком медленная обработка. По изучав тему наткнулся на TCP2USART. Но не могу найти прошивку для esp8622. Есть ли такая прошивка для esp8622 ?
У “AT” есть только один вариант использования. Это работа с передачей данных на фиксированный сервер. Тогда проблем никаких нет.

TCP соединение открывается всего одно, и по заказу второго MCU. Поток так же ограничен передачей данных от этого MCU к ESP8266 через “AT”. Входящих TCP соединений вообще нет.
 

pvvx

Активный участник сообщества
Ну я так понимаю вы автор прошивки https://esp8266.ru/forum/threads/proshivka-tcp2uart-perexodnika-s-nastrojkoj-po-web.146/#post-2649
И данная прошивка сможет работать в режиме прозрачного WI FI моста.
WiFi моста, но не Web сервера работающего через UART, как это некоторые пытаются сделать в "AT"...
 

pvvx

Активный участник сообщества
"AT" прошивка тоже спокойно работает в режиме моста. В режиме "прозрачного соединения" нет никаких "AT". И связь идет только между двумя UART, с ограниченными потоками и с сигналами RTS/СTS.
 

reg33

New member
"AT" прошивка тоже спокойно работает в режиме моста. В режиме "прозрачного соединения" нет никаких "AT". И связь идет только между двумя UART, с ограниченными потоками и с сигналами RTS/СTS.
Как новичку не совсем понятен механизм. В моем понимании браузер должен сделать GET запрос на сервер и этот запрос должен быть перенаправлен на usart. По идее по адресу 192.168.4.1 по умолчанию http порт 80 запрос должен появиться на usart для дальнейшей обработки. Но в терминальной программе ничего нет. Может я чтото не так делаю. На форуме написано что для режима станции поля client/server IP не заполняются или вбить 127.0.0.1 /0
 

reg33

New member
WiFi моста, но не Web сервера работающего через UART, как это некоторые пытаются сделать в "AT"...
Я не совсем понимаю в чем сложность прошивки работы web сервера работающего по uart без AT команд. AT команды нужны для AT совместимых устройств
 
Сверху Снизу