見出し画像

ESP32 SPIFFS に書き込めない罠

こんにちは、Rcatです。
今回は、ESP32-S3実験中に改めて思ったこととして、SPIFFSの罠を上げたいと思います


何が罠なの?

よくネットで探すと以下のようなコードはありませんか?

SPIFFS.begin();
File file = fs.open(path, FILE_WRITE);
file.print("spiffs");
file.close();

書き込みで保存するコードなのですが、これ書き込めないんですよね。
具体的にはコード実行後もファイルが保存されていない感じ。

原因

最初期にSPIFFSをフォーマットしていないのが原因

なぜそんなことに?

私がこれに気付かなかったのは、SPIFFSに対してPCからファイルを書き込むために使うのを最初にやったからでしょうか。

PCから書き込みだと平気な件

よく、PCからSPIFFSにアップロード(Wi-Fi経由と誤解するのでこの言い方は好きじゃないが)するために、"ESP32 Sketch Data Upload"ツールを用いるが、これがフォーマットもやるのか分からないが実行された後は普通に上記のスケッチでファイルの読み書きができるようになる
つまりは、ツールでフォーマットされていたのでフォーマットしないと使えないことを知らなかったんですね。

解決策は

コードを以下に修正します

SPIFFS.begin(true);
File file = fs.open(path, FILE_WRITE);
file.print("spiffs");
file.close();

開始時にtrueを指定することでフォーマットすることができます。
なお、2.0.5のソースを見るとtrueを渡した場合はフォーマットされてないときだけフォーマット処理が入るみたいです。
これでツールを使った書き込みを最初に行わなくてもSPIFFSが使えるようになります。

ちなみに、下記を使用することでコードの中で強制的にフォーマットすることも可能です。
begin(true)でも未フォーマット時には下記が呼び出されています。

SPIFFS.format();

Wi-Fi経由でアップロードするには?

ファイルを"アップロード"というとやっぱり無線でアップロードが連想されますよね。
そんな例はなかったので私が作りました。
以下の記事でWi-Fiを使いPC/スマホからファイルを本当の意味でアップロードできます。


情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。