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

Проблема с прошивкой по ОТА

user2222

New member
Добрый день. Год назад собрал себе датчик температуры на ESP8266, повесил его на улице и он до сих пор работает. Но тут мне захотелось немного подправить кое-что в скетче и при попытке залить в ESP новый код получаю ошибку
[ERROR]: Bad Answer: ERR: ERROR[4]: Not Enough Space

выбранный последовательный порт
не существует или плата не подключена к нему
На момент сборки и отладки проблем с прошивкой по ОТА не возникало. Что это может быть? За год работы память чем-то забилась? Есть ли возможность исправить эту ситуацию без перепрошивки по проводам?
 

pvvx

Активный участник сообщества

user2222

New member
Попробуйте сразу после перезагрузки есп, например передергиванием питания.
Пробовал, не помогает
  • Откройте IDE Arduino, а затем кликните на Инструменты > Порт (Tools > Port). Вы должны увидеть что-то вроде «esp8266-xxxxxx», имеющее IP-адрес, показанный ранее в мониторе порта.
Думаете, я не знаю что нужно выбрать порт?
В доме есть еще одна железка на ESP, прошивается по воздуху без проблем. Кроме этого взял NodeMCU залил туда измененный код и несколько раз потом перезалил по воздуху тоже без проблем. Перебрал всемозможные варианты Flash Size 4MB - ничего не дало.
 

CodeNameHawk

Moderator
Команда форума
Пробовал, не помогает
Я так понял, у вас не видно устройство, MDNS.update(); добавили в цикл?

Обычно мешает прошиваться по ОТА "долгие" функции, достаточно по натыкать delay и может не работать.
Как у вас с памятью, не утекает?
И если есп ходит в интернет, то бывают затыки при ухудшении интернета.

Я применяю такой подход, в основном цикле, перед каждой функцией, что работает с сетью(или с интернетом) ставлю проверку
if (WiFi.status() == WL_CONNECTED) ...
Получается, что когда нет соединения с сетью, есп работает автономно.
В таком случает, после перезагрузки всегда есть возможность прошить через ОТА.
 

user2222

New member
Я так понял, у вас не видно устройство, MDNS.update(); добавили в цикл?
Если вы про ArduinoIDE то ESP я там вижу.
MDNS.update(); добавили в цикл?
Нет, сама библиотека ESP8266mDNS.h используется, но MDNS.update(); в скетче нет.
Обычно мешает прошиваться по ОТА "долгие" функции, достаточно по натыкать delay и может не работать.
delay не использую. Только millis() и встроенную в библиотеку BlynkSimpleEsp8266.h BlynkTimer (может в нем есть delay, надо глянуть).
Как у вас с памятью, не утекает?
Как это узнать?
И если есп ходит в интернет, то бывают затыки при ухудшении интернета.
ESP соединяется только с сервером BLYNK. Думал может сигнал WiFi слабоват, поставил роутер в прделах прямой видимости (метров 5) - ничего не помогло.
 

pvvx

Активный участник сообщества
Думаете, я не знаю что нужно выбрать порт?
Имелось в виду, что выбран не тот адрес...

А на счет "не хватает памяти", то т.к. используется модель "heap4/5" то она может быть дефрагментировна и не иметь необходимого непрерывного блока для OTA. Это беда использования C++.
Такие модели "heap" не используются для устройств рассчитанных на долговременную работу (без частой перезагрузки, т.е. для отработки одной функции за одну перезагрузку) и для отказоустойчивых систем.
Обычным запросом "сколько свободно памяти" это не узнать.
 

user2222

New member
т.е. нужно снимать ESP и перепрошивать по проводу, другого выхода не остается?
 

pvvx

Активный участник сообщества
Впишите обработку команды перезагрузки и таймер перезагрузки, чтобы такого не повторилось в следующий раз.
 

pvvx

Активный участник сообщества
Это как, не подскажите? ESP.reset() по таймеру ?
Типа того. Я не могу "подсказать", т.к. давно не использую глюкодром ESP8266. Надеюсь другие подскажут, но всё равно вам придется адаптировать код под свой проект, а описания его вы не привели...
 

pvvx

Активный участник сообщества
Алгоритмически возможно вписать такое:
Когда устройство "бездельничает" и время таймера перезагрузки истекло, тогда:
1. запросить большой кусок памяти и если не дает, то - перезагрeзка.
2. если дает, освободить и продолжение с переназначением таймера.
Необходимый размер блока нужно узнать расковыряв OTA и добавить какие-то проценты...
 

pvvx

Активный участник сообщества
Да, всё это хорошо и нужно вставить, т.к. оно обязательное для отказоустойчивости, но вы пока не выяснили истинную причину.
 

user2222

New member
А на счет "не хватает памяти", то т.к. используется модель "heap4/5" то она может быть дефрагментировна и не иметь необходимого непрерывного блока для OTA. Это беда использования C++.
Такие модели "heap" не используются для устройств рассчитанных на долговременную работу (без частой перезагрузки, т.е. для отработки одной функции за одну перезагрузку) и для отказоустойчивых систем.
Обычным запросом "сколько свободно памяти" это не узнать.
Долговременная работа - это сколько? Час, день, неделя, месяц... ? До вчерашней перезагрузки аптайм составил где-то 27 дней
 

pvvx

Активный участник сообщества
Долговременная работа - это сколько? Час, день, неделя, месяц... ? До вчерашней перезагрузки аптайм составил где-то 27 дней
Долговременная работа - для меня и то, что изготавливает наша контора своего - это 10 лет минимум.
Arduino столько не живет. А что там у вас и какой желателен цикл - неизвестно.
 

pvvx

Активный участник сообщества
Вы роутер можете выключить? Вот по нему, по обрыву связи, пусть и перезагружается. Хотя бы такую простую реализацию...
 

yurik72

Member
Из своего опыта добавлю, у меня возникало проблема прошивки через OTA, устройство просто падало и перегружалось в какой то момент, и после долгих ковыряний в коде и поиске ошибок, проблема оказалась в питании. Само устройство могло работать месяцами без перегрузки, использовало короткие пакеты для сброса данных в инет. А на OTA не хватило. Помог обычный конденсатор на 1000 мкф по линии 3.3 V. Советуют ставить танталовый еще, но у меня не оказалось
 

CodeNameHawk

Moderator
Команда форума
т.е. нужно снимать ESP и перепрошивать по проводу, другого выхода не остается?
Если она прошивалась по ОТА, то попробуйте отключить есп, перезагрузить комп и роутер, запустить есп и только тогда запустить ардуиноиде.
 
Сверху Снизу