Привет, ребята, мне нужно заниматься проектом в школе.Позвольте мне объяснить вам, что это такое.
Я получил микропроцессор ESP32 .
Я использую этот ESP32, чтобы создать сеть WLAN и обслуживать некоторые html-страницы в ней.Поэтому я использую его как точку доступа и веб-сервер одновременно.
Причина, по которой мне это нужно, заключается в том, чтобы отображать некоторую информацию с помощью GET-запросов и получать некоторую информацию с помощью POST-запросов для конфигурации ESP32.
В любом случае, яудалось обработать оба (GET и POST) запроса без каких-либо проблем, используя библиотеку ESPAsyncWebServer GitHub из ESPAsyncWebServer .
Я использую специальный root"/ 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...
ets Jun 8 2016 00:22:57</p>
<p>rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:928
ho 0 tail 12 room 4
load:0x40078000,len:9280
load:0x40080400,len:5848
entry 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 () , когда мне приходится иметь дело с массивом структур ине просто структура?Или что-то еще?
Заранее спасибо!