ESP32-WROOM-32のFlashへファイルI/Oすると便利

組込み開発をやっているとちょっとした情報を保存したい場合があります。ESP32-WROOM-32では簡単にFlashをファイルとして扱える方法がありますのでご紹介します。
2019.04.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちはAIソリューション部のさかじです。 組込み開発をやっているとちょっとした情報を保存したい場合があります。ESP32-WROOM-32では簡単にFlashをファイルとして扱える方法がありますのでご紹介します。

はじめに

設定情報をファイルへ保存ことがあります。組込みプログラムでは簡単にできません。私が今まで使っていた設定情報を保存する方法は以下の方法を使っていました。

  • EEPROMなど外部ICなどに保存
  • 内蔵Flashへ保存(セクタ直接書き込み)

しかし、以下のような手間が発生します。

  • ファームウェアを書き換えたら消える
  • 追加の部品が発生する

ESP32-WROOM-32には内部FlashへファイルI/OできるSPIFFS(SPI Flash File System)という機能があります。こちらを利用することでちょっとしたデータを保存することができます。

環境

準備

  • インクルード, define
#include "FS.h"
#include "SPIFFS.h"

#define FORMAT_SPIFFS_IF_FAILED true

ファイルシステム初期化

  SPIFFS.begin(FORMAT_SPIFFS_IF_FAILED);

ファイル書き込み

  fs::FS fs = SPIFFS;
  File file = fs.open("/hello.txt", FILE_WRITE);
  file.print("Hello world!");

ファイル読み込み

  fs::FS fs = SPIFFS;
  File file = fs.open("/hello.txt");
  while(file.available()){
    Serial.write(file.read());
  }

SPIFFSを使用するにあたって

メリット

  • ファームウェアを書き換えても消えない(ただし内蔵Flashが空いている状態であること)

デメリット

  • ファイル読み書きが遅い
  • ファームウェアの空き領域を使用するため大きいファイルは作成できない

参考

EPS32-WROOM-32 Datasheet github

最後に

頻繁に書き換える用途には向いていませんが、ちょっとした状態を保存するなど頻繁に読み書きしないことに向いています。部品も用意せず情報を読み書きできるので非常に便利な機能だと思います。