В этой статье мы покажем вам, как сохранять и считывать значения из флэш-памяти ESP32 с помощью Arduino IDE. Данные, сохраненные во флэш-памяти, остаются неизменными даже при сбросе ESP 32 или отключении питания. В качестве примера мы покажем вам, как сохранить последнее состояние GPIO.
Посмотрите видеоурок
Флэш-память
Данные, сохраненные во флэш-памяти, остаются там даже при сбросе ESP32 или отключении питания. Флэш-память очень похожа на EEPROM. Оба являются энергонезависимыми воспоминаниями.
Сохранение данных во флэш-памяти особенно полезно для:
- запомнить последнее состояние переменной;
- сохранить настройки;
- сохраните, сколько раз устройство было активировано;
- или любой другой тип данных, которые вам необходимо сохранить навсегда.
Одним из ограничений флэш-памяти является количество раз, когда вы можете записывать в нее данные. Данные можно считывать с флэш-памяти столько раз, сколько вы хотите, но большинство устройств рассчитаны примерно на 100 000-1 000 000 операций записи.
Библиотека EEPROM
Для чтения и записи из флэш-памяти ESP32 с помощью Arduino IDE мы будем использовать библиотеку EEPROM. Использование этой библиотеки с ESP32 очень похоже на ее использование с Arduino. Итак, если вы раньше использовали Arduino EEPROM, это не сильно отличается.
С помощью ESP32 и библиотеки EEPROM вы можете использовать до 512 байт флэш-памяти. Это означает, что у вас есть 512 разных адресов, и вы можете сохранить значение от 0 до 255 в каждой адресной позиции.
Писать
Чтобы записать данные во флэш-память, вы используете функцию EEPROM.write(), которая принимает в качестве аргументов местоположение или адрес, где вы хотите сохранить данные, и значение (байтовая переменная), которое вы хотите сохранить:
EEPROM.write(address, value);
Например, чтобы записать 9 по адресу 0, вам потребуется:
EEPROM.write(0, 9);
С последующим
EEPROM.commit();
Для сохранения изменений.
Прочитай
Чтобы прочитать байт из флэш-памяти, вы используете функцию EEPROM.read(). Эта функция принимает адрес байта, который вы хотите прочитать, в качестве аргумента.
EEPROM.read(address);
Например, чтобы прочитать байт, сохраненный ранее в адресе 0, используйте:
EEPROM.read(0);
Это вернет 9, которое является значением, которое мы сохранили в адресе 0.