Сохранение и получение параметров после обновления скетча

eeprom ota spiffs

У меня есть общий код для некоторых устройств IOT, которые различаются по некоторым параметрам (допустим, это только его имя MQTT и подписки).

Поскольку я использую OTA для обновления скетча, я ищу способ: а) записать эти параметры в ESP32/ESP8266 FS и б) они сохранятся после обновления.

Единственное решение, которое приходит мне на ум, — это использование SD-карты, которая не стирается после OTA, и я ищу способ сделать это без использования SD или внешней памяти.

Парень

, 👍0

Обсуждение

Вы говорите "не задействуя...внешнюю память". Включает ли это (добавление еще одного) устройства I2C, такие как EEPROM?, @st2000

@ st2000 некоторые из них прошиты Sonoff, а некоторые - nodeMcu, поэтому я предпочитаю простоту и не меняю оборудование., @Guy . D

Есть [учебники по этому вопросу] (https://randomnerdtutorials.com/esp32-flash-memory/), которые делают вывод, что они используют [эту библиотеку] (https://github.com/espressif/arduino-esp32/tree/master). /библиотеки/EEPROM). Но в файле readme этой библиотеки сказано, что библиотека устарела. Кроме того, неясно, как и остается ли эмулируемое хранилище EEPROM в том же месте после обновления приложения (также известного как скетч). Это интересный вопрос. Sonoff уже делает это? Возможно, изучение этого проекта даст ответы., @st2000

@ st2000, возможно, пишет в определенное место ...?, @Guy . D

ФС не стирается скетчем ОТА. и библиотека эмуляции EEPROM тоже в порядке., @Juraj

Проверяя, люди говорили мне, что они обновляют скетчи с помощью библиотеки eeprom, и она продолжает работать с обновлениями. @ Guy.D, я думаю, что библиотека eeprom использует адрес, начинающийся с нуля или 1. Так что, скорее всего, относительная, а не абсолютная адресация. Но я посмотрел только на пример кода., @st2000


1 ответ


2

В SD-карте нет необходимости. Вы можете записать все соответствующие параметры в файл в SPIFFS (например, json, если хотите) перед запуском обновления OTA. Во время инициализации вы читаете файл и соответственно устанавливаете параметры. SPIFFS не стирается при обновлении (по крайней мере, это верно для библиотеки OTA, которую я использую). Если в вашем случае он стирается, вероятно, в библиотеке OTA есть возможность отключить стирание флэш-памяти, точно так же, как и при загрузке скетча через последовательный порт.

,

Могу ли я загрузить файл данных с помощью OTA, один раз для каждого устройства и после загрузки скетча, особенно после OTA, он останется?, @Guy . D

@Guy.D Вам, вероятно, нужно загрузить файл только один раз, когда вы изначально загружаете скетч (для этой цели вы можете использовать инструмент загрузки данных в IDE Arduino). После этого файл навсегда остается в spiffs и может обновляться всякий раз, когда вы делаете OTA-обновление. В противном случае есть много способов, как вы можете загрузить этот файл: вы можете загрузить его со своего сервера и сохранить в SPIFFS, вы также можете отправить его в ESP (который тогда будет сервером) и записать его в SPIFFS. Файл действительно не имеет ничего общего с OTA, потому что он хранится в совершенно другом разделе флэш-памяти., @Sim Son

@ Guy.D ... но да, он останется там. Вот как я работаю с постоянными пользовательскими данными, которые, очевидно, не должны быть перезаписаны обновлением прошивки., @Sim Son