EEPROM (Electrically Erasable Programmable Read-Only Memory) - это технология энергонезависимой памяти, которая позволяет хранить данные даже после отключения питания. В 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() {
}
Как это работает:
- Подключение библиотеки: Прежде чем начать, мы подключаем библиотеку EEPROM, чтобы получить доступ к функциям для работы с эмулированной энергонезависимой памятью.
- Инициализация переменных и адреса: Мы объявляем переменную
address
, которая будет использоваться как адрес в памяти для хранения количества включений. Мы также создаем переменную value_w
, которая будет хранить текущее количество включений. - Функция setup():
- Мы настраиваем последовательное соединение для вывода данных на монитор порта с помощью
Serial.begin(74880)
. - Инициализируем эмулированную EEPROM с размером 512 байт с помощью
EEPROM.begin(512)
. - Читаем текущее значение (количество включений) из памяти с помощью
EEPROM.read(address)
. - Увеличиваем значение на 1, чтобы учесть текущее включение.
- Записываем новое значение обратно в память с помощью
EEPROM.write(address, value_w)
. - Сохраняем изменения во флэш-памяти с помощью
EEPROM.commit()
. - Читаем новое значение из памяти и выводим его на монитор порта.
- Функция loop(): Эта функция остается пустой, так как в ней нет необходимости для данной задачи.
Итог:
Этот код создает счетчик, который увеличивает значение при каждой перезагрузке устройства и сохраняет его в эмулированной энергонезависимой памяти. Таким образом, вы можете отслеживать, сколько раз ваше устройство было включено, даже при перезагрузке или отключении питания. Это полезный способ сохранения и подсчета долгосрочных статистических данных на ESP32 и ESP8266.
Удачи в вашем эксперименте с EEPROM!
Понравился урок. Работа с библиотекой EEPROM на ESP32, ESP8266? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!
Файлы для скачивания
|
Кода для подсчета количества включений устройства.ino | 1 Kb | 362 |
Скачать
Вы можете скачать файл.
|
Комментарии