
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() { }