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

Тупые задержки в 200 мс после отсыла пакета

DIYMan

New member
Добрый день!

Не уверен, в тот ли раздел, но спрошу здесь. Итак, что имею:

1. Только-только осваиваю модуль, балуюсь с ESP-01, версия прошивки:

AT version:0.40.0.0(Aug 8 2015 14:45:58)
SDK version:1.3.0
Ai-Thinker Technology Co.,Ltd.
Build:1.3.0.2 Sep 11 2015 11:48:04
OK

2. Что мне нужно от ESP? Собственно, вполне достаточно AT-команд, если бы не одно "НО", о котором расскажу ниже.

Есть у меня Arduino Mega, к которой подключены куча датчиков, модуль SD-карты, и, собственно, ESP-01. Реализован простенький http-сервер, который по приходу от ESP +IPD парсит запрос и выдаёт странички с SD-карты, пакетами по 2048 байт, скармливая их по AT+CIPSEND вайфайному свистку. Работа реализована асинхронно, т.е. выплюнул AT+CIPSEND в ESP, выставил флаг, что жду приглашения, вышел. Дождался приглашения > - отсылаю, получаю подтверждение отправки, перехожу к следующему пакету. Короче, всё довольно просто.

Меня бы всё устроило, если бы не идиотская ситуация, когда после отсылки пакета модуль где-то телится около 200 мс, прежде чем послать мне статус SEND OK. Ипстессно, что ни о какой нормальной скорости передачи речи в такой ситуации не идёт. Тестировал на 500Кб файле при скорости UART 57600 бод - время отдачи ~200 секунд, т.е. скорость режется вдвое. Перевёл на 115200 - отдача 150-160 секунд, скорость режется более чем в три раза, т.е. проблема - точно не в моём коде.

На офсайте Espressif нашёл вот такой топик, проблемы - один в один: No more than 2-3 packets/sec from the ESP8266? - ESP8266 Developer Zone

Собственно, вопрос: что это за бл@дство и как с этим бороться? В идеале - хотелось бы видеть AT-прошивку, в которой этот недостаток устранён. Меня вполне бы устроила скорость даже в 57600 (думаю, в 500Кб исходного кода вебморды я уложусь), но - при условии минимальных задержек при отсыле пакетов в ESP.

Где копать? Есть ли в природе более быстрая AT-прошивка, которая работает без этих идиотских задержек?

З.Ы. Да, команды, которые скармливаю ESP при инициализации:

AT+CWMODE=3
AT+CWSAP=
AT+CIPMODE=0
AT+CIPMUX=1
AT+CIPSERVER=1,80
AT+CWJAP=

Коннекчусь к ней через домашний роутер. В общем - я в печали по поводу скорости передачи :(
 

DIYMan

New member
В непонятках: AT+CIPSENDBUF отрабатывает раза в четыре быстрее, хотя - на ошибки отсылки ещё не проверял :)
 

=AK=

New member
Ну так в документации (AT rev 0.60) на АТ+CIPSEND командy прямо говорится, что по окончании пересылки пакета надо ждать аж 1 сек, прежде чем посылать новую АТ команду: "Please wait at least 1 second before sending next AT command." В описании команд AT+CIPSENDEX и AT+CIPSENDBUF этого нет, но я подозреваю что просто из-за того, что китйцы забыли там это написать.

Я пытался обойти эти тормоза, посылая по многу пакетов данных за один раз. Ставил в АТ+CIPSEND и AT+CIPSENDBUF длину 2048 и слал данные, а когда количество данных подходило к 2048 - слал "+++", надеясь, что после этого ESP отошлет данные и вернется в АТ режим. А вот хренушки, он так и оставался в режиме отсылки, пока не набиралось 2048. Но и после этого тоже ничего не отсылал, а писал, мол, ошибка.

Задал вчера вопрос на форуме Espressif о том, почему "+++" не работает, однако модеры пока этот вопрос не пропустили. Может, и не пропустят, ведь это неудобный вопрос, никакого позитива.

Документация на АТ команды абсолютно дерьмовая. Надо долго голову ломать, чтобы догадаться, что китайцы имели ввиду. И все равно приходится много пробовать, по одной документации ничего толком понять нельзя. :(
 

NutsXXXL

New member
вобще жуть какаято
в соседней ветке задержки хотябы 80мс как то получили
 

=AK=

New member
Может, я китайцев неправильно понял. В другом месте они пишут, что для AT+CIPSEND в "прозрачном" режиме интервал между пакетами должен быть 20 мс. Что дает в пределе 819.2 кбит/сек, это выше, чем бодовая скорость UART (115 кбит/сек).

Наверное 1 сек надо ждать если оборвать передачу при помощи "+++". Правда, оборвать передачу у меня никак не получается.
 
Сверху Снизу