ESP32にデータを保存する
はじめに
ワンチップマイコンを使っていて、起動したときに終了したときの状態を再現したいなとか、通信で設定されたデータを保存しおきたい時があるとおもいます。そんなときに役に立つ方法です。
不揮発性ストレージを使おう
ESP32にはフラッシュメモリという「電源を切ってもデータが消えない不揮発性のメモリー」が乗っています。頻繁に書き換えしないものならそこに保存することができます。
プログラム
参考にある「不揮発性ストレージライブラリ」を使い、キーバリューペアとして保存します。
書き込み方
// 書き込み
prefs.begin("myspace", false); // 名前空間を指定、書き込みモード
prefs.putString("mykey", "保存するデータ");
prefs.end();
読み出し方
// 読み出し
prefs.begin("myspace", true); // 読み取り専用モード
String value = prefs.getString("mykey", "デフォルト値");
prefs.end();
全体構成
シリアルで書き込みできるサンプルプログラムを作りました。
#include <Preferences.h>
Preferences prefs;
String inputBuffer = "";
void setup() {
Serial.begin(115200);
prefs.begin("storage", false);
// 起動時に保存されている値を読み出す
String savedValue = prefs.getString("mykey", "(保存なし)");
Serial.println("起動時の保存値: " + savedValue);
Serial.println("新しい値を入力してください(改行で送信):");
}
void loop() {
while (Serial.available()) {
char c = Serial.read();
if (c == '\n') { // 改行で確定
if (inputBuffer.length() > 0) {
prefs.putString("mykey", inputBuffer);
Serial.println("保存しました: " + inputBuffer);
inputBuffer = "";
Serial.println("再度入力するには文字列を送ってください:");
}
} else if (c != '\r') { // 改行コードのうちCRは無視
inputBuffer += c;
}
}
}
まとめ
設定を保存したいことがあると思います。そういうときに簡単に値を保存できるので非常に便利です。
参考
Non-Volatile Storage Library - ESP32 - — ESP-IDF Programming Guide v5.4.1 documentation