将对象写入和读取到esp32闪存中

时间:2019-11-05 20:59:07

标签: arduino esp32

我正在尝试将封装到对象中的某些数据存储在ESP32的闪存中。

playerID nameFirst nameLast bats throws yearID stint teamID lgID G AB R H X2B X3B HR RBI SB CS BB SO IBB 81955 rolliji01 Jimmy Rollins B R 2007 1 PHI NL 162 716 139 212 38 20 30 94 41 6 49 85 5 103358 wilsowi02 Willie Wilson B R 1980 1 KCA AL 161 705 133 230 28 15 3 49 79 10 28 81 3 93082 suzukic01 Ichiro Suzuki L R 2004 1 SEA AL 161 704 101 262 24 5 8 60 36 11 49 63 19 83973 samueju01 Juan Samuel R R 1984 1 PHI NL 160 701 105 191 36 19 15 69 72 15 28 168 2 15201 cashda01 Dave Cash R R 1975 1 PHI NL 162 699 111 213 40 3 4 57 13 6 56 34 5 75531 pierrju01 Juan Pierre L L 2006 1 CHN NL 162 699 87 204 32 13 3 40 58 20 32 38 0 HBP SH SF GIDP average 81955 7 0 6 11 0.2960894 103358 6 5 1 4 0.3262411 93082 4 2 3 6 0.3721591 83973 7 0 1 6 0.2724679 15201 4 0 7 8 0.3047210 75531 8 10 1 6 0.2918455 将对象写入内存似乎不错,但是我不知道如何读取它。

我尝试执行此操作的方法不起作用...

putBytes

预先感谢您的任何想法!

2 个答案:

答案 0 :(得分:0)

就像“首选项”(https://github.com/espressif/arduino-esp32/blob/master/libraries/Preferences/examples/Prefs2Struct/Prefs2Struct.ino)的示例用法一样,在转换为结构之前,需要将字节读入缓冲区。

在您的情况下,您声明了缓冲区,但从未使用过。由于您知道数组的确切大小,因此应该可以将其直接从buffer复制到object_

char buffer[schLen]; // prepare a buffer for the data
eeprom.getBytes("someObject", buffer, schLen);
memcpy(object_, buffer, schLen);

答案 1 :(得分:0)

感谢您的帮助!工作代码:

#include <Preferences.h>
Preferences eeprom;

typedef struct {
  long  var1 = -1;
  long  var2 = -1;
  long  var3 = 0;
  byte  var4 = 0;
} someObject;

someObject object_[4][24];
someObject object_1_[4][24];

void setup() {
  Serial.begin(115200);
  eeprom.begin("Settings", false);

  object_[0][0].var1  = 25889;
  object_[0][0].var2   = 25890;
  object_[0][0].var3 = 25891;

  object_[1][2].var1  = 25892;
  object_[1][2].var2   = 25893;
  object_[1][2].var3 = 25894;

  eeprom.putBytes("someObject", &object_, sizeof(object_));

  Serial.print("sizeof(object_) = "); Serial.println(String(sizeof(object_)));

  size_t schLen = eeprom.getBytes("someObject", NULL, NULL);

  char buffer[schLen]; // prepare a buffer for the data

  eeprom.getBytes("someObject", buffer, schLen);
  memcpy(object_1_, buffer, schLen);

  Serial.print("sizeof(someObject) = "); Serial.println(String(schLen));

  Serial.println("--------**********************************");
  Serial.println(String(object_[0][0].var1));
  Serial.println(String(object_[0][0].var2));
  Serial.println(String(object_[0][0].var3));

  Serial.println("--------");
  Serial.println(String(object_1_[1][2].var1));
  Serial.println(String(object_1_[1][2].var2));
  Serial.println(String(object_1_[1][2].var3));

  Serial.println("===========================================");

  Serial.println(buffer);
}

void loop() {}