В данном уроке мы с Вами научимся записывать данные в 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 памятью:
Команды чтения:
Команды записи:
Команды обновление (обновляет (перезаписывает) данные, если они отличаются друг от друга):