LittleFS

SPIFFSで警告が

最近SPIFFSを使ったスケッチをコンパイルすると、

SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems.

と言う警告が出るようになりました。意味は、”SPIFFSは非推奨です。LittleFSか他のファイルシステムを考慮ください”。スケッチ自体は問題無く動くのですがコンパイルで警告が出るのはあまり気分の良いものでは有りません。そこでLittleFSについて調べて見ました。

LittleFS

Webで検索すると、”https://arduino-esp8266.readthedocs.io/en/latest/filesystem.html”を見つけました。SPIFFSと比較して違いを説明しています。

  • SPIFFSは現在非推奨で将来削除される可能性がある。
  • LittleFSの方がSIPFFSより何倍も高速
  • LittleFSがファイル名として使用出来のは32文字。実際には31文字+terminating
  • SPIFFSはdirectoryをサポートしていないが、LittleFSはサポートしている
  • Subdirectoryはスケッチ上から任意に製作、削除が可能。
  • SystemへのUploadは、ESP8266 LittleFS Data Uploadを使用
  • SPIFFSからLittleFSに変換するには、SPIFFS.begin()をLitt​​leFS.begin()に、SPIFFS.open()をLitt​​leFS.open()の様に行う

この比較から”LittleFS”への移行は簡単に出来そうです。

実際のスケッチ

簡単なスケッチを書いて見ました。


#include "LittleFS.h" 

void setup() 
{
  File dataFile;
  String buf;
  
    Serial.begin(115200);
    delay(500);

    LittleFS.begin();
    Serial.println("LittleFS started");

    dataFile = LittleFS.open("test.txt", "w");
    dataFile.println("root_dir");
    dataFile.close();
    
    dataFile = LittleFS.open("123/test.txt", "w");
    dataFile.println("sub_dir");
    dataFile.close();
    
    dataFile = LittleFS.open("test.txt", "r");
    buf = dataFile.readStringUntil('\n');
    dataFile.close();
    Serial.println("buf=" + buf);

    dataFile = LittleFS.open("123/test.txt", "r");
    buf = dataFile.readStringUntil('\n');
    dataFile.close();
    Serial.println("buf=" + buf);
    
}

void loop() 
{
  
}
  • 1行 #include “LittleFS.h”
    • ヘッダーの読み込み
  • 5行 File dataFile;
    • File型変数の宣言
  • 11行 LittleFS.begin();
    • LittleFSの開始
  • 14から16行 ファイルの新規作成(ルートディレクトリ) 
    • ルートディレクトリに、”root_dir”と書いた”test.txt”ファイルを作成。
  • 18から20行 ファイルの新規作成(サブディレクトリ) 
    • サブディレクトリに、”sub_dir”と書いた”test.txt”ファイルを作成。
  • 22から25行
    • ルートディレクトリの”test.txt”ファイル読み出しと表示。
  • 27から30行
    • サブディレクトリの”test.txt”ファイル読み出しと表示。

今回はESP8266を使用しています。スケッチを実行して下さい。シリアルモニタに

と結果が表示されます。正しく動作している様です。

データのUpload

SystemへデータをUploadするには、ESP8266 LittleFS Data Uploadをインストールする必要が有ります。”https://arduino-esp8266.readthedocs.io/en/latest/filesystem.html”にインストール方法が説明されています。

  • Download the 2.6.0 or later version of the tool:
    • ダウンロードしたファイルを解凍すると、ESP8266LittleFS-2.6.0/ESP8266LittleFS/tool/esp8266littlefs.jar”が作成される。
    • コピーするのは解凍したファイルの、”ESP8266LittleFS”ホルダー。
  • スケッチのディレクトリの”tools” ホルダーに”ESP8266LittleFS”ホルダーをコピー。
    • tools” ホルダーがなければ製作。
      • ファイル>環境設定と選択し、開いたウインドウの上部に”スケッチブックの保存場所”が表示されます。
      • そこに”tools” ディレクトリがなければ製作。
  • Arduino IDEを再起動。
  • スケッチを開いて、”スケッチ > スケッチフォルダーの表示”を選択。
  • そこに、”data”フォルダーを製作。その中にデータファイルを保存。
  • ボードが正しく選ばれていることを確認。
    • IDEで、ツール>flash size を選択するとボードに合ったFlash Sizeを選択出来ます。
  • シリアルモニタは閉じる。開いているとエラーが出ます。
  • ボードを書き込み状態に設定。
  • IDEで、ツール>ESP8266 Sketch Data Uploadを選択してデータをUploadする。

SubDirectryを持ったデータのUpload

Upload するデータはスケッチ内の”data” ディレクトリに保存します。

  • ”data” ディレクトリに、”test.txt”を作成
    • ファイルの中身は、”root_dir” 。
  • ”data” ディレクトリにSubDirectry、”123”を作成してその中に、”test.txt”を保存
    • ファイルのパス: 123/test.txt
    • ファイルの中身は、”sub_dir” 。

これで、”root_dir” と書かれた”test.txt”がルートディレクトリに、”sub_dir”と書かれた”test.txt”が、サブディレクトリ “123/” に保存されます。下記は各々のファイルを表示するスケッチです。


#include "LittleFS.h" 

void setup() 
{
  File dataFile;
  String buf;
  
    Serial.begin(115200);
    delay(500);

    LittleFS.begin();
    Serial.println("LittleFS started");

    dataFile = LittleFS.open("test.txt", "r");
    buf = dataFile.readStringUntil('\n');
    dataFile.close();
    Serial.println("buf=" + buf);

    dataFile = LittleFS.open("123/test.txt", "r");
    buf = dataFile.readStringUntil('\n');
    dataFile.close();
    Serial.println("buf=" + buf);
    
}

void loop() 
{
  
}

このスケッチをコンパイル。次に、ESP8266 Sketch Data Uploadを使ってデータをUploadした後、実行して下さい。シリアルモニタに想定通りの文字が表示されます。

最後に

確かにLittleFSはSPIFFSより機能が豊富です。でも一番嬉しいのは、サブディレクトリが使えることです。今後は、LittleFSを使って行きたいと思います。