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

Over-The-Air (OTA) на библиотеке малого webсервера

vad7

Active member
Добавил в Rapid_loader обновление по WiFi (OTA) - при загрузке копирует прошивку с места расположения WebFS на основное место.
Лежит здесь: Rapid_Loader_OTA

Доработанный веб-сервер (web_srv.c, upload.htm) здесь: PowerMeter

Если в веб-сервере оставить только Web и убрать отладку, то влазит в платы с 512k.
 

pvvx

Активный участник сообщества
Добавил в Rapid_loader обновление по WiFi (OTA) - при загрузке копирует прошивку с места расположения WebFS на основное место.
Лежит здесь: Rapid_Loader_OTA

Доработанный веб-сервер (web_srv.c, upload.htm) здесь: PowerMeter

Если в веб-сервере оставить только Web и убрать отладку, то влазит в платы с 512k.
Зачем увеличен размер загружаемой ROM-BIOS части лоадера?
Его наоборот надо уменьшить, перенеся первые две команды отключения WiFi и CLK в flash часть. Разница до их исполнения всего в несколько команд CPU, а увеличение размера загружаемой части увеличивает время загрузки на большее время -> растет потребление. И если уж перерабатывать, то в Flash часть лоадера надо добавить переключение частоты CPU на 160 MHz с установкой для этого PLL. Примеры даны.

Так-же можно совместить китайские процедуры установки нового лоадера и информации по нему. Для информации по области g_ic.g.boot_info[] добавлена в info\libs\main\user_interface.c ... Чтобы работали всякие system_get_boot_version(), system_get_userbin_addr(), system_restart_enhance(), ...

На 512к flash OTA не актуальна, т.е. решается по другому.
Надо ужать ещё китай-либы, выкинув лишнее и сделать прошивку для типа flash 256к.
Тогда в кешируемую область (1Мег) лезет 4 прошивки, хоть каждая со своими настройками WiFi и переписывать в flash ничего не надо. А в текущих используемых для Web-свалки частях либ от китайцев есть что выкидывать и не мало... но т.к. Web-свалка не законченный проект, а либа, то оно оставлено для разработчиков. Под конкретный проект надо этот хлам удалять.
Есть и другие варианты. Например использование другой версии SDK для OTA. К примеру проект загрузки умещается в RAM и/или в flash 256к (вот пример проекта на 256к Модуль управления по WIFI RGB лентой на ESP6266).
 
Последнее редактирование:

vad7

Active member
Увеличения времени загрузки с 44 мс до 51 мс.
7 мс для моей задачи уже не критично. Все равно меньше 44 мс не сделать.

Понятно, что нет предела совершенству, но мне нужно обновлять по воздуху вашу веб-свалку уже сейчас, а альтернативы пока нет.
 

pvvx

Активный участник сообщества
Увеличения времени загрузки с 44 мс до 51 мс.
7 мс для моей задачи уже не критично. Все равно меньше 44 мс не сделать.

Понятно, что нет предела совершенству, но мне нужно обновлять по воздуху вашу веб-свалку уже сейчас, а альтернативы пока нет.
Но она не лезет для обновления в 512к, если есть какая функциональность кроме голого Web.
Задача стоит, но просто мне одному это решать долго. Надо многое изменить и/или делать адаптацию - адреса диска, изменение "песоницы" для обращения кусков китай-SDK к flash и ещё по мелочи... Но главное - это выкинуть лишний код из китай-кусков. А это накладывает "много времени" и при смене на новый SDK ещё раз "много времени". По этому такой путь не верен. Но есть альтернатива, но она упирается в нерешенный вопрос - как интерактивно выбирать прошивку, если их к примеру во flash несколько? GPIO не желательно - их и так мало, а на ESP-01 вообще нет.
 
Последнее редактирование:

vad7

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

pvvx

Активный участник сообщества
По поводу альтернативы - можно слепить Web со страницей выбора, какую дальше прошивку грузить и в нем OTA и он укладывается в 256к.
Это тоже дает ограничение - flash только от 1M.
Выходит "чистый" модуль сразу с программатором :) По типу ESP_DOWNLOAD_TOOL, но в HTML виде. Далее грузим прошивку, или несколько. При старте проверяется - есть ли прошивки и если нет опять запускается этот ESP_HTTP_DOWNLOAD_TOOL. Ну или из любой уже запущенной прошивки будет возможность запустить его разово через "специальную перезагрузку".
 
Последнее редактирование:

vad7

Active member
Проект счетчика с обновлением прошивки по воздуху дописан, чтобы работало обновление свободного места осталось еще 12900 байт.
 
Последнее редактирование:

vad7

Active member
очень интересна мне возможность ОТА.
Это работает таким образом в новой версии, которая еще не выложена (доделываю снятие показаний со счетчика Меркурий - PowerMeter-IrDA):

1. Веб сервер грузит в память целиковую прошивку firmware.bin на место вебдиска, если флеш размером 512кб или после вебдиска, если флеш больше.

2. Далее модуль перезагружается и загрузчик с ОТА копирует прошивку на 0 адрес.

3. Если флеш 512к, то после этого нужно будет еще загрузить вебдиск, зайдя на модуль через браузер.

Загрузчика 4 версии - по размеру памяти и по скорости флеши (40/80 МГц).

Также сделал супер маленькую прошивку, выводит только приглашение загрузить прошивку, чтобы можно было обновиться в 2 стадии на 512к модуле, если код основной прошивки уже не лезет.
При компиляции выводит сколько места осталось.

Сама загрузка прошивки находится в web_srv.c.
То что еще изменено, по сравнению с вебсвалкой, описано на странице PowerMeter в гитхабе.
Кроме этого есть еще мелкие доработки и улучшения, если вижу, что код можно с оптимизировать и не лень - сразу правлю.
 
Последнее редактирование:

aloika

Active member
Это работает таким образом в новой версии, которая еще не выложена (доделываю снятие показаний со счетчика Меркурий - PowerMeter-IrDA):
А планируете эту доработанную версию выложить? Это было бы очень здорово.

Я попробовал то, что сейчас выложено - работает. Но новая прошивка копируется всегда на место web-диска, правильно я понял? И работает только с тем rapid_loader_ota, который в PowerMeter, а с тем, который в отдельном репозитории - не работает, видимо, в нем уже что-то обновлено.
Потом еще такой момент - если после загрузки новой прошивки и перезагрузки модуля не дождаться копирования новой прошивки на место старой и отключить питание модуля - что произойдет?
Еще почему-то из Оперы файл не загружается, из Хрома-нормально.

А вообще, я считаю - это очень полезная и нужная возможность, классная штука :)
 

aloika

Active member
В маке файле задается размер флеши - SPI_SIZE.
С вашим make вообще мой проект не работает, уходит в циклическую перезагрузку.
Задаю в своем make SPI_SIZE 4096 - перестает ОТА работать - файл новой прошивки заливается, но не применяется, просто теряется web.
В общем, надо разбираться вдумчиво, сразу с наскока не получается.
Очень жду вашу доработанную версию.
 

aloika

Active member
vad7, там ещё какая-то проблема в веб-сервере (наверное), при каких-то условиях начинает писать max connections! и иногда даже перезагружаться по wdt. В оригинальной сборке от pvvx работает всё нормально, таких проблем нет. Почему я подозреваю web_srv.c - просто я его взял ваш целиком и убрал оттуда только моменты, связанные с внешней eeprom.
В общем, я тогда пока перестаю ковырять ваш проект, буду ждать новую версию - и потом уже смотреть и прикручивать к своему.
 

vad7

Active member
Надо будет похоже откатить последние изменения pvvx после версии sdk 2.0.
У версии по управлению вентиляцией: sys 0.6.0, sdk 1.5.2, webver 0.1.4 аптайм с 19 декабря.
Отлаживать тяжело - у меня в локалке все работает, а начинаешь выкладывать на удаленный модуль через инет, вылезают косяки и отладкой не посмотришь...
 

aloika

Active member
У версии по управлению вентиляцией: sys 0.6.0, sdk 1.5.2, webver 0.1.4 аптайм с 19 декабря.
Аптайм много от чего зависит, и в общем случае не показатель. У меня на одном устройстве с этой же sdk был аптайм 97 дней.

Сейчас у меня вроде бы стабильно работает версия с sdk 2.0.0 с единственным изменением, описанным здесь: Разработка ‘библиотеки’ малого webсервера на esp8266.

А вообще я все изменения, которые делаю в оригинальной сборке pvvx, документирую для себя в отдельном файлике, чтобы потом не забыть - что менял, что не менял. А свой код стараюсь выносить в отдельные файлы, например, свои дополнения в web_int_vars.c, web_int_callbacks.c и т.д. Выходит новая версия "свалки" - я в нее закидываю свои файлы, вношу минимальные изменения по списку - и всё.

Это я к тому, что было бы очень здорово, если бы ОТА был вынесен в отдельные файлы, а в оригинальном web_srv.c были бы просто соответствующие вызовы, и всё. Это я не в претензии нисколько, вы как доделаете функционал - я именно так и постараюсь сделать.

Вот, например, сейчас - я заменил web_srv.c на ваш (с изменениями), webfs.c на ваш и соответствующий .h . Появились глюки :) но, по крайней мере, область поиска глюков ясна - удобно.
 

vad7

Active member
@aloika, у меня с sdk 2.0 в модули 512к не лезет. Поэтому приходится выкручиваться.
От последней сборки вебсвалки правки tcp тоже прикручены, надо видать откручивать или докручивать...
И если бы только с ОТА была заморочка, так кроме него еще хватает вставок.
Если нужен только ОТА - скопируйте upload_boundary() и OTA_write_header() с переменными.

Сейчас на удаленном устройстве не грузится более 80 кил - соединение рвется.
А на локале все впорядке.
Вот думаю как прикрутить вывод отладки в udp, чтоб посмотреть в чем дело.

Причем скачивает с модуля влёт, хоть мегабайт, а вот аплоад затыкается.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Причем скачивает с модуля влёт, хоть мегабайт, а вот аплоад затыкается.
Может проблемы - конфликт WiFi с процессами записи flash. Неоднократно делались разные варианты обхода этого глюка в SDK (перестановка последовательности вызова процедур и прочее), но он разный, в зависимости от версии SDK...
 

АндрейМ

New member
Причем скачивает с модуля влёт, хоть мегабайт, а вот аплоад затыкается.
Такая фигня случается и от внешних факторов = например рядом два роутера кинетик на "автоматической" частоте. Коротко - загаженные частоты и кривой 802.11 на роутере.
 

vad7

Active member
А у меня в настоящий момент все устаканилось (тьфу, тьфу, тьфу).
OTA работает устойчиво.
Я там, правда, запретил некоторые прерывания на момент записи и использую только посекторную очистку.
 

viknull

New member
А у меня в настоящий момент все устаканилось (тьфу, тьфу, тьфу).
OTA работает устойчиво.
Я там, правда, запретил некоторые прерывания на момент записи и использую только посекторную очистку.
Хотелось бы посмотреть на ОТА, попробовал собрать PowerMeter-IrDA-master с github, но там видать много поломалось. (нет файла flash_eep.h, но даже если его положить(из WirelessCO2) , сыпят другие ошибки redeclaration, conflicting types...). Где-то можно взять рабочую версию?
 
Сверху Снизу