Как написать объект Arrey в EEPROM в ESP32

Привет, ребята, я получил дело с проектом в школе. Позвольте мне объяснить вам, что это такое.
Я получил микропроцессор ESP32.

Я использую этот ESP32, чтобы создать сеть WLAN и обслуживать некоторые html-страницы. Поэтому я использую его как точку доступа и веб-сервер одновременно.
Причина в том, что мне нужно, чтобы отобразить некоторую информацию с запросами GET и получить некоторую информацию с запросами POST для конфигурации ESP32.

В любом случае мне удалось без проблем обработать оба (GET и POST) запроса, используя библиотеку ESPAsyncWebServer GitHub из ESPAsyncWebServer.

Я использую специальный корень "/admin" для обработки запросов GET и POST для конфигурации.
Все отлично работает. Проблема возникает, когда я пытаюсь сохранить данные в виде массива внутри моей EEPROM.

Код структуры:

struct Hour{
    String ring_in; //time -> "hh:mm"
    String ring_out; //time -> "hh:mm"
    String ring; //boolean -> "checked" or ""
    String play_music; //boolean -> "checked" or ""
};

Код, который обрабатывает запросы POST в "/admin" и заполняет массив 27 параметрами POST.

server.on("/admin", HTTP_POST, [](AsyncWebServerRequest *request){  // ~~~ POST 192.148.4.1/admin
AsyncWebParameter* p = request->getParam("download", true);
Hour hours_values[7];
int counter = 0;
for(int i=0; i<7; i++){// Loop used to asaign the values from POST request.
  hours_values[i].ring_in = request->arg(counter).c_str();
  hours_values[i].ring_out = request->arg(counter+1).c_str();
  hours_values[i].ring = request->arg(counter+2).c_str();
  hours_values[i].play_music = request->arg(counter+3).c_str();
  counter += 4;
}
for(int i=0; i<7; i++){ // Loop that proofs values are ok and just can't be loaded to EEPROM.
  Serial.println(hours_values[i].ring_in);
  Serial.println(hours_values[i].ring_out);
  Serial.println(hours_values[i].ring);
  Serial.println(hours_values[i].play_music);
}
EEPROM.put(0, hours_values); delay(500); EEPROM.end(); //THIS THING DOESN'T WORK.
request->send(200, "text/html", "Changes have been saved. Refresh to see the changes!");
});

Поэтому, когда я пытаюсь получить данные из EEPROM для обработки запроса GET, программа завершается неудачей.
Сообщение:

Rebooting...
8 июня 2016 г. 00:22:57

RST:0xc (SW_CPU_RESET), загрузка:0x13 (SPI_FAST_FLASH_BOOT). Конфиг.: 0, SPIWP:0xee. 1 нагрузка:0x3fff0018, длина линзы:4:0x3fff001c, длина линзы:928 ho 0 tail 12 room 4 load:0x40078000, длина линки 9280:0x40080400, длина строки 5848 0x40080698


GET-код запроса "/admin":

  server.on("/admin", HTTP_GET, [](AsyncWebServerRequest *request){  // ~~~ GET 192.148.4.1/admin
    Hour hours[7] = EEPROM.get(0, hours_values); //Can't get data from here.
    String html = "Some long long long html that includes values of Hours[] arrey"
    request->send(200, "text/html", html);
});

Ребята, есть ли другой способ, которым я должен использовать методы EEPROM.put() и EEPROM.get(), когда мне приходится иметь дело с массивом структур, а не только со структурой? Или что-то еще?

Заранее спасибо!

1 ответ

Вы пробовали примеры EEPROM?

Попробуйте загрузить только пример и посмотрите, работает ли он, прежде чем загружать весь ваш код

Другие вопросы по тегам