• Система автоматизации с открытым исходным кодом на базе 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 Мегабита в сек.
Исходники есть - можете всё скорректировать под свою задачу и оборудование... А текущий вариант настроен как нечто среднее для удовлетворения всего, что можно, включая распространенное кривенькое внешнее ПО.
 
Последнее редактирование:
Сверху Снизу