Esp8266 запись в EEPROM

Тема в разделе "ESP8266, ESP32", создана пользователем Neon_1, 20 ноя 2019.

  1. Neon_1

    Neon_1 Нерд

    Попытался записать и считать с eeprom, сначала читались какие то данные но не те что записал, а потом читаются только нули, то есть ничего не пишется

    Использовал стандартный пример eeprom из пакета esp8266

    Пробовал перед каждым чтением и записью писать eeprom.begin, не помогло

    И где у esp находится eeprom в чипе или выделено на внешней флеш?

    И сколько она вообще
     
  2. parovoZZ

    parovoZZ Гуру

    Я набрал в яндексе название твоей темы и у меня выпало 10 000+ ответов.
     
  3. Neon_1

    Neon_1 Нерд

    Читал уже некоторое время

    Но пока не получилось

    Так как не сработал стандартный пример думал может есть какая хитрость...
     
  4. #include <EEPROM.h>
    ............
    struct MyObject {
    int Flag_m0;
    int Hu_max1;
    int Te_max2;
    int Il_max3;
    int Hu_min4;
    int Te_min5;
    int Il_min6;
    int Watering7;
    int Stop_p8;
    int Night9;
    };
    MyObject customVar;
    .............
    void setup()
    {
    Serial.begin(9600);

    EEPROM.begin(512);
    Adress += sizeof(int);
    EEPROM.get(0, customVar.Flag_m0);

    if(customVar.Flag_m0 != 1)
    { EEPROM.put(0, 1);
    customVar.Hu_max1=hu_max; EEPROM.put(Adress, customVar.Hu_max1);
    customVar.Te_max2=te_max; EEPROM.put(Adress*2, customVar.Te_max2);
    customVar.Il_max3=il_max; EEPROM.put(Adress*3, customVar.Il_max3);
    customVar.Hu_min4=hu_min; EEPROM.put(Adress*4, customVar.Hu_min4);
    customVar.Te_min5=te_min; EEPROM.put(Adress*5, customVar.Te_min5);
    customVar.Il_min6=il_min; EEPROM.put(Adress*6, customVar.Il_min6);
    customVar.Watering7=watering; EEPROM.put(Adress*7, customVar.Watering7);
    customVar.Stop_p8=stop_p; EEPROM.put(Adress*8, customVar.Stop_p8);
    customVar.Night9=Night; EEPROM.put(Adress*9, customVar.Night9);
    EEPROM.commit(); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    }
    else
    { EEPROM.get(Adress, customVar.Hu_max1); hu_max=customVar.Hu_max1;
    EEPROM.get(Adress*2, customVar.Te_max2); te_max=customVar.Te_max2;
    EEPROM.get(Adress*3, customVar.Il_max3); il_max=customVar.Il_max3;
    EEPROM.get(Adress*4, customVar.Hu_min4); hu_min=customVar.Hu_min4;
    EEPROM.get(Adress*5, customVar.Te_min5); te_min=customVar.Te_min5;
    EEPROM.get(Adress*6, customVar.Il_min6); il_min=customVar.Il_min6;
    EEPROM.get(Adress*7, customVar.Watering7); watering=customVar.Watering7;
    EEPROM.get(Adress*8, customVar.Stop_p8); stop_p=customVar.Stop_p8;
    EEPROM.get(Adress*9, customVar.Night9); Night=customVar.Night9;
    }
    ......
    }
    void loop()
    {
    .....
    EEPROM.put(Adress*7, watering);
    EEPROM.commit(); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    }
     
  5. SergeiL

    SergeiL Оракул Модератор

    В отличие от AVR плат, на ESP, после записи нужно делать
    Код (C++):
    EEPROM.commit();
     
    Федоров Александр нравится это.
  6. Neon_1

    Neon_1 Нерд

    спасибо за ответы, разобрался уже, просто компилировал скетч как для 4 мб , а записивал с помощью NODEMCU programmer'om как для 8 мб...
    в esp у меня впаяна память на 8 мб