Работа с библиотекой EEPROM на ESP32, ESP8266.

EEPROM (Electrically Erasable Programmable Read-Only Memory) - это технология энергонезависимой памяти, которая позволяет хранить данные даже после отключения питания. В ESP32 и ESP8266 флэш-память используется для эмуляции EEPROM, что позволяет сохранять данные даже при перезагрузке устройства.

В ESP32 и ESP8266 флэш-память используется для эмуляции EEPROM, что позволяет сохранять данные даже при перезагрузке устройства.

Применение флэш-памяти: Флэш-память на ESP32 и ESP8266 может быть использована для сохранения различных типов данных, таких как последнее состояние переменной, настройки устройства, количество активаций и многое другое. Это особенно полезно, когда необходимо сохранить данные на длительное время.

Ограничения флэш-памяти: Одним из ограничений флэш-памяти является ограниченное количество операций записи. Вы можете записать данные в нее ограниченное количество раз (обычно 100,000 - 1,000,000 операций записи). Однако вы можете считывать данные сколько угодно раз без ограничений.

Библиотека EEPROM: Для работы с флэш-памятью ESP32 и ESP8266 в Arduino IDE используется библиотека EEPROM. Эта библиотека позволяет вам легко записывать и считывать данные из флэш-памяти, подобно тому, как вы делали это с Arduino EEPROM.

Список всех функций библиотеки EEPROM для ESP32, ESP8266 с подробными описаниями:

1. EEPROM.begin(size):

Инициализирует эмулированную EEPROM с указанным размером size (в байтах). Обычно вызывается в функции setup().

2. EEPROM.end():

Завершает работу с эмулированной EEPROM и освобождает зарезервированные ресурсы. Необходимо вызывать, когда вы закончили работу с EEPROM.

3. EEPROM.write(address, value):

Записывает значение value (байт) в указанный адрес address в эмулированной EEPROM.

4. EEPROM.read(address):

Считывает байт данных из указанного адреса address в эмулированной EEPROM и возвращает это значение.

5. EEPROM.update(address, value):

Обновляет значение в указанном адресе address в эмулированной EEPROM. Если новое значение отличается от текущего, то происходит запись нового значения.

6. EEPROM.get(address, data):

Считывает данные из указанного адреса address в эмулированной EEPROM и сохраняет их в переменную data. Может использоваться для считывания структур или пользовательских типов данных.

7. EEPROM.put(address, data):

Записывает данные из переменной data в указанный адрес address в эмулированной EEPROM. Может использоваться для записи структур или пользовательских типов данных.

8. EEPROM.commit():

Сохраняет все изменения, внесенные в эмулированную EEPROM, во флэш-памяти. Это необходимо вызвать после операций записи, чтобы изменения вступили в силу.

Пример использования библиотеки EEPROM на ESP32, ESP8266.

Библиотеки включена в стандартный набор библиотек Arduino IDE, предназначенных для разработки программного обеспечения для ESP32 и ESP8266. Поэтому нет необходимости дополнительно устанавливать эту библиотеку после установки платы ESP32 или ESP8266 в Arduino IDE.

При создании проекта и работы с платами ESP32 или ESP8266, вы можете сразу начать использовать функции библиотеки EEPROM, такие как EEPROM.write(), EEPROM.read(), EEPROM.commit() и другие. Эти функции позволяют вам записывать и читать данные из эмулированной памяти, сохраняя информацию даже при перезагрузке устройства.

Запись данных:

Чтобы записать данные в флэш-память, используйте функцию EEPROM.write(address, value), где address - адрес памяти для записи (от 0 до 511), а value - значение данных (от 0 до 255).

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/175/rabota-s-bibliotekoi-eeprom-na-esp32-esp8266.html
*/
#include <EEPROM.h>

void setup() {
    EEPROM.begin(512);  // Инициализация EEPROM с размером 512 байт
    int address = 0;   // адрес памяти для записи (от 0 до 511)
    byte value = 123;  // значение данных (от 0 до 255)
    EEPROM.write(address, value);  // Запись данных
    EEPROM.commit();   // Сохранение изменений
}

void loop() {
    // Ваш код здесь
}

Чтение данных:

Для чтения данных из флэш-памяти используйте функцию EEPROM.read(address), где address - адрес памяти для чтения.

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/175/rabota-s-bibliotekoi-eeprom-na-esp32-esp8266.html
*/
#include <EEPROM.h>

void setup() {
    EEPROM.begin(512);
    int address = 0;                     //адрес памяти для чтения.
    byte value = EEPROM.read(address);   // Чтение данных
    // Используйте значение данных (value) по вашему усмотрению
}

void loop() {
    // Ваш код здесь
}

Освобождение ресурсов:

EEPROM.end() - это функция из библиотеки EEPROM, которая выполняет освобождение ресурсов, занимаемых под эмуляцию EEPROM во флэш-памяти ESP32. Эта функция должна быть вызвана после того, как вы закончили работу с библиотекой и больше не планируете записывать или читать данные из EEPROM.

Принцип работы библиотеки EEPROM на ESP32 следующий: при вызове EEPROM.begin(size), где size - размер эмулируемой памяти, библиотека резервирует определенное количество флэш-памяти для эмуляции EEPROM. Когда вы вызываете EEPROM.write() для записи данных или EEPROM.read() для чтения данных, библиотека обращается к этой зарезервированной части флэш-памяти.

После того, как вы закончили работу с библиотекой EEPROM, чтобы освободить ресурсы, занятые эмуляцией EEPROM, вы должны вызвать EEPROM.end().

Пример использования EEPROM.end():

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/175/rabota-s-bibliotekoi-eeprom-na-esp32-esp8266.html
*/
#include <EEPROM.h>

void setup() {
    EEPROM.begin(512);  // Инициализация EEPROM с размером 512 байт
    // Работа с EEPROM
}

void loop() {
    // Ваш код здесь
}

void saveData() {
    // Сохранение данных
    EEPROM.commit();
    EEPROM.end();  // Освобождение ресурсов
}

Обратите внимание, что вызов EEPROM.commit() перед EEPROM.end() является важным. Функция EEPROM.commit() сохраняет все изменения, которые вы сделали в эмулируемой EEPROM, во флэш-памяти. После сохранения данных, вызов EEPROM.end() завершает работу с библиотекой и освобождает ресурсы.

Итак, освобождение ресурсов с помощью EEPROM.end() важно для эффективного управления памятью и предотвращения утечек памяти при использовании библиотеки EEPROM на ESP32.

Кода для подсчета количества включений устройства с использованием библиотеки EEPROM.

Этот пример демонстрирует, как использовать библиотеку EEPROM на микроконтроллерах ESP32 и ESP8266 для создания счетчика, который подсчитывает количество включений (перезагрузок) устройства. Библиотека EEPROM позволяет нам сохранять данные в энергонезависимой памяти, которые останутся неизменными даже после выключения питания.

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/175/rabota-s-bibliotekoi-eeprom-na-esp32-esp8266.html
*/

#include <EEPROM.h>
int address = 0; // адрес памяти для записи (от 0 до 511)
byte value_w; // значение данных (от 0 до 255)

void setup() {
  Serial.begin(74880);

  EEPROM.begin(512);  // Инициализация EEPROM с размером 512 байт
  value_w = EEPROM.read(address);  // Чтение данных
  value_w++;
  EEPROM.write(address, value_w);  // Запись данных
  EEPROM.commit();                 // Сохранение изменений

  byte value_r = EEPROM.read(address);  // Чтение данных

  // Используйте значение данных (value) по вашему усмотрению
  Serial.println();
  Serial.print("Номер включения устройства: ");
  Serial.println(value_r);
}

void loop() {

}

Как это работает:

  1. Подключение библиотеки: Прежде чем начать, мы подключаем библиотеку EEPROM, чтобы получить доступ к функциям для работы с эмулированной энергонезависимой памятью.
  2. Инициализация переменных и адреса: Мы объявляем переменную address, которая будет использоваться как адрес в памяти для хранения количества включений. Мы также создаем переменную value_w, которая будет хранить текущее количество включений.
  3. Функция setup():
    • Мы настраиваем последовательное соединение для вывода данных на монитор порта с помощью Serial.begin(74880).
    • Инициализируем эмулированную EEPROM с размером 512 байт с помощью EEPROM.begin(512).
    • Читаем текущее значение (количество включений) из памяти с помощью EEPROM.read(address).
    • Увеличиваем значение на 1, чтобы учесть текущее включение.
    • Записываем новое значение обратно в память с помощью EEPROM.write(address, value_w).
    • Сохраняем изменения во флэш-памяти с помощью EEPROM.commit().
    • Читаем новое значение из памяти и выводим его на монитор порта.
  4. Функция loop(): Эта функция остается пустой, так как в ней нет необходимости для данной задачи.

Кода для подсчета количества включений устройства с использованием библиотеки EEPROM

Итог: Этот код создает счетчик, который увеличивает значение при каждой перезагрузке устройства и сохраняет его в эмулированной энергонезависимой памяти. Таким образом, вы можете отслеживать, сколько раз ваше устройство было включено, даже при перезагрузке или отключении питания. Это полезный способ сохранения и подсчета долгосрочных статистических данных на ESP32 и ESP8266.

Удачи в вашем эксперименте с EEPROM!

Понравился урок. Работа с библиотекой EEPROM на ESP32, ESP8266? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

Файлы для скачивания

Кода для подсчета количества включений устройства Кода для подсчета количества включений устройства.ino1 Kb 267 Скачать

Комментарии

Ваше Имя*


Разработка проектов