Достаточно ли 1 МБ флэш-памяти для загрузки OTA в ESP-01?

Я задаю этот вопрос, потому что в моем ESP-01 ОТА загрузка всегда терпит неудачу. На самом деле обновление даже не начнется. Когда обновление было запущено , индикатор esp wifi(встроенный синий) показывает "работает", но через одну секунду esp сбрасывается сам. И исходная программа остается и запускается снова...

, 👍1

Обсуждение

какой размер Flash вы выбрали в меню "Сервис"?, @Juraj

1 МБ(FS:нет, OTA:~502 КБ).... согласно тому, что я прочитал в учебнике, этот OTA должен занимать не менее половины памяти для запуска propper..., @Sahasrar

попробуйте отключить брандмауэр на ПК, @Juraj

Я пытался, но безрезультатно..., @Sahasrar


3 ответа


Лучший ответ:

3

Да, 1 МБ подходит для OTA. Однако есть несколько предостережений при работе с OTA, которые вы должны соблюдать независимо от размера флэш-памяти:

  1. Максимальный размер программы OTA составляет менее половины доступного размера флэш-памяти. Обычно это около 500 КБ. Две копии должны храниться во флэш-памяти, плюс таблица разделов и NVRAM. Остальная часть флэш-памяти на более крупных чипах чаще всего предназначена для хранения FS.
  2. Сначала устройство должно быть запрограммировано через USB с разделом, совместимым с OTA.
  3. После программирования через USB его необходимо сбросить вручную или включить питание, чтобы правильно установить режим загрузки.
  4. Вы не можете изменить расположение разделов при программировании OTA. Вам необходимо убедиться, что у вас выбрана та же компоновка разделов, что и при первоначальном программировании через USB.
  5. ArduinoOTA.handle(); должен вызываться очень регулярно для обработки запроса на программирование. В вашем скетче не может быть никакого кода блокировки, который мог бы помешать его вызову.

Соблюдайте все это, и вы сможете без проблем программировать по Wi-Fi.

,

Я запрограммировал его через USB, программа работает, OTA был показан в меню "Инструменты" > "Параметры порта". Программа все еще работает... Мигает светодиод... Но когда я нажимаю Загрузить код на устройство через порт OTA, ESP зависает, и через несколько секунд IDE сообщает об ошибке: Ответа нет, но очень странно, что исходная программа выходит из строя, а esp не запрограммирован... Чем мне придется снова загружать код с USB, @Sahasrar

И приняли ли вы во внимание пункт 5?, @Majenko

каждый пункт вашего совета выполнен... Мой код составляет около 210 КБ, @Sahasrar

В моем пустом цикле есть только ArduinoOTA.handle(); больше строк нет..., @Sahasrar

@Сахасрар, пункт 3.?, @Juraj


-1

Да. 1 МБ флэш-памяти достаточно для обновления OTA.

,

На это уже указывалось в самом первом предложении существующего ответа., @sempaiscuba


2

Для загрузки OTA размер скомпилированного (старый скетч + новый скетч) не должен превышать размер флэш-памяти.

Из-за этого большие скетчи (более 500 КБ с 1 МБ флэш-памяти) не могут быть загружены напрямую, если размер скетча превышает половину размера флэш-памяти.

Однако это ограничение можно обойти, предварительно загрузив скетч только с функциями OTA, как указано ниже:


#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

char ssid[] = "xxxxxxxx"; //WiFI user id
char pass[] = "yyyyyy";   //WiFi password

#define OTA_Host_Name "ESP01S-EMPTY-OTA"

void setup()  {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);

  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    delay(5000);
    ESP.restart();
  }
  ArduinoOTA.setHostname(OTA_Host_Name);
  ArduinoOTA.begin();
}

void loop() {
  ArduinoOTA.handle();
}

Этот скрипт будет скомпилирован примерно до 300 КБ. Как только этот скрипт будет загружен во флэш-память, скрипт объемом до 700 КБ может быть загружен через OTA на флэш-память объемом 1 МБ!

Сначала загрузите этот скрипт. Затем перезагрузите контроллер и выберите "ESP01S-EMPTY-OTA" в качестве порта и загрузите новый обновленный скрипт, который вы хотите загрузить!

ВАЖНО: Брандмауэр должен быть отключен во время загрузки OTA.

,

Ты уверен? разделы выбираются в меню Сервис. можно ли это изменить с помощью OTA?, @Juraj