ESP32にデータを保存する

技術関連

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

タイトルとURLをコピーしました