• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 сек надо ждать если оборвать передачу при помощи "+++". Правда, оборвать передачу у меня никак не получается.
 
Сверху Снизу