Pull to refresh

Хранение настроек в памяти Базового устройства

Reading time 2 min
Views 7.1K

Привет! Если Вам посчастливилось подержать в руках микроконтроллер ESP32 (мне посчастливилось больше и у меня в руках M5Stack) от китайской компании ESPRESSIF, то этот пост, возможно, будет полезен.



Бывает ситуация, когда необходимо сохранить какие-то параметры в энергонезависимой памяти (например: подсчитывать количество включений устройства за всё время или сохранять настройки Wi-Fi). Это можно сделать с лёгкостью с помощью библиотеки Preferences.


Объявим экземпляр класса Preferences, а там видно будет...


Первое, что мы должны сделать — это создать связку ключей путём вызова метода begin с парой аргументов (но можно только с одним первым): именем связки и флагом "только для чтения".


Чтобы сохранить строковое значение в памяти, нужно передать ключ и само значение в метод, имя которого состоит из двух частей: первой — put и второй — имени типа, например: String. Всё ясно и понятно. Правда, есть ещё "сырые" байты без обжарки, которым никто не хочет присвоить тип. В таком случае метод принимает ещё и третий аргумент с количеством этих байтов. С этой процедурой вроде всё.


После того, как значение было записано, можно его прочесть с помощью метода (имя которого аналогично предыдущему), где первая часть будет get. Данный метод возвращает значение для ключа соответственного типа. Помните про случай с байтами? Если Вы не знаете (или не помните) сколько байт лежит по ключу, то дёргайте метод getBytesLength с единственным аргументом — ключом, она всё посчитает и вернёт количество в size_t.


Если Вы хотите удалить определённый ключ из связки, то отдайте его единственным аргументом методу remove.


Хотите навести настоящий марафет и очистить ВСЮ связку? Вызывайте без всяких аргументов метод clear!


Когда Вы пожелаете завершить работу со связкой, то вызовите метод end без каких-либо аргументов.


В общем поддерживаются следующие типы: Char, UChar, Short, UShort, Int, UInt, Long, ULong, Long64, ULong64, Float, Double, Bool, String и Bytes.


Понимаю, что хочется чего-то кода, поэтому вот скетч. Скетч подсчитывает количество включений устройства и выводит его на дисплей:


#include <M5Stack.h>
#include <Preferences.h>

Preferences preferences;
const char* key = "OnOff";
uint32_t count;

void setup() {
  m5.begin();
  preferences.begin("MyKeyChain");
  count = preferences.getUInt(key);
  preferences.putUInt(key, count + 1);
  M5.Lcd.setTextSize(3);
  M5.Lcd.setTextColor(TFT_WHITE);
  M5.Lcd.println("Hello, Habr!");
  M5.Lcd.setTextSize(2);
  M5.Lcd.println("M5Stack Turned On:");
  M5.Lcd.setTextSize(3);
  M5.Lcd.setTextColor(TFT_RED);
  M5.Lcd.println(count);
  M5.Lcd.setTextColor(TFT_WHITE);
  M5.Lcd.setTextSize(2);
  M5.Lcd.println("times");
}

void loop() { }

Ссылочка на библиотеку прилагается.

Tags:
Hubs:
+6
Comments 7
Comments Comments 7

Articles