• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

Avasil

New member
здравствуйте, прочитал бегло все 30 с лишним страниц данной темы. Может повторюсь, заранее извиняюсь. Алгоритм передачи TCP2UART понятен - все что приходит на ESP по WiFi тут же "транслируется" в UART. А что будет если отправить данные на ESP по UART? Есть возможность в этой прошивке отправлять данные на ESP по UART, а он тут же отправлял их через TCP подключенному к нему клиенту (так называемый мост UART2TCP)?

Решается задача - ESP выступается в качестве TCP-сервера; к нему коннекчусь по WiFi с ноутбука при помощи написанного ПО. ESP по UART соединен с другим МК. Необходимо по запросу от компьютера получать данные, хранящиеся на МК (4 пакета по 8 байт). Проблема в той самой задержке в 200 мс. Эти 4 пакета нужна получать хотя бы раз 5 в секунду, но на деле 1 раз в секунду (при помощи AT команды "AT+CIPSEND", нужно делать паузу между командами) с горем пополам - все время вылетает "busy s...".
 

pvvx

Активный участник сообщества
Есть возможность в этой прошивке отправлять данные на ESP по UART, а он тут же отправлял их через TCP подключенному к нему клиенту (так называемый мост UART2TCP)?
Да. Только при дуплексе могут быть ограничены скорости на прядке 1.5..3 мегабита UART. Связано с полосой WiFi и производительностью ESP8266.
Решается задача - ESP выступается в качестве TCP-сервера; к нему коннекчусь по WiFi с ноутбука при помощи написанного ПО. ESP по UART соединен с другим МК. Необходимо по запросу от компьютера получать данные, хранящиеся на МК (4 пакета по 8 байт). Проблема в той самой задержке в 200 мс. Эти 4 пакета нужна получать хотя бы раз 5 в секунду, но на деле 1 раз в секунду (при помощи AT команды "AT+CIPSEND", нужно делать паузу между командами) с горем пополам - все время вылетает "busy s...".
4-ре пакета, даже с паузой в 200 мс выходит 800 мс+ пинги.
Если в момент передачи с ESP, на него посылаете байтики, к примеру с паузой в 50 мс, то любой алгоритм TCP стека пошлет с ними подтверждение приема, не ожидая паузы. На данной реализации, даже если приемник имеет кривой алгоритм с 200 мс ожидания, то посылка в UART ESP 2-х подряд байт/блоков с паузой более 2.5 символа вызовет передачу 2-х пакетов и ожидания у приемника не будет.
А пока не понято - с чем боритесь - ожидание на стороне приемника ("ноутбука при помощи написанного ПО")?
 

pvvx

Активный участник сообщества
Вот для примера:
Замыкаем на модуле RX-TX и шлем на него "123" с паузой в 50 мс. Он принимает, выводит в TX UART и принимает это-же (для теста) на RX UART и отсылает обратно:
Снимок1441.gif
Поток на стороне компа или роутера (это без разницы):
Снимок1439.gif
Выходит, что каждые 47.4 + 2.6 мс (~50 мс) передается блок на UART модуля и принимается с него в комп.

То-же самое, если сократить паузу до 3-х мс:
Снимок1442.gif
Во втором столбце время в сек между пакетами.
 
Последнее редактирование:

Avasil

New member
pvvx,@pvvx спасибо за развернутый ответ!
Замыкаем на модуле RX-TX и шлем на него "123" с паузой в 50 мс. Он принимает, выводит в TX UART и принимает это-же (для теста) на RX UART и отсылает обратно
я правильно понял, в вашей прошивке для того чтобы отправить сообщение с ESP не нужно ему предварительно слать AT+CIPSEND? а просто отправить сообщение на RX UART ESP? o_O


А пока не понято - с чем боритесь - ожидание на стороне приемника ("ноутбука при помощи написанного ПО")?
мне необходимо с МК через модуль ESP на ноутбук отправить 4 пакета друг за другом (AT+CIPSEND = 8 > пакет №1, ..., AT+CIPSEND = 8 > пакет №4), и если не делать большую паузу между отправками команд на ESP, то модуль отправляет только пакет №1, при отправке следом №2, №3, №4 пишет три раза "busy s...", затем "SEND OK". На ноутбук приходит естественно только пакет №1. Делая большую паузу между командами AT+CIPSEND отправить полный набор пакетов удается только 1 раз в секунду, а нужно хотя бы раз 5.

p.s. Знаете, пока писал это сообщение и осмысляя ваше сказанное ко мне в голову пришла очевидное решение "а почему эти 4 пакета по 8 байт не накопить на стороне МК и не выдать как 1 пакет в 32 байта на ESP" почему то раньше и в голову не приходило. :oops:o_O
 

pvvx

Активный участник сообщества
я правильно понял, в вашей прошивке для того чтобы отправить сообщение с ESP не нужно ему предварительно слать AT+CIPSEND? а просто отправить сообщение на RX UART ESP? o_O
Нету никаких "AT" команд. UART работает и с RTS/CTS сигналами, говорящими что соединение открыто и работает.
Отправка отличается от "AT" прошивок - нет ожиданий в 200 мс.
 

Avasil

New member
@pvvx, спасибо тебе огромное! Твоя прошивка - это просто супер, то что я искал! Все работает на ура - как часы! :D:);):p:cool: Никаких АТ команд, просто пишу в UART и сразу летит по TCP))
 

FGX

Member
Всех с праздниками! Напомните, пожалуйста, как скомпилировать прошивку в 1 файл, давно не пользовался 8266, а тут хочу опять поиспользовать, из Эклипса шьется все отлично, но он делать кучу файлов для разных областей памяти, когда-то был 1 файл и его можно было шить через TCP2UARTFlasher с нулевого адреса и он прошивал всю память целиком разом.
Или скажите все адреса, а то в описании нет адресов веб морды и рапид чего-то.

Как шить.png

0.bin и rapid_loader_40m шить вообще не нужно? это чисто для ускоренной загрузки через эклипс? А WEBFiles можно сразу прошить, чтобы отдельно не загружать?

Вроде WEBFiles нужно заливать по адресу 0x3E000, но это работает только если памяти 512кбайт, если больше то только через WEBFS22. Все верно? Но когда нет морды, невозможно настроить свою точку доступа(кроме того чтобы в прошивке свою указать что не гуд), придется только временно точку доступа на роутере переименовывать?
 
Последнее редактирование:

pvvx

Активный участник сообщества
Но когда нет морды, невозможно настроить свою точку доступа(кроме того чтобы в прошивке свою указать что не гуд), придется только временно точку доступа на роутере переименовывать?
Она сама после прошивки работает в режиме AP с именем ESP8266 и без пароля.
И в Releases · pvvx/esp8266web · GitHub даны прошивки одним файлом, хотя и старые, но имеют всего одну глобальную ошибку - в функции запросов по установке подтяжек портов (если их не использовать, то вроде всё ok).
 

FGX

Member
Я использую esp8266web-0.6.1_SDK_1.5.4, самый новый виснет в эклипсе на 98%, причем он пересобирает проект бесконечно. Из глюков, на скорости уарта 6666666 иногда зависает и скорость падает, переподключаешься и норм, не тянет видимо, на скорости 3 мегабита стабильнее. В принципе ничего страшного, точку доступа в роутере переименовать можно и все, автоподключение только в коде включить. Про то, что она работает как точка доступа AP с именем ESP8266 и без пароля это понятно, просто с роутера я к ней не подключусь, а с телефона не залью WEBFiles.bin, можно с ноутбука, но это уже так, экзотика для меня, проще роутер перенастроить. А не страшно шит по адресу 0x3E000 WEBFiles.bin, если памяти больше 512кбайт, ничего я там не затираю?, хотя все работает. И если памяти 512кбайт, то адрес правильный?, просто на ESP8266 V07 не проверял.
 

pvvx

Активный участник сообщества
Я использую esp8266web-0.6.1_SDK_1.5.4, самый новый виснет в эклипсе на 98%, причем он пересобирает проект бесконечно.
Там надо всё правильно выставить... и используется Eclipse уже версии Neon
 

FGX

Member
Там надо всё правильно выставить...
Как только я добавляю этот проект в Эклипс Марс, так он сразу начинает собирать его, и виснет на 98%, прошлые сборки он сам не начинал собирать, но раз Эклипс более новый, может из-за этого, скачаю, проверю. По адресам дважды спросил и ничего, ну буду считать молчание - знак согласия.

Обновил Эклипс, все точно также, бесконечно пересобирает проект, но нашел галочку автоматической сборки и отпустило, хотя на прошлых этого не было. Из заметного, собирался проект 11 секунд , теперь 4, не зря свой хлеб Эклипс едят.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Как только я добавляю этот проект в Эклипс Марс, так он сразу начинает собирать его, и виснет на 98%, прошлые сборки он сам не начинал собирать, но раз Эклипс более новый, может из-за этого, скачаю, проверю. По адресам дважды спросил и ничего, ну буду считать молчание - знак согласия.

Обновил Эклипс, все точно также, бесконечно пересобирает проект, но нашел галочку автоматической сборки и отпустило, хотя на прошлых этого не было. Из заметного, собирался проект 11 секунд , теперь 4, не зря свой хлеб Эклипс едят.
В теме по сборке web-свалки описано, что надо после экспорта проекта отключить Build Automatically и заодно проверить какая конфигурация для трансляции выбрана активной...
 

FGX

Member
Вот нашел наконец "Можно записать WEBFiles.bin и программатором по адресу 0x80000." А самое прикольное, что это и в readme.txt было написано, просто не заметил, единственное, что не сходится - это адрес, если 512 кбайт, - 0x39000 или 0x3E000?
 
Последнее редактирование:

FGX

Member
Проверил битрейт уарта 13333333, работает. Правда от этого толку нет, прирост 14% относительно скорости 6666666 (должно быть 50%). А вот 6666666 относительно 3076923 дает прирост 42%.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Проверил битрейт уарта 13333333, работает. Правда от этого толку нет, прирост 14% относительно скорости 6666666 (должно быть 50%). А вот 6666666 относительно 3076923 дает прирост 42%.
Там не хватает производительности ESP8266, т.к. у него нет DMA для UART. Все ресурсы сжирает ковыряние в регистрах UART по медленной внутренней системной шине работающей с тактированием от кварца (до 26 МГц - > от 12 тактов на операцию обращения к внутренней периферии при 160 МГц CPU, хотя чип и ROM-BIOS разрабатывался на 40 МГц кварц, но видимо не пошел или жрет много...всё как всегда у горе Espressif...).
По тому у ESP8266 теоретический предел* примерно на 5 Мбит/сек UART + прием/передача по WiFi.
По SPI примерно те-же проблемы, но итого немного более...
У дешевых переходников USB-UART предел к 3 Мбит/сек и более не требуется, т.к. при этом у них уже работает RTS/CTS на каждый блок передачи FIFO по USB Full-Speed. Т.е. они уже не способны принимать непрерывный поток в 3 Мбит/сек.

* по теории, при максимуме оптимизации.
 
Последнее редактирование:

FGX

Member
У дешевых переходников USB-UART предел к 3 Мбит/сек и более не требуется, т.к. при этом у них уже работает RTS/CTS на каждый блок передачи FIFO по USB Full-Speed. Т.е. они уже не способны принимать непрерывный поток в 3 Мбит/сек.
в моем случае, с моей стороны ограничения нет, четко 13Мбит выдаю по ДМА, проц в это время спит, чтобы не мешать. Хотя 3Мбита самое то для 8266, на 6.6 он уже сбоит, если вайфай загружен или еще что, начинает скорость плавать, дергать, как-то не ахти и выбраться сам он уже не может из такого, переподключать соединение нужно, а на 3Мегабита работает стабильно, можно и мощность на 1 выставить, какая-никакая экономия.
 
Сверху Снизу