• Система автоматизации с открытым исходным кодом на базе 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, я вроде написал "У меня не получилось связать два ваших модуля между собой без внешних точек доступа." С внешней точкой только ленивый не работает плюс при этом прямая связка модулей убирает все неопределенности - только ваш проект.
 
Сверху Снизу