• Система автоматизации с открытым исходным кодом на базе 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...). Где-то можно взять рабочую версию?
 
Сверху Снизу