ESP系ではデータの保存用にSPIFFSが利用できるが、ちょっとしたデータの保存にはArduinoの様にEEPROMへの保存がお手軽である。正確にはフラッシュメモリに保存する疑似EEPROMであるが、ほぼ同じスケッチで扱える。ESP32の場合疑似EEPROMの最大サイズは4KB。
ArduinoのEEPROMの記事も参考に。
ESP系でEEPROMを使う場合、Arduinoと違うのはsetupでEERPOMのサイズを指定して初期化を行うのと、writeやputの後にcommitを実行する事である。それ以外は同じ。
上記ArduinoのEEPROMサンプルスケッチをESP系にすると以下の様になる。
#include <EEPROM.h>
#define DEFAULT_VALA 10
#define DEFAULT_VALB 20
#define DATA_VERSION "DATA1.0"
struct DATA_SET{
int vala;
int valb;
char check[10];
};
DATA_SET data;
//データをEEPROMから読み込む。保存データが無い場合デフォルトにする。
void load_data() {
EEPROM.get<DATA_SET>(0, data);
if (strcmp(data.check, DATA_VERSION)) { //バージョンをチェック
//保存データが無い場合デフォルトを設定
data.vala = DEFAULT_VALA;
data.valb = DEFAULT_VALB;
}
}
//EEPROMへの保存
void save_data() {
//EEPROMに設定を保存する。
strcpy(data.check, DATA_VERSION);
EEPROM.put<DATA_SET>(0, data);
EEPROM.commit(); //大事
}
void setup() {
Serial.begin(9600);
EEPROM.begin(1024); //1kbサイズ
load_data();
data.vala++;
save_data();
Serial.println(data.vala);
}
void loop() {
}