Сохранение в EEPROM ESP8266
- Войдите на сайт для отправки комментариев
Втр, 30/07/2019 - 19:08
Уважаемые знатоки, делаю термостат, код описан в теме http://arduino.ru/forum/programmirovanie/termostat-opentherm-na-esp8266#comment-468395 Задался целью сохранения уставок. С EEPROM работаю впервые. За самоучитель взял тему http://arduino.ru/forum/programmirovanie/zapis-i-chtenie-eeprom-peremennykh-tipa-float-unsigned-long-long-unsigned-int Вроде всё работает. Но всё ли правильно, не будет ли затираться память. Гляньте пожалуйста.
Библиотека подключена:
#include <EEPROM.h>
Переменные для кода задекларированы:
float sp = 20; int adrr = 0; bool NeedCommit = false; //Флаг необходимости сохранения настроек в EEPROM
Функция Commit EEPROM, если это необходимо:
void EEPROM_commit() {
if (NeedCommit) {
EEPROM.commit();
NeedCommit = false;
}
}
В setup:
EEPROM.begin(512); sp = EEPROM_float_read(0);
В loop:
if (EEPROM_float_read(0) != sp) {
EEPROM_float_write(0, sp);
NeedCommit = true;
Serial.println(sp, 4); // Для контроля
}
После loop:
// чтение float
float EEPROM_float_read(int addr) {
byte raw[4];
for (byte i = 0; i < 4; i++) raw[i] = EEPROM.read(addr + i);
float &num = (float&)raw;
return num;
}
// запись float
void EEPROM_float_write(int addr, float num) {
if (EEPROM_float_read(addr) != num) { //если сохраняемое отличается
byte raw[4];
(float&)raw = num;
for (byte i = 0; i < 4; i++) EEPROM.write(addr + i, raw[i]);
}
EEPROM.commit();
}
Спасибо!
Если все работает то хорошо. А память EEPROM расчитана примерно на 100000 циклов записи и стирания. Вот и расчитуйте сколько времени у Вас будет работать это устройство.
В ESP нет внутренней EEPROM, поэтому она эмулируется с помощью чего-то типа AT24C256, у которой в даташите имеется:
Endurance:
- One Million Write Cycles;
– Data Retention: 40 Years
В ESP нет внутренней EEPROM, поэтому она эмулируется с помощью чего-то типа AT24C256
Неть. Она эмулируется, отъедая пространство у программного FLASH.
В ESP нет внутренней EEPROM, поэтому она эмулируется с помощью чего-то типа AT24C256
Неть. Она эмулируется, отъедая пространство у программного FLASH.
Вон сбоку винбонд стоит - внешний SPI-флеш. С ATxxx я подло обманул, конечно.
https://static.chipdip.ru/lib/081/DOC001081512.pdf => More than 100,000 erase/program cycles. Так что таки сто тыщ, но флеш внешний. И, так как прошивка хранится в нём же, то отъедается от него, конечно. Я это, вроде, не опровергал.
Так что таки сто тыщ, но флеш внешний. И, так как прошивка хранится в нём же, то отъедается от него, конечно. Я это, вроде, не опровергал.
Да. Не мне тебя учить, ты это и так лучше меня знаешь. Просю пардону.