Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
В состав встроенных библиотек для ESP32 входит Preferences, предназначенная для хранения настроек. Настройки не пропадают после выключения и перезагрузки устройства, так как записываются в энергонезависимую память.
К библиотеке прилагаются два предустановленных примера в разделе File | Examples | Preferences.
Рассмотрим пример 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() {}
Скетч перезагружает плату программно. Также вы можете перезагружать вручную через кнопку сброса. Счётчик будет работать, не теряя своих последних значений.