EEPROM Arduino: Пример кода для работы с boolean, char, byte, int, float и String.

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

Arduino и EEPROM: Энергонезависимое Хранилище данных.

Arduino и EEPROM: Энергонезависимое Хранилище данных.

EEPROM Arduino обладает следующими ключевыми характеристиками:

  1. Энергонезависимость: EEPROM память сохраняет данные в течение долгого времени, даже после отключения питания. Это делает ее идеальным инструментом для хранения настроек и важных данных.
  2. Циклы перезаписи: EEPROM память обеспечивает сотни тысяч циклов перезаписи при оптимальных условиях температуры (не ниже 24°C). При этом чтение данных не имеет ограничений.
  3. Объем памяти: Емкость EEPROM памяти зависит от модели микроконтроллера Arduino. Например:
    • ATmega168 (платы Arduino Nano) — 512 байт;
    • ATmega328 (платы Arduino Uno, Arduino Nano) — 1 Кбайт;
    • ATmega1280, ATmega2560 (плата Arduino Mega) — 4 Кбайта.
    Работа с библиотекой EEPROM на ESP32, ESP8266.
  4. Время доступа: Операция записи одного байта в EEPROM занимает около 3,3 микросекунд, а чтение одного байта — около 0,4 микросекунды. Это быстро и эффективно для хранения и извлечения данных.
  5. Значение по умолчанию: Каждый байт (ячейка) 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() {
  // Ваш код здесь (для реализации другой функциональности, если необходимо)
}

Что делает каждая часть кода:

  1. Мы инициализируем последовательную связь для взаимодействия с монитором порта.
  2. Затем записываем данные разных типов в EEPROM (boolean, char, byte, int, float и строку).
  3. После записи данных мы ожидаем некоторое время (1 секунда) перед чтением, чтобы вы могли видеть результаты в мониторе порта.
  4. Затем мы считываем данные из EEPROM и выводим их в мониторе порта.

Затем мы считываем данные из 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, устанавливая каждый байт в ней в значение 255.

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

В этой статье мы рассмотрели основы работы с памятью EEPROM (Electrically Erasable Programmable Read-Only Memory) на платах Arduino.

Заключение.

В этой статье мы рассмотрели основы работы с памятью EEPROM (Electrically Erasable Programmable Read-Only Memory) на платах Arduino. Мы изучили основные функции библиотеки EEPROM и создали пример программы, демонстрирующей запись и чтение данных разных типов, таких как boolean, char, byte, int, float и строки (с использованием массива символов), в EEPROM.

Кроме того, мы добавили в статью раздел об очистке памяти EEPROM, предостерегая вас о том, что этот процесс полностью уничтожает все данные, хранящиеся в EEPROM.

Знание работы с EEPROM позволяет сохранять и восстанавливать важные настройки и данные на вашей Arduino-плате, делая её более функциональной и адаптированной к вашим потребностям. Эта память полезна для хранения параметров, калибровочных данных, настроек и другой информации, которая должна сохраняться даже после перезапуска устройства.

Надеемся, что данная статья поможет вам легче освоить работу с EEPROM на Arduino и использовать её в ваших проектах. Помните о том, что EEPROM имеет ограниченное количество циклов записи/стирания, поэтому используйте её осторожно и рационально.


Фотографии к статье

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

Очистка памяти EEPROM Очистка памяти EEPROM.ino1 Kb 276 Скачать
EEPROM Arduino: Пример кода для работы с boolean, char, ... EEPROM Arduino: Пример кода для работы с boolean, char, ....ino3 Kb 300 Скачать

Комментарии

Ваше Имя*



Cлучайные товары

BMP180, BMP280 датчик давления и температурыBMP180, BMP280 датчик давления и температуры


AliExpress
AliExpress

Адресная светодиодная лента WS2812BАдресная светодиодная лента WS2812B


AliExpress
AliExpress

Читайте также

Мы в соц сетях

Подпишись на канал Telegram
Разработка проектов