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

Обсуждение Прошивка TCPUART2 от Cesanta - стабильная работа с TCP

lsm

Разработчик Smart.js
Команда форума
Приветствую!

Я представляю компанию Cesanta. Мы недавно разработали прошивку TCPUART с улучшенными характеристиками TCP стека.

Возможности:
1. Веб настройка. Скриншот смотрите в доке - ссылка ниже.
2. Исправленный TCP стек, что позволяет держать TCP соединения без разрывов и задержек в режиме радиотишины, со скоростью передачи ограниченной скоростью UART
3. Агрессивный TCP ретрансмит, что позволяет добиться очень малых задержек, порядка 5-15 миллисекунд в локальной сети
4. Возможность соединения как в режиме клиента, так и в режиме сервера

Код прошивки пока закрыт. Коммерческое использование прошивки - по согласованию с Cesanta.

Ссылки:
Краткое описание: https://backend.cesanta.com/tcpuart.pdf
Утилита для прошивания с самой прошивкой: https://backend.cesanta.com/TCP_UART.zip

Проще всего - распаковать архив, и залить прошивку на NodeMCU. Процедура занимает около минуты.

Note: на данный момент, в режиме AP + WPA, работа прошивки нестабильна. Рекомендую тестировать в режиме STA.

Пробуйте. Буду признателен за отзывы.
 

lsm

Разработчик Smart.js
Команда форума
Разные codebase.
У нас основная задача была - обеспечить стабильную и быструю работу с TCP, что невозможно с родным SDK. Поэтому пришлось править TCP stack. То есть реальную разницу покажет сравнительный тест, меряющий пропускную способность, задержку, и стабильность передачи.

Мы не делали тестов с прошивкой от pvvx, поэтому сказать за нее не могу.
С нашей прошивкой делали много тестов - и результат как я описал в начальном посте.
 

Sanchos

New member
Неплохое решение, lsm. Всё вроде работает стабильно.
Попробовал даже пообщаться реальный COM порт - виртуальный COM порт, и всё работает стабильно. Виртуальный COM порт создавал с помощью программы USR-VCOM.
PS. Кстати вашей компании тоже стоит подумать над такой программой.
 

lsm

Разработчик Smart.js
Команда форума
Неплохое решение, lsm. Всё вроде работает стабильно.
Попробовал даже пообщаться реальный COM порт - виртуальный COM порт, и всё работает стабильно. Виртуальный COM порт создавал с помощью программы USR-VCOM.
PS. Кстати вашей компании тоже стоит подумать над такой программой.
Sanshos, вы имеете ввиду сделать аналог USR-VCOM ?
 

pvvx

Активный участник сообщества
Проще всего - распаковать архив, и залить прошивку на NodeMCU. Процедура занимает около минуты.
Выходит несколько минут, более 5. Что я делаю не так?
После прошивки получаю мусор в окне:
Код:
--- flashed successfully
--- connected
load 0x40100000, len 30392, room 16
���bŧ�9�B��H��!C��������C�1�Ƅb�N�����J��!cC����L�B�o�8��ƄE��
)Ĕ�9������������� yr�'���N�����������p�b�#�n�$��b�侐�rn�$�Ìr��n�N�rn��θ����������p�b�#�n�$�p���r�'bl���{� n�;��l��� �b��ؒ��`��#�� yr�'���θ��������l�p�b�#�n�$�b|��rn�$�Ìr������N�rn�����l��r�n���N�rn��θ��������l�r��?b��r���Ă���p`����8��Ē`Ĝ�r����n��������rn��N�b�����Č��b�>�nn�$��b�侐�rn�$�Ìrr~�l�ܒ��b�l��b�>��ܒ��b��b�$`$`�
Страница управления вываливается более 15 секунд:
tcp_uart.gif
На стандартный HTTP запрос "GET /\r\n\r\n" система установок не отвечает...
И такие неприятности сразу:
Код:
6260@12    40129 Heap free: 8232
6260@12   132592 UART ints 0; rx bytes 0 buf 0 fifo 0, ovf 0, lcs 0; tx 0 0 0; hf 8232 i 0x002 ie 0x111

Trap 29: task=0x3fff5100 pc=0x40102a2a va=0x0
--- BEGIN CORE DUMP ---
{"arch": "ESP8266","REGS": {"addr": 1073661208, "data": "KR8QQFCS/z/k0/8/+bP/PwAAAAAxAAAAXLT/P/i7/z9ctP8/AAAAAP////8AAAAAGMb+P2QAAAAcAABgQAEAACoqEEAdAAAAAAAAAAAAAAAAAAAAMwAAAA=="}
,"DRAM": {"addr": 1073643520, "data": "AAAAAAAAAAAAAQAAUAAAAO9AFgAAAAgAAAABAAAQAAAAAQAA//8AAAEBAQDzDAAAQQAAAGik/j+gAAAAjJL+P0iA/j8AAAAAAAAAADSD/j+cg/4/BIT+PwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAHuz/j8BAAAAEIMiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAARgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAA
AQAAAAAAAAAOM82rNBJt5uzeBQALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJhN/z8DAAAANIP+PwAAAAAAAAAAAAAAAAQAAAAAAAAA
AAAAAAAAAAA0g/4/SJwiQIScIkDYnCJAFJ0iQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Т.е. при повторном открытии соединения и вливания данных в RX UART ESP8266 на 115200 в разумных пределах (100 байт, через задержку), нет их прохода в TCP на другой стороне (или зависон указанный выше). При этом отосланные данные в TCP выходят на TX UART ESP8266, если не зависло.
PS: а я наделся, что кто снимет с меня дальнейшее продолжение темы TCP2UART :(
 
Последнее редактирование:

pvvx

Активный участник сообщества
Мы не делали тестов с прошивкой от pvvx, поэтому сказать за нее не могу.
Что не доделано у меня, то описано. Могу повторить и описать где-либо ещё раз. Реализация моей TCP2UART кривоватая, т.к. первоочередная задача была разная - минимум потребляемых ресурсов для вставки других функций, кроме uart-моста и показать, что данная задача TCP-UART реализуема на ESP8266 до скоростей в 3 Мегабита в секунду, а у WEB интерфейса (TCP) до 1.2 Мегабайта в сек.
 

PostLast

Member
lsm, " залить прошивку на NodeMCU" имеется в виду плата NodeMCU? но у меня на версии 0.9 не поддерживается из вашего прошивальщика управление прошивкой сигналами DTR RTS. кстати Плата NodeMCU шется на 921600. Может стоит иметь настройки?
У меня не получилось связать два ваших модуля между собой без внешних точек доступа. Это из-за ограничений AP + WPA? Вы можете сделать скриншоты работающей связки 2 модулей?
 

tsuman

New member
Работает прошивка весьма криво.... Отправил 5 сообщений - дальше работать отказывается. Попробовал перепрошить - не шьется.
 

lsm

Разработчик Smart.js
Команда форума
lsm, " залить прошивку на NodeMCU" имеется в виду плата NodeMCU? но у меня на версии 0.9 не поддерживается из вашего прошивальщика управление прошивкой сигналами DTR RTS. кстати Плата NodeMCU шется на 921600. Может стоит иметь настройки?
У меня не получилось связать два ваших модуля между собой без внешних точек доступа. Это из-за ограничений AP + WPA? Вы можете сделать скриншоты работающей связки 2 модулей?
@PostLast уточните как вы связываете модули. Оба модуля работают в режиме STA, подключаются к внешней WiFi сети, один сконфигурирован как TCP клиент (выставлен Remote Server IP/Port в Web UI, указывающий на ANOTHER_MODULE_IP:8910), другой - как сервер (Remote Server IP/Port в Web UI пустой) ?
 

lsm

Разработчик Smart.js
Команда форума
Работает прошивка весьма криво.... Отправил 5 сообщений - дальше работать отказывается. Попробовал перепрошить - не шьется.
@tsuman поправим :) Скажите на чем тестировали, и как отправляли данные.

BTW, прошивальщик также работает в режиме CLI, и у него есть много настроек которые не выведены в GUI. --help показывает все опции. На NodeMCU2 попробуйте перепрошить с такими параметрами:

flashnchips.exe --gui --console-log=console.log -V 3 --esp8266-flash-params=0x0240 --overwrite-flash-fs

Для e.g. ESP-01 нужно использовать --esp8266-flash-params=0x0000
 

lsm

Разработчик Smart.js
Команда форума
Выходит несколько минут, более 5. Что я делаю не так?
Т.е. при повторном открытии соединения и вливания данных в RX UART ESP8266 на 115200 в разумных пределах (100 байт, через задержку), нет их прохода в TCP на другой стороне (или зависон указанный выше). При этом отосланные данные в TCP выходят на TX UART ESP8266, если не зависло.
PS: а я наделся, что кто снимет с меня дальнейшее продолжение темы TCP2UART :(
@pvvx - спасибо!
Скажите в каком режиме тестировали,
a) TCP клиент или сервер,
b) STA или AP,
с) WPA или без

BTW - запрос "GET /\r\n\r\n" не стандартный, лучше слать "GET / HTTP/1.0\r\n\r\n"
 

pvvx

Активный участник сообщества
Скажите в каком режиме тестировали,
a) TCP клиент или сервер,
b) STA или AP,
с) WPA или без
По умолчанию, после прошивки. Ничего не менял, кроме галочки вывода отладки. Это первая стадия у любого тестера.
BTW - запрос "GET /\r\n\r\n" не стандартный, лучше слать "GET / HTTP/1.0\r\n\r\n"
Лучше - это как? Опубликуйте и смените HTTP на лучший стандарт.
А HTTP/0.9 и HTTP/2 тоже не поддерживается?
"Спецификация HTTP/2 была опубликована как RFC 7540 в мае 2015."
 
Последнее редактирование:

pvvx

Активный участник сообщества
Вроде так: Поставил с внешнего USB-UART вывод на пин RX пакетов в 100 байт через N ms (100 и N - не принципиально), на компе прогу приема и открытия TCP. Жмыкаем кнопу в проге открыть и закрыть соединение - в итоге прием в прогу блоков после какого-то соединения (иногда и со второго) закончится и не возобновится, а передача на ESP8266 работать будет.
Предполагаемые причины (исходника же нет) - потеря указателя, неверное управление UART регистрами (OR или AND с не запрещенным прерыванием UART) и подобное, включая перехлест событый иногда связанные с простыми вещами - с закрытием TCP у которого забито окно приема...
 
Последнее редактирование:

PostLast

Member
lsm, я вроде написал "У меня не получилось связать два ваших модуля между собой без внешних точек доступа." С внешней точкой только ленивый не работает плюс при этом прямая связка модулей убирает все неопределенности - только ваш проект.
 
Сверху Снизу