Записываем данные в EEPROM микроконтроллера ESP8266.

В данном уроке мы с Вами научимся записывать данные в EEPROM микроконтроллера ESP8266. Для проверки работы нашей программы, мы подключим кнопку при нажатии которой будет менять свое состояние светодиод. Причем последние состояние светодиода будет записываться в память микроконтроллера. Сняв питание и микроконтроллера, и подав снова у нас светодиод примет последнее состояние, которое было до выключения.

Кнопку подключим к контакту 4 (GPIO 2), а светодиод подключим к контакту 5 (GPIO 14):

#include <EEPROM.h>

#define EEPROM_SIZE 1 // задаем количество байтов, к которым нужно получить доступ

const int buttonPin = 4; // номер контакта для кнопки
const int ledPin = 5; // номер контакта для светодиода

int ledState = LOW; // текущее состояние светодиода
int buttonState; // текущее состояние кнопки

int lastButtonState = HIGH; // предыдущее состояние кнопки

unsigned long lastTime = 0; // время, для фиксации переключения
unsigned long Delay = 50; // задержка для анти дребезга;

void setup() {
EEPROM.begin(EEPROM_SIZE);// инициализируем EEPROM-память заданного ранее размера
pinMode(buttonPin,INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledState);
ledState = EEPROM.read(0);// считываем последнее состояние светодиода из памяти
digitalWrite(ledPin, ledState);// устанавливаем последнее сохраненное состояние светодиода
}

void loop() {
int reading = digitalRead(buttonPin);// считываем состояние переключателя в локальную переменную
if (reading != lastButtonState) {
lastTime = millis();
}
if ((millis() - lastTime) > Delay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) {
ledState = !ledState;
}
}
}
lastButtonState = reading;// сохраняем считанное значение;
if (digitalRead(ledPin)!= ledState) { // если значение отличается от текущего состояния
  digitalWrite(ledPin, ledState);// меняем состояние светодиода
  EEPROM.write(0, ledState);// сохраняем состояние в память
  EEPROM.commit();//сохраняем изменения в памяти
  }
}

Разберем команды работы с EEPROM памятью:

Команды чтения:

eeprom_read_byte(адрес) – возвращает значение в 1 byte записанное в данном адресе.
eeprom_read_word(адрес) – возвращает значение в 2 byte записанное в данном адресе.
eeprom_read_dword(адрес) – возвращает значение в 4 byte записанное в данном адресе.
eeprom_read_float(адрес) – возвращает значение в 4 byte записанное в данном адресе.
eeprom_read_block(адрес в SRAM, адрес в EEPROM, размер) – читает данные из EEPROM и помещает их в SRAM по заданным адресам.

 

Команды записи:

 eeprom_write_byte(адрес, значение) — записывает значение размером в 1 byte по данному адресу.
eeprom_write_word(адрес, значение) — записывает значение размером в 2 byte по данному адресу.
eeprom_write_dword(адрес, значение) — записывает значение размером в 4 byte по данному адресу.
eeprom_write_float(адрес, значение) — записывает значение размером в 4 byte по данному адресу.
eeprom_write_block(адрес в SRAM, адрес в EEPROM, размер) — записывает значение данных из SRAM в EEPROM по заданным адресам.

 

Команды обновление (обновляет (перезаписывает) данные, если они отличаются друг от друга):

eeprom_update_byte(адрес, значение
eeprom_update_word(адрес, значение
eeprom_update_dword(адрес, значение)
eeprom_update_float(адрес, значение)
eeprom_update_block(адрес в SRAM, адрес в EEPROM, размер) — перезаписывает данные в EEPROM из SRAM, если они отличаются друг от друга.