Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Библиотека Preferences: хранение настроек

В состав встроенных библиотек для ESP32 входит Preferences, предназначенная для хранения настроек. Настройки не пропадают после выключения и перезагрузки устройства, так как записываются в энергонезависимую память.

К библиотеке прилагаются два предустановленных примера в разделе File | Examples | Preferences.

  • Prefs2Struct
  • StartCounter

StartCounter

Рассмотрим пример StartCounter, который будет подсчитывать число запусков платы.

Вначале объявляется экземпляр класса Preferences.

Далее активируем экземпляр функцией begin(), указав собственное пространство имён и режим для записи/чтения. Пространство имён позволяет создать несколько независимых настроек.

Записать значение в настройки можно через функции put- (putUInt() и др.), указав ключ (строка).

Получить значения из настроек можно через функции get- (getUInt() и др.), указав используемый ключ. Поддерживаются типы: Char, UChar, Short, UShort, Int, UInt, Long, ULong, Long64, ULong64, Float, Double, Bool, String и Bytes.

Чтобы удалить определённый ключ из настроек, вызывайте функцию remove(), указав нужный ключ. Для удаления сразу всех настроек используйте функцию clear().

Когда вы больше не нуждаетесь в работе с настройками, то не забывайте вызывать функцию end().


#include <Preferences.h>

Preferences preferences;

void setup() {
  Serial.begin(115200);
  Serial.println();

  // Используйте собственное пространство имён (не больше 15 символов), чтобы избежать коллизий
  // для режима чтения-записи используйте во втором параметре false
  preferences.begin("tehnolog-cat", false);

  // Удаляем все настройки под заданным пространством имён
  //preferences.clear();

  // Удаляем отдельный ключ
  //preferences.remove("counter");

  // Получим значение счётчика. Если ключ не существует, то возвращаем значение по умолчанию 0
  // Имя ключа - не больше 15 символов
  unsigned int counter = preferences.getUInt("counter", 0);

  // Увеличиваем счётчик на 1
  counter++;

  // Выводим в монитор порта
  Serial.printf("Текущее значение: %u\n", counter);

  // Сохраняем значение счётчика в Preferences
  preferences.putUInt("counter", counter);

  // Закрываем Preferences
  preferences.end();

  // Ждём 10 секунд
  Serial.println("Перезапуск через 10 секунд...");
  delay(10000);

  // Перезапускаем ESP
  ESP.restart();
}

void loop() {}

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

Реклама