Есть проект на esp32, который использует 1,4МБ для приложения, использует OTA и 720кБ SPIFFS. По инструкции я создал свою схему распределения памяти и в Arduino 1.8 в меню Tools/Partitione Scheme она успешно отображается и проект успешно компилируется и прошивается. В Arduino 2.0 моя кастомная схема не отобразилась. Это первый момент.
Второй момент в следующем - при компиляции проекта в Arduino 2.0 я заметил, что сборшик ищет в директории проекта файл partitions.csv, и, если находит его, то копирует в свою временную папку, где происходит сборка проекта. Я подложил ему нужный файл, и нашёл его потом во временной папке. Но при этом проект не собирается, т.к. считает, что код получился больше по размеру (1,4МБ), чем в стандартной схеме (1,2МБ).
Вопросы:
Как добавить кастомную partition схему в Arduino 2.0?
Почему при компиляции проекта используется не мой файл partition.csv с кастомной схемой, а выбранный в меню Tools/Partitione Scheme, и как это побороть?
Arduino 2.0 гораздо удобнее версии 1.8, и хотелось бы в ней работать. Плюс она при создании бинарного файла создаёт их для каждого раздела, обозначенного в файле partitions.csv, чего не делает старшая версия. Мне это нужно для удаленной прошивки устройства.
По Ардуино 2.0 значительно продуктивнее будет спросить на форуме arduino.cc - там есть есть шанс что ответят сами авторы.
А у нас тут пока обсуждений второй версии очень мало.
А разве при использовании ота, не должно быть свободно минимум 50 % памяти? А иначе в один прекрасный момент, придется шить через Rx/Tx порт. Где то читал, что по воздуху, файл bin как раз падает в свободную часть памяти, и только потом переносится самой ESP внутренними алгоритмами в рабочую область. По этому, если по воздуху шьёте и что то пошло не так (питание сбойнуло, роутер завис и т.д.) , ESP останется в рабочем состоянии и повторить прошивку можно без проблем снова. Кстати лично это проверял пару раз. Возможно предыдущая версия сжимала лучше, но на гране, а 2.0 об этом не заботится особо.
Именно так и есть, только не 50% памяти, а ровно столько, сколько памяти выделено под раздел программы (app). И это все настраивается в файле partitions.csv
У меня с отой всегда вот так …Всего доступно 1310720 байт…По этому, если компилятор делает код превышающий данное число, он просто останавливает компиляцию скеча и выпадает в ошибку. Я не знаю, как вы компилируете 1400000
И даже в этом случае можно при отправке данных получить в этот момент обратку в которой подготовить контроллер к пошивке по ота. Я так частенько делал, когда от батареек девайс питается.
Каждый раз, когда просыпаясь ты не только отправляешь данные, но и читаешь ответ получаемый от сервера. В этом ответе смотришь, надо ли дальше переходить в сон, или оставаться в сети (не засыпать), и ожидать начала прошивки по воздуху. После приема прошивки и перезагрузки, цикл повторяется. Таким образом обновляю ПО. Еще пробовал в одном проекте автоматом обновлять девайсы, если появилась на сервере новая прошивка, то так же посылал обратку для приема новой прошивки.
Решил проблему. Спасибо товарищу b707 за наводку. Посмотрел топик, решения не нашёл, но походя по ссылкам, понял, что нужно идти на гитхаб Ардуино студии. И вот тут нашёл решение. Нужно было просто почистить кэш путём удаления папки “arduino-ide” из "c:\Users\User\AppData\Roaming". После перезапуска студии изменения, внесённые в файл boards.txt становятся видны в меню Tools.
Вот так было: Sketch uses 1402937 bytes (107%) of program storage space. Maximum is 1310720 bytes.
А вот так стало: Sketch uses 1402937 bytes (82%) of program storage space. Maximum is 1703936 bytes.
Рекомендую Вам посмотреть на файлы *.csv в папке "c:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.6\tools\partitions". Так Вы поймёте, что нужно делать для изменения разделов. Затем создайте свой файл custom_partition_for_SAB.csv в этой папке, и сделайте на него ссылку в файле boards.txt двумя уровнями выше.
Нет, ну это дело вкуса, конечно. Если Вам удобнее - работайте.
Лично мне неудобно работать с любыми программами версии *.0, т.к. никогда не знаешь, с какой подлянкой столкнешься в следующий раз.