Официальный сайт компании Arduino по адресу arduino.cc
Сохранение в 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. Так что таки сто тыщ, но флеш внешний. И, так как прошивка хранится в нём же, то отъедается от него, конечно. Я это, вроде, не опровергал.
Так что таки сто тыщ, но флеш внешний. И, так как прошивка хранится в нём же, то отъедается от него, конечно. Я это, вроде, не опровергал.
Да. Не мне тебя учить, ты это и так лучше меня знаешь. Просю пардону.