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

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

UnКаЙF

New member
Спасибо. Буду пробовать.
Устройство не моей разработки (это промоборудование) и одна из заявленных фич - автоподбор скорости.
 

dosikus

Member
Упс . Синий светодиод на ESP12 . Раньше загорался при старте модуля теперь молчит.
А он висит на GPIO1 - USART TX. Поставил инверсию TXD , светодиод заогрелся но стало гадить по UART. Фиг с ним , оставлю как есть...

Упс, это я давно с модулем не работал . :) Прошу прощения...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Упс . Синий светодиод на ESP12 . Раньше загорался при старте модуля теперь молчит.
А он висит на GPIO1 - USART TX. Поставил инверсию TXD , светодиод заогрелся но стало гадить по UART. Фиг с ним , оставлю как есть...
Загрузка стала быстрее и/или выключили вывод отладки. Тогда он мигнет при старте очень быстро - всего 30 ms у него при старте на сотню символов и вывод отключается...
 

shaman1010

Member
Я что-то упустил, или в сборку давно закрался баг?
Прошил модуль версией 0.5.6 (до этого пробовал 0.5.5 с гита) в настройках UARTа (/protect/uart.htm) изменяю скорость на 57600 - страничка обновляется, но в поле Baud остается 115273. При этом скорость изменяется на debug порту (protect/setup.htm, Debug UART BAUD). При этом там изменить скорость вообще не удается. Кроме того на /protect/uart.htm не работают чекбоксы RXD inverse:, TXD inverse: и некоторые другие. Прошил два модуля - симптомы одинаковые. Браузер тоже менял. Похоже где-то закрался небольшой сдвиг.

p.s. проверил 0.5.4а - там все в порядке. Т.е. ошибка вылезла в 0.5.5 (там этот баг есть)

p.p.s. кроме всего на 0.5.6 (и 0.5.5) не поднимается TCP2UART коннект, если логиниться не модулем, а со стационарного компа. В 0.5.4а все работает.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Я что-то упустил, или в сборку давно закрался баг?
Прошил модуль версией 0.5.6 (до этого пробовал 0.5.5 с гита) в настройках UARTа (/protect/uart.htm) изменяю скорость на 57600 - страничка обновляется, но в поле Baud остается 115273. При этом скорость изменяется на debug порту (protect/setup.htm, Debug UART BAUD). При этом там изменить скорость вообще не удается. Кроме того на /protect/uart.htm не работают чекбоксы RXD inverse:, TXD inverse: и некоторые другие. Прошил два модуля - симптомы одинаковые. Браузер тоже менял. Похоже где-то закрался небольшой сдвиг.
Значит в HTM ошибки... не те переменные там фигурируют. Попозже проверю и исправлю.
 

pvvx

Активный участник сообщества
Не, не. Я на прошивку 0.5.4а накидывал web от 0.5.6 - все работает. Проблема именно в прошивке, что-то с переменными там случилось.
Нашел уже, но надо перекомпилить и делать бинарники... в web_int_vars.c ошибка...
 

aneox

Member
гоняю 054а, обновить пока нет возможности, так вот заметил что со временем скорость сильно падает, глянул анализатором пакеты уарта


если дернуть питание, то скорость возвращается, выглядит так:


это работает на прием, т.е сверху нога тх уарта. Пакет(28кб) доходит целый, не битый, но с микропаузами, что влияет на скорость заметно. у меня с 260кб/с падает на 140кб/с.
встречаю такое поведение пару тройку раз за вечер активной отладки своего софта.
скорость стоит 3076923, остальные настройки уарта дефолтные

намного реже, но всетаки бывает, может взять и закрыть порт. Ошибка не ясна, но айфоновский класс отдает NSStreamEventErrorOccurred
 
Последнее редактирование:

pvvx

Активный участник сообщества
Пакет(28кб) доходит целый, не битый, но с микропаузами, что влияет на скорость заметно. у меня с 260кб/с падает на 140кб/с.
Это зависит от многих факторов - как сложилась обработка TCP пакетов по времени относительно UART и размера "TCP окна" в стеке TCP, да распределения памяти под буфер. 28 килобайт - это не один буфер в памяти, т.к. размер буфера ограничен где-то до 12 килобайт в пике... Ранее я писал - оптимизации на ходу под скорости потоков и работе TCP стека не делается (у нас не крутой сервер с от 400 MHz CPU и мегобайтами памяти, а простой MCU ESP8266 и оптимизировать стек TCP и саму передачу/протокол на ходу, включая управление и оптимизацию пакетов у внешнего клиента за счет разных фичь это накладно). Пытайтесь сами в исходниках оптимизировать разные параметры для соединения под ваш поток. Или оптимизируйте передачу пакетов (стек TCP) по времени со стороны Андроида - перед посылкой большого блока дожидайтесь полного, а не частичного освобождения окна (WIN TCP) у ESP. Иначе передаваемый блок бьется на много мелких транзакций по TCP, которые идут долго ещё и по причине ограничения памяти под приемный буфер у ESP. Так-же может вклиниваться кавардак при потере пакета, что неизбежно в WiFi. Эту ситуацию тоже стоит грамотно обработать со стороны стека TCP Андорида, передающего большой пакет - тоже дождаться полного опустошения TCP WIN и только тогда продолжить передачу. Иначе неизбежны накладные расходы на не оптимальный прием/передачу в TCP. Поток в UART будет рваться, а TCP трафик при этом запредельный - более 1 Mбайта в сек :) гоняет одни заголовки пакетов...
Так-же для оптимизации следует учитывать последовательность ACK пакетов с TCP... Не передавать пустые пакеты с одним ACK, если известно, что через несколько ms будут ещё ответные данные. Т.е. стремиться совместить блок с данными с ACK в пакетах - ответ-запрос.
Всё ясно? :)
 
Последнее редактирование:

aneox

Member
@pvvx Спасибо канеш за популярный ответ. Но с тсп стеком напрямую я никогда не работал, клиент реализован на готовом апи iOs. Так вот там ничего особо то и не поменяешь

перед посылкой большого блока дожидайтесь полного, а не частичного освобождения окна (WIN TCP)
это я могу попробовать, но кажется потеря в скорости будет значительная. Мне пропихнуть бы 20мб меньше минуты, пока 80сек удается только, с дма в своем контроллере.

Ну а вообщем, проблема довольно странная, я понимаю что в тсп там не все идеально и допускаю просадки, они как бы и так есть, но временные, иногда падает до 200кб/с но потом растет опять 260кб/с. Но если баг ловишь из поста выше, то скорость не возвращается даже при следующем сеансе, час два простоя, новые сеанс, а баг есть. Еще в добавок на esp03 нет ноги ресет, придется транзистор на питание ставить и дергать в случае чаво :(
 

pvvx

Активный участник сообщества
@pvvx Спасибо канеш за популярный ответ. Но с тсп стеком напрямую я никогда не работал, клиент реализован на готовом апи iOs. Так вот там ничего особо то и не поменяешь


это я могу попробовать, но кажется потеря в скорости будет значительная. Мне пропихнуть бы 20мб меньше минуты, пока 80сек удается только, с дма в своем контроллере.

Ну а вообщем, проблема довольно странная, я понимаю что в тсп там не все идеально и допускаю просадки, они как бы и так есть, но временные, иногда падает до 200кб/с но потом растет опять 260кб/с. Но если баг ловишь из поста выше, то скорость не возвращается даже при следующем сеансе, час два простоя, новые сеанс, а баг есть. Еще в добавок на esp03 нет ноги ресет, придется транзистор на питание ставить и дергать в случае чаво :(
Крейсерская скорость по TCP у ESP8266 за 1.1 Мегабайт в секунду. При работе с UART CPU загружен сильно работой с медленной шиной к UART регистрам и не выходит на крейсерскую скорость по TCP :(
Обязательно отключите вывод отладки в debug TX UART в http меню системы - он вообще всё тормозит - он не мешает только при передаче на TCP2UART на 9600 и настройке UART debug на 300000 Baud :)
Прошлые тесты показывали, что более 5 Mbit/s через UART с TCP не прет. 3 Mbit/s иногда успевает в обе стороны, но не успевает FT2232C и дробит RTS-ами по размеру своего буфера... http://esp8266.ru/forum/threads/pro...nika-s-nastrojkoj-po-web.146/page-5#post-3355
 
Последнее редактирование:

aneox

Member
Отключил отладочный уарт, вроде стало лучше, поднял скорость до 3809523, работает) и я бы сказал весь вечер довольно не плохо работает, скорость выше пробовал, но чет не стабильно, хотя в анализаторе все норм, думаю провода длинные и на скрутках. Бывает редко пакет встает на пол пути, мой стм32 по таймеру видит задержку, пинает просто через уарт телефон, мол чет висит, тот пересылает, приходит недостающая часть пакета и новый сразу)), обоих пропускаю, делаю паузу 50мс и дальше все пучком. 320кб/с держится уверенно, тьфу тьфу, не сглазить бы) rts cts я не использую, буфер в памяти стм как уже говорил 28кб. Спасибо за советы
 

Midnight

New member
@pvvx, доброго времени суток. К модулю подключился, а что дальше?:) Я имею ввиду, в браузере пишет TCP2UART Connection: closed . скрипт клиента находится на ноуте, который подключен к esp, делаю подключение на 192,168,4,1 порт 80 отправляю через сокет дату и тишина...Я сервер не включил на esp?
 

pvvx

Активный участник сообщества
@pvvx, доброго времени суток. К модулю подключился, а что дальше?:) Я имею ввиду, в браузере пишет TCP2UART Connection: closed .
А вы соединились к порту TCP2UART или задали внешнее подключение и там работает серверный порт?

скрипт клиента находится на ноуте, который подключен к esp, делаю подключение на 192,168,4,1 порт 80 отправляю через сокет дату и тишина...Я сервер не включил на esp?
Порт 80 - это HTTP сервер. У него есть websocket, но он не связан с TCP2UART (в текущих реализациях - это только в планах и ещё не всё там решено для реализации такого варианта), а работает с переменными Web. Пример для работы с websocket дан в WebSocketTest\ws2.htm (архив прошивки) или в esp8266web/WebSocket at master · pvvx/esp8266web · GitHub. Данный websocket создан для написания HTML с работой с переменными через него, а через POST/GET/... Но страницы HTML, работающие с websocket вы должны описать сами. Для этого дана программа обновления диска web страниц...
TCP2UART имеет свой порт.
 
Последнее редактирование:

Midnight

New member
А вы соединились к порту TCP2UART или задали внешнее подключение и там работает серверный порт?

Порт 80 - это HTTP сервер. У него есть websocket, но он не связан с TCP2UART (в текущих реализациях - это только в планах и ещё не всё там решено для реализации такого варианта), а работает с переменными Web. Пример для работы с websocket дан в WebSocketTest\ws2.htm (архив прошивки) или в esp8266web/WebSocket at master · pvvx/esp8266web · GitHub.
TCP2UART имеет свой порт.
Спасибо, разобрался port tcp 12345 - нашёл. Кстати, подскажите, пожалуйста, почему при установке 921600бод/сек, автоматом скорость правится на 930232?
 

pvvx

Активный участник сообщества
Спасибо, разобрался port tcp 12345 - нашёл. Кстати, подскажите, пожалуйста, почему при установке 921600бод/сек, автоматом скорость правится на 930232?
По тому, что она реальная не 921600, а 930232. Таков делитель у UART в ESP и он отражается, чтобы вы знали отклонение. Поделите 80 000 000 на 921600 нацело и получите возможную. Дробного делителя или отдельной PLL для UART у ESP8266 нет.
 

Midnight

New member
@pvvx, подключил. Подскажите а какая скорость максимальная может быть? У меня выходит, что время между запросом и ответом на него порядка 80мс, что как то медленно. Для сравнения по проводу когда я передаю, там около 10мс. Понятно, что по проводу быстрее будет, но в 8 раз...как-то странно или это я опять где-то чего не углядел?

Спасибо
 

pvvx

Активный участник сообщества
@pvvx, подключил. Подскажите а какая скорость максимальная может быть? У меня выходит, что время между запросом и ответом на него порядка 80мс, что как то медленно. Для сравнения по проводу когда я передаю, там около 10мс. Понятно, что по проводу быстрее будет, но в 8 раз...как-то странно или это я опять где-то чего не углядел?

Спасибо
Скорость чего? Передачи одного символа? Там ожидание набора до размера буфера стоит в 50 ms. Иначе не оптимально и масса программ ещё хуже тормозит. У потока "задержки" практически нет. А оптимальный максимум 3 Мегабита в сек.
Исходники есть - можете всё скорректировать под свою задачу и оборудование... А текущий вариант настроен как нечто среднее для удовлетворения всего, что можно, включая распространенное кривенькое внешнее ПО.
 
Последнее редактирование:
Сверху Снизу