ESP32-WROOM-32のFlashへファイルI/Oすると便利
組込み開発をやっているとちょっとした情報を保存したい場合があります。ESP32-WROOM-32では簡単にFlashをファイルとして扱える方法がありますのでご紹介します。
こんにちはAIソリューション部のさかじです。 組込み開発をやっているとちょっとした情報を保存したい場合があります。ESP32-WROOM-32では簡単にFlashをファイルとして扱える方法がありますのでご紹介します。
はじめに
設定情報をファイルへ保存ことがあります。組込みプログラムでは簡単にできません。私が今まで使っていた設定情報を保存する方法は以下の方法を使っていました。
- EEPROMなど外部ICなどに保存
- 内蔵Flashへ保存(セクタ直接書き込み)
しかし、以下のような手間が発生します。
- ファームウェアを書き換えたら消える
- 追加の部品が発生する
ESP32-WROOM-32には内部FlashへファイルI/OできるSPIFFS(SPI Flash File System)という機能があります。こちらを利用することでちょっとしたデータを保存することができます。
環境
- MacBook Pro(macOS High Sierra 10.13.6)
- micro USB-Bメス ケーブル(使用するPC/Macに合わせてご用意ください)
- Arduino IDE(V1.8.7)
- ESP32-DevKitC ESP-WROOM-32開発ボード
準備
- インクルード, 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
最後に
頻繁に書き換える用途には向いていませんが、ちょっとした状態を保存するなど頻繁に読み書きしないことに向いています。部品も用意せず情報を読み書きできるので非常に便利な機能だと思います。