Достаточно ли 1 МБ флэш-памяти для загрузки OTA в ESP-01?
Я задаю этот вопрос, потому что в моем ESP-01 ОТА загрузка всегда терпит неудачу. На самом деле обновление даже не начнется. Когда обновление было запущено , индикатор esp wifi(встроенный синий) показывает "работает", но через одну секунду esp сбрасывается сам. И исходная программа остается и запускается снова...
@Sahasrar, 👍1
Обсуждение3 ответа
Лучший ответ:
Да, 1 МБ подходит для OTA. Однако есть несколько предостережений при работе с OTA, которые вы должны соблюдать независимо от размера флэш-памяти:
- Максимальный размер программы OTA составляет менее половины доступного размера флэш-памяти. Обычно это около 500 КБ. Две копии должны храниться во флэш-памяти, плюс таблица разделов и NVRAM. Остальная часть флэш-памяти на более крупных чипах чаще всего предназначена для хранения FS.
- Сначала устройство должно быть запрограммировано через USB с разделом, совместимым с OTA.
- После программирования через USB его необходимо сбросить вручную или включить питание, чтобы правильно установить режим загрузки.
- Вы не можете изменить расположение разделов при программировании OTA. Вам необходимо убедиться, что у вас выбрана та же компоновка разделов, что и при первоначальном программировании через USB.
ArduinoOTA.handle();
должен вызываться очень регулярно для обработки запроса на программирование. В вашем скетче не может быть никакого кода блокировки, который мог бы помешать его вызову.
Соблюдайте все это, и вы сможете без проблем программировать по Wi-Fi.
Я запрограммировал его через USB, программа работает, OTA был показан в меню "Инструменты" > "Параметры порта". Программа все еще работает... Мигает светодиод... Но когда я нажимаю Загрузить код на устройство через порт OTA, ESP зависает, и через несколько секунд IDE сообщает об ошибке: Ответа нет, но очень странно, что исходная программа выходит из строя, а esp не запрограммирован... Чем мне придется снова загружать код с USB, @Sahasrar
И приняли ли вы во внимание пункт 5?, @Majenko
каждый пункт вашего совета выполнен... Мой код составляет около 210 КБ, @Sahasrar
В моем пустом цикле есть только ArduinoOTA.handle(); больше строк нет..., @Sahasrar
@Сахасрар, пункт 3.?, @Juraj
Да. 1 МБ флэш-памяти достаточно для обновления OTA.
На это уже указывалось в самом первом предложении существующего ответа., @sempaiscuba
Для загрузки 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
- ESP8266 Аналоговое чтение мешает Wi-Fi?
- Ошибка при загрузке «Произошла фатальная ошибка esptool.py: тайм-аут записи»
- Каково использование зарезервированных контактов и контактов SDD2, SDD3 NodeMCU?
- Управление реле 5В с помощью Wemos D1 R1
- Могу ли я использовать выход 3,3 В Arduino напрямую к esp8266?
- Ошибка при загрузке кода в esp8266 через arduino (FatalError('Failed to connect to %s: %s' % (self.CHIP_NAME, last_error)))
- ESP8266 UDP multicast не принимает пакеты
- Программный последовательный конфликт с Wi-Fi на ESP8266
какой размер Flash вы выбрали в меню "Сервис"?, @Juraj
1 МБ(FS:нет, OTA:~502 КБ).... согласно тому, что я прочитал в учебнике, этот OTA должен занимать не менее половины памяти для запуска propper..., @Sahasrar
попробуйте отключить брандмауэр на ПК, @Juraj
Я пытался, но безрезультатно..., @Sahasrar