EEPROM память на платформе Arduino представляет собой энергонезависимое хранилище данных, которое позволяет сохранять важные настройки и информацию даже при выключении устройства или перезагрузке микроконтроллера. Этот вид памяти, известный как Electrically Erasable Programmable Read-Only Memory (EEPROM), предоставляет возможность долгосрочного хранения данных на Arduino. В данном уроке мы рассмотрим, как работать с EEPROM памятью на платформе Arduino, используя стандартную библиотеку EEPROM.h.
Arduino и EEPROM: Энергонезависимое Хранилище данных.
EEPROM Arduino обладает следующими ключевыми характеристиками:
- Энергонезависимость: EEPROM память сохраняет данные в течение долгого времени, даже после отключения питания. Это делает ее идеальным инструментом для хранения настроек и важных данных.
- Циклы перезаписи: EEPROM память обеспечивает сотни тысяч циклов перезаписи при оптимальных условиях температуры (не ниже 24°C). При этом чтение данных не имеет ограничений.
- Объем памяти: Емкость EEPROM памяти зависит от модели микроконтроллера Arduino. Например:
- ATmega168 (платы Arduino Nano) — 512 байт;
- ATmega328 (платы Arduino Uno, Arduino Nano) — 1 Кбайт;
- ATmega1280, ATmega2560 (плата Arduino Mega) — 4 Кбайта.
Работа с библиотекой EEPROM на ESP32, ESP8266.
- Время доступа: Операция записи одного байта в EEPROM занимает около 3,3 микросекунд, а чтение одного байта — около 0,4 микросекунды. Это быстро и эффективно для хранения и извлечения данных.
- Значение по умолчанию: Каждый байт (ячейка) EEPROM по умолчанию имеет значение 255, если он ни разу не был записан. Это важно учитывать, чтобы не путать незаписанные ячейки с данными.
Команды библиотеки EEPROM.h Arduino.
На платформе Arduino для работы с EEPROM памятью используется библиотека EEPROM.h. Ниже представлены ключевые функции этой библиотеки:
EEPROM.read(address)
: Считывает байт данных из EEPROM по указанному адресу address
.
EEPROM.write(address, value)
: Записывает байт данных value
в EEPROM по указанному адресу address
.
EEPROM.update(address, value)
: Аналогично write
, но проверяет, изменилось ли значение. Если оно не изменилось, запись не выполняется, что позволяет уменьшить износ EEPROM.
EEPROM.put(address, value)
: Записывает значение value
по адресу address
в EEPROM, поддерживая разные типы данных (int, float, struct и другие).
EEPROM.get(address, value)
: Считывает значение данных из EEPROM, начиная с адреса address
, и сохраняет его в переменной value
. Поддерживает разные типы данных.
EEPROM.length()
: Возвращает размер EEPROM в байтах.
EEPROM.begin(size)
: Используется для указания размера EEPROM, если он не задан по умолчанию.
В этом уроке мы рассмотрим примеры записи и чтения различных типов данных, включая boolean, char, byte, int, float и строки, с использованием библиотеки EEPROM.h на Arduino.
EEPROM Arduino: Пример кода для работы с boolean, char, byte, int, float и String.
EEPROM Arduino обладает несколькими ключевыми характеристиками, среди которых энергонезависимость, долгий срок хранения данных и возможность записи и чтения данных разных типов. Мы создадим примеры записи и чтения различных типов данных, таких как boolean, char, byte, int, float и строки, и рассмотрим команды библиотеки EEPROM.h
, которые делают этот процесс простым и надежным.
Для более глубокого понимания работы с EEPROM памятью, мы пройдем через примеры записи и чтения данных, а также рассмотрим особенности работы с этими данными. Это поможет вам в использовании EEPROM для сохранения важных настроек и информации на вашей Arduino.
/*
Сайт автора 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/176/arduino-i-eeprom-energonezavisimoe-hranilishche.html
*/
#include <EEPROM.h>
int address = 0; // Начальный адрес для записи данных в EEPROM
void setup() {
Serial.begin(9600); // Инициализация последовательной связи для вывода данных в монитор порта
// Пример записи данных в EEPROM
// Запись boolean
boolean boolValue = true;
EEPROM.write(address, boolValue);
address += sizeof(bool); // Увеличение адреса на размер boolean (1 байт)
// Запись char
char charValue = 'A';
EEPROM.write(address, charValue);
address += sizeof(char); // Увеличение адреса на размер char (1 байт)
// Запись byte
byte byteValue = 42;
EEPROM.write(address, byteValue);
address += sizeof(byte); // Увеличение адреса на размер byte (1 байт)
// Запись int
int intValue = 1234;
EEPROM.put(address, intValue);
address += sizeof(int); // Увеличение адреса на размер int (2 байта)
// Запись float
float floatValue = 3.14;
EEPROM.put(address, floatValue);
address += sizeof(float); // Увеличение адреса на размер float (4 байта)
// Пример записи строки (char array) в EEPROM
char str[] = "Hello, EEPROM!";
for (int i = 0; i < strlen(str); i++) {
EEPROM.write(address, str[i]);
address += sizeof(char); // Увеличение адреса на размер char (1 байт) для каждого символа
}
// Ожидание перед чтением
delay(1000);
// Пример чтения данных из EEPROM
address = 0; // Сбрасываем адрес чтения на начальное значение
// Чтение boolean
EEPROM.read(address, boolValue);
address += sizeof(bool);
// Чтение char
EEPROM.read(address, charValue);
address += sizeof(char);
// Чтение byte
EEPROM.read(address, byteValue);
address += sizeof(byte);
// Чтение int
EEPROM.get(address, intValue);
address += sizeof(int);
// Чтение float
EEPROM.get(address, floatValue);
address += sizeof(float);
// Чтение строки (char array)
char readStr[15];
for (int i = 0; i < strlen(str); i++) {
EEPROM.read(address, readStr[i]);
address += sizeof(char);
}
readStr[strlen(str)] = '\0';
// Вывод прочитанных значений в монитор порта
Serial.println("Прочитанные значения из EEPROM:");
Serial.print("Boolean: ");
Serial.println(boolValue);
Serial.print("Char: ");
Serial.println(charValue);
Serial.print("Byte: ");
Serial.println(byteValue);
Serial.print("Int: ");
Serial.println(intValue);
Serial.print("Float: ");
Serial.println(floatValue);
Serial.print("String: ");
Serial.println(readStr);
}
void loop() {
// Ваш код здесь (для реализации другой функциональности, если необходимо)
}
Что делает каждая часть кода:
- Мы инициализируем последовательную связь для взаимодействия с монитором порта.
- Затем записываем данные разных типов в EEPROM (boolean, char, byte, int, float и строку).
- После записи данных мы ожидаем некоторое время (1 секунда) перед чтением, чтобы вы могли видеть результаты в мониторе порта.
- Затем мы считываем данные из EEPROM и выводим их в мониторе порта.
Этот код демонстрирует, как записывать и читать различные типы данных в EEPROM, включая строки (char array). Вы можете использовать этот пример как отправную точку для работы с EEPROM на вашей плате Arduino.
Очистка памяти EEPROM.
EEPROM может хранить данные даже после отключения устройства. Если вам когда-либо понадобится очистить 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/176/arduino-i-eeprom-energonezavisimoe-hranilishche.html
*/
#include <EEPROM.h>
void setup() {
Serial.begin(9600);
// Если вы хотите очистить EEPROM, то запустите эту функцию один раз и закомментируйте её после выполнения.
clearEEPROM();
}
void loop() {
// Здесь можно разместить вашу основную логику программы.
}
void clearEEPROM() {
Serial.println("Очистка EEPROM...");
for (int i = 0; i < EEPROM.length(); i++) {
EEPROM.write(i, 255);
}
Serial.println("EEPROM очищена.");
delay(1000);
}
Этот код выполняет очистку всей EEPROM, устанавливая каждый байт в ней в значение 255. Вызовите функцию clearEEPROM()
в setup()
один раз, чтобы очистить EEPROM при необходимости. После очистки вы можете закомментировать вызов clearEEPROM()
.
Предостережение: Очистка EEPROM уничтожает все данные, хранящиеся в EEPROM, поэтому будьте осторожны и убедитесь, что вам действительно нужно очистить EEPROM, прежде чем запускать этот код.
Заключение.
В этой статье мы рассмотрели основы работы с памятью EEPROM (Electrically Erasable Programmable Read-Only Memory) на платах Arduino. Мы изучили основные функции библиотеки EEPROM и создали пример программы, демонстрирующей запись и чтение данных разных типов, таких как boolean, char, byte, int, float и строки (с использованием массива символов), в EEPROM.
Кроме того, мы добавили в статью раздел об очистке памяти EEPROM, предостерегая вас о том, что этот процесс полностью уничтожает все данные, хранящиеся в EEPROM.
Знание работы с EEPROM позволяет сохранять и восстанавливать важные настройки и данные на вашей Arduino-плате, делая её более функциональной и адаптированной к вашим потребностям. Эта память полезна для хранения параметров, калибровочных данных, настроек и другой информации, которая должна сохраняться даже после перезапуска устройства.
Надеемся, что данная статья поможет вам легче освоить работу с EEPROM на Arduino и использовать её в ваших проектах. Помните о том, что EEPROM имеет ограниченное количество циклов записи/стирания, поэтому используйте её осторожно и рационально.
Фотографии к статье
Файлы для скачивания
|
Очистка памяти EEPROM.ino | 1 Kb | 220 |
Скачать
Вы можете скачать файл.
|
|
EEPROM Arduino: Пример кода для работы с boolean, char, ....ino | 3 Kb | 239 |
Скачать
Вы можете скачать файл.
|
Комментарии