• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

После прошивки сохраняются данные из предыдущего скетча

Интересная фича обнаружилась: если загрузить скетч в котором подключаемся к Wifi в режиме клиента(WiFi.begin(ssid, password)), а потом перепрошить другой скетч в котором Wifi запустить в режиме точки доступа( WiFi.softAP("ssid1", "password1")) то функция WiFi.printDiag(Serial) выводит имя сети и пароль из первого(!) скетча, которые вроде как должны быть уже затерты при перепрошивке.
То что printDiag выводит данные подключения в режиме клиента даже если устанавливать режим "только точка доступа"(WiFi.mode(WIFI_AP)) это можно понять - параметры подключения хранятся в разных переменных. Но вот то что перепрошивка не стирает эти данные это странно.
Приводит ли это к каким то проблемам не знаю, но эффекты могут быть неожиданные - например модуль подключится к точке доступа хотя вы в своем коде этого совсем не планировали.
 

JustACat

Moderator
Команда форума
АлександрН, тут дело какое - есть в ESP разные места, куда сохраняются отдельно эти настройки.
Поэтому варианта два:
- либо в программе изначально делать инициализацию всей этой периферии ESP, настройки которой хранятся в особых областях (то есть не нужен вам, скажем AP режим WiFi - значит надо его жестко отключить, а не надеяться, что он отключен). Имхо - это самый верный вариант. Я вообще привык никогда не полагаться на авось в программировании, переменные всегда зануляю при объявлении (даже если это вроде как делается автоматом) и т.д.
- либо надо для Arduino IDE сделать некие опции загрузки прошивки (это уже к авторам этой всей фабрики), как сделано на целях в эклипс (пример расписан по UDK вот тут). Делать жесткое обнуление этих областей при каждой прошивке, имхо, точно не стоит. Не всегда это нужно, зачем зря шить...
 
JustACat, первый вариант теоретически понятен, но это ж надо знать что затирать(что пользовал в предыдущих скетчах не всегда и вспомнишь) и в данном случае не очень понятно как это сделать. Можно конечно сначала запустить Wifi в режиме клиента с левыми данными(пустыми) и только после этого переключиться в режим AP - но это совсем криво.
Насчет второго способа: я как раз и пишу сюда в надежде что автор прочтет. Так было рекомендовано в статье на этом сайте.
И вот кстати насчет полной перепрошивки со стиранием всего что только можно: вопрос как это сделать? Может есть какая утилита которая полностью перепрошивает модуль? Что-то типа фэктори ресет. А то у меня есть уже пару модулей которые как то странно работают: один вообще wifi не хочет поднимать, второй работает только в режиме клиента, точка доступа не поднимается. Может это как раз из-за каких-то сохранившихся некорректных данных...
 

JustACat

Moderator
Команда форума
АлександрН, ну, понятно, что надо знать :) Ну так на то мы и программисты и должны знать ту область, с которой работаем :) По крайней мере стремиться к этому. Если сами программисты будут полагаться на то, что за них кто-то что-то сделал, то мир рухнет. Потому что все прочие люди (кто не программирует этот мир) как раз надеются на то, что программисты сделают все правильно, и какая-нибудь железка в очередной раз не оторвет им руку или ногу.

Теперь по существу:
- зачем запускать сначала с левыми данными? Не понял немного... Выполняете при старте программы отключение Station и включение AP (либо наоборот). В Sming это делается так:
Код:
WifiStation.enable(true или false);
WifiAccessPoint.enable(true или false);
Как в Arduino IDE - не подскажу, это уже да - к разработчикам, либо самостоятельно поизучайте исходники библиотек, уверен, там можно найти это.
- по поводу полной прошивки: прошейте любую заводскую на 512 килобайт, например, тут недавно было.

Ну а остальное - остальное да - к разработчикам Arduino IDE. Вы, в принципе дельные вещи спрашиваете, так что. будем надеяться, они учтут.
 

pvvx

Активный участник сообщества
в ESP разные места, куда сохраняются отдельно эти настройки.
Они всегда сохраняются в последние 3 сектора flash, если она до 1 Мбайта. Там находится область сохранения последней конфигурации WiFi в SDK. Если это надо изменить, то меняете spi_flash.o в libmain.a на свой, который перехватывает запись конфигов из SDK. Исходник spi_flash.o дан в xlam\libs\main\spi_flash.c . Это чтобы не создавали глупых вопросов и тем
 
pvvx, спасибо за ответ, но честно говоря ничего не понял :)
Умею прошивать только из Arduino IDE
Пишу в теме по Arduino IDE т.к. мне показалось что это очень удобно программировать Arduino и ESP из одной среды. И это действительно работает, но как и всегда есть нюансы...
В общем если не сложно ткните носом как и чем прошить ESP так чтоб там ничего лишнего не осталось. Желательно чтоб можно было сделать под MacOs. Пока разработчики дорабатывают Arduino IDE буду делать такой хардресет в случае глюков.
 

JustACat

Moderator
Команда форума
АлександрН, эм, вы мое сообщение пропустили что ли? Я же написал вам, что прошить. А как - идите по ссылке документация (у меня в подписи) и там на выбор - целый миллион статей и примеров, все помечено, даже цветами раскрашено...
 
JustACat, сообщение видел, спасибо.
У меня был вопрос чем(утилита) и как собственно(инструкция) прошиваться. А то что статей и примеров миллион так это как раз и есть проблема...
Я так понял мне для мака подходит только ESPTool? Инструкцию как ей шить не нашел - поищу еще по форумам.
 

JustACat

Moderator
Команда форума
АлександрН, ну вы же написали, что под мак желательно ( но не обязательно ) :)
Под мак да - специфичненько, и тут вряд ли подскажу, хотя кто-то наверняка прошивал...
А вот если не под Мак, то все просто, тот же XTCOM_UTIL (по этому же слову искать и в моем списке статей, либо по слову "прошив")...
Но с маком не помогу...
Если найдете под мак что-то конкретное, что вам подойдет и понравится - можете поделиться там же в списке доков, поможете другим.
 
JustACat, спасибо, теперь все понятно.
Наверное ESPTool пока не буду пробовать, нужно что-то проверенное, а то выяснится потом что она тоже не все затирает... Кстати Arduino IDE использует для прошивки именно эту утилиту.
Попробую установить XTCOM_UTIL в витруалку и оттуда прошить. Если не получится то придется ходить пару шагов до компа с виндой :)
 

Victor

Administrator
Команда форума
АлександрН, используйте esptool как для мака, так и для других платформ
скачать https://github.com/igrr/esptool-ck/releases описание https://github.com/igrr/esptool-ck
есть еще питоновский скрипт https://github.com/themadinventor/esptool

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

goodwin

Member
Я как только заметил связанные с этим неудобства, добавил вот это в конец строки прошивальщика (platform.txt):
tools.esptool.upload.pattern="{path}/{cmd}" {upload.verbose} -cd {upload.resetmethod} -cb {upload.speed} -cp {serial.port} -ca 0x00000 -cf "{build.path}/{build.project_name}_00000.bin" -ca 0x40000 -cf "{build.path}/{build.project_name}_40000.bin" -ca 0x7e000 -cf "{runtime.ide.path}/hardware/esp8266com/esp8266/blank.bin" -ca 0x7c000 -cf "{runtime.ide.path}/hardware/esp8266com/esp8266/esp_init_data_default.bin"

Для чистоты экспериментов сойдет ;)
 
goodwin, вот спасибо!
Это видимо действительно то что нужно, подскажите только где взять правильные blank.bin и esp_init_data_default.bin
Обязательно попробую
Может предложить авторам вставить это в сборку? Чтоб каждый раз не править руками при переходе на новую версию
 

JustACat

Moderator
Команда форума
Например, в комплекте SDK Espressif нужной версии (там в папке bin они есть). Какая нужная - зависит от того, на какой базируется ваша версия Arduino IDE. Но, думаю, скорее всего на 1.0.0.
вставить это в сборку
Да было бы неплохо, но только с галочкой в меню где-то. Ибо это не всем нужно.
 
Сверху Снизу