ESP32でSPIFFSにファイルを読み書きする方法
ESP32-WROOM-32では搭載されているフラッシュメモリの一部をストレージとして使用できる機能「SPIFFS」があります。
ちょっとしたWebサーバーを構築してテンプレートファイルを保存するときわざわざSDカードなどの外部メディアに保存せずにどうにかならないか探したところ、この機能を知りました。
開発環境
- Arduino IDE
- ESP32-WROOM-32 NodeMCU開発ボード
特徴
一度書き込んだファイルはスケッチを書き換えても消えません。
スケッチにバイナリを保存する手間が省けます。
SPIFFSのサンプルプログラム
include、定義
#include "FS.h"
#include "SPIFFS.h"
#define FORMAT_SPIFFS_IF_FAILED true
初期処理
void setup(){
Serial.begin(115200);
if(!SPIFFS.begin(FORMAT_SPIFFS_IF_FAILED)){
Serial.println("SPIFFS Mount Failed");
return;
}
}
ディレクトリ、ファイル一覧を取得(サブフォルダを含む)
void listDir(fs::FS &fs, const char * dirname, uint8_t levels){
File root = fs.open(dirname);
if(!root){
return;
}
// ルートがディレクトリなら処理終了
if(!root.isDirectory()){
return;
}
// 次のファイルまたはディレクトリを取得
File file = root.openNextFile();
while(file){
if(file.isDirectory()){
// ディレクトリ名を出力
Serial.print(" DIR : ");
Serial.println(file.name());
if(levels){
// サブディレクトリを出力
listDir(fs, file.name(), levels -1);
}
} else {
// ファイル名とファイルサイズを出力
Serial.print(" FILE: ");
Serial.print(file.name());
Serial.print("\tSIZE: ");
Serial.println(file.size());
}
file = root.openNextFile();
}
}
呼び出し
// "/"以下のファイル、ディレクトリを出力。サブディレクトリは出力しない。
listDir(SPIFFS, "/", 0);
// "/"以下のファイル、ディレクトリを出力。サブディレクトリは2階層まで出力する。
listDir(SPIFFS, "/", 1);
ファイル書き込み
void writeFile(fs::FS &fs, const char * path, const char * message){
File file = fs.open(path, FILE_WRITE);
if(!file){
return;
}
file.print(message);
}
呼び出し
writeFile(SPIFFS, "/test.txt", "test message");
ファイル追記
void appendFile(fs::FS &fs, const char * path, const char * message){
File file = fs.open(path, FILE_APPEND);
if(!file){
return;
}
file.print(message);
}
ファイル読み込み
void readFile(fs::FS &fs, const char * path){
File file = fs.open(path);
if(!file || file.isDirectory()){
return;
}
while(file.available()){
Serial.write(file.read());
}
}
呼び出し
readFile(SPIFFS, "/test.txt");
ファイル削除
void renameFile(fs::FS &fs, const char * path1, const char * path2){
fs.rename(path1, path2);
}
呼び出し
deleteFile(SPIFFS, "/test.txt");
Arduino IDEからファイルをアップロードする
受信したメッセージやファイルをスケッチで書き込むのではなく、Arduino IDEから直接アップロードすることができます。
①以下サイトに接続し「release page」をクリック。
https://github.com/me-no-dev/arduino-esp32fs-plugin
② ESP32FSの最新版をダウンロード。
③Arduino IDEの「ファイル」→「環境設定」→スケッチブックの保存場所に記載のあるフォルダ配下に「tools」フォルダを作成。
④作成した「tools」フォルダに②でダウンロードして解凍したフォルダを配置し、Arduino IDEを再起動。
⑤「ESP32 Sketch Data Upload」が追加されました。
Arduino IDEからESP32へファイルをアップロード
①スケッチフォルダ配下に「data」フォルダを作成し、アップロードしたファイルを配置します。
test.txt
hello world
②Arduino IDEの「ESP32 Sketch Data Upload」をクリックすればアップロード完了です。
ディスカッション
コメント一覧
まだ、コメントがありません