如何在ESP32中的EEPROM中写入对象Arrey

时间:2019-01-29 17:51:28

标签: arduino esp32 arduino-c++

大家好,我必须在学校处理一个项目。让我向您解释一切。
我有一个 ESP32微处理器

我使用该ESP32来创建WLAN网络并为其提供一些html页面。因此,我立即将其用作接入点网络服务器
我需要用ESP32的配置显示 GET请求的信息,并用 POST请求获取一些的信息。

无论如何,我使用名为 ESPAsyncWebServer 的库设法处理了(GET和POST)请求,而没有任何问题。 GitHub of 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 ""
};

处理“ / admin”中的POST请求并用27个POST参数填充arrey的代码。

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

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


“ / admin” GET请求代码:

  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 个答案:

答案 0 :(得分:0)

您尝试过EEPROM示例吗?

尝试仅上传示例,并在上传所有代码之前查看其是否有效