LittleFSしたい

#include <LittleFS.h>

LittleFSはマイコンのフラッシュ領域にファイルを保存できるライブラリです。

ESP32などのマイコンには、揮発性メモリ(DRAM)と不揮発性メモリ(フラッシュ)の領域があります。

揮発性メモリは電源が落ちると消去される領域です。 プログラム実行時の変数や一時データを保存するのに使われます。 不揮発性メモリは電源が落ちても保存される領域です。 プログラムやファイルなどの永続データを保存するのに使われます。

LittleFSはフラッシュ領域をファイルシステムとして分割し、通常のファイル操作(読み書き、削除など)を可能にします。

警告

フラッシュ領域には書き込み回数の制限(一般に約10万~100万回)があります。

ESP32で初期化したい

 1#include <LittleFS.h>
 2
 3void setup() {
 4    Serial.begin(115200);
 5
 6    if (!LittleFS.begin()) {
 7        Serial.println("LittleFS Mount Failed");
 8        return;
 9    }
10    Serial.println("LittleFS Mounted Successfully");
11}
12
13void loop() {
14    // Your code here
15}

ESP32のArduino Core2.0以降では、LittleFSが標準で含まれています。

ESP8266で初期化したい

 1#include "LittleFS.h"
 2
 3void setup() {
 4    Serial.begin(115200);
 5
 6    if (!LittleFS.begin()) {
 7        Serial.println("LittleFS mount failed");
 8        return;
 9    }
10    Serial.println("LittleFS mounted successfully");
11}
12
13void loop() {
14    // Your code here
15}

ESP8266のArduinoコアには、LittleFSがビルトインされています。

ファイルの管理

ファイルを削除したい

 1void setup() {
 2    LittleFS.begin();
 3
 4    if (LittleFS.remove("/old_config.txt")) {
 5        Serial.println("File deleted");
 6    } else {
 7        Serial.println("Delete failed");
 8    }
 9}
10
11void loop() {}

ファイルが存在するか確認したい

 1void setup() {
 2    LittleFS.begin();
 3
 4    if (LittleFS.exists("/config.txt")) {
 5        Serial.println("File exists");
 6    } else {
 7        Serial.println("File does not exist");
 8    }
 9}
10
11void loop() {}

ファイル名を変更したい

1void setup() {
2    LittleFS.begin();
3    LittleFS.rename("/old.txt", "/new.txt");
4}
5
6void loop() {}

ディレクトリの操作

ディレクトリの中身を一覧表示したい

 1#include <LittleFS.h>
 2
 3void listDir(const char *dirname, uint8_t levels) {
 4    File root = LittleFS.open(dirname);
 5    if (!root || !root.isDirectory()) {
 6        Serial.println("Failed to open directory");
 7        return;
 8    }
 9
10    File file = root.openNextFile();
11    while (file) {
12        if (file.isDirectory()) {
13            Serial.print("DIR : ");
14            Serial.println(file.name());
15            if (levels) {
16                listDir(file.path(), levels - 1);
17            }
18        } else {
19            Serial.print("FILE: ");
20            Serial.print(file.name());
21            Serial.print(" SIZE: ");
22            Serial.println(file.size());
23        }
24        file = root.openNextFile();
25    }
26}
27
28void setup() {
29    LittleFS.begin();
30    listDir("/", 1);
31}
32
33void loop() {}

ディレクトリを作成したい

1void setup() {
2    LittleFS.begin();
3    LittleFS.mkdir("/data");
4}
5
6void loop() {}

ディレクトリを削除したい

1void setup() {
2    LittleFS.begin();
3    LittleFS.rmdir("/data");
4}
5
6void loop() {}

フラッシュメモリの情報

容量情報を確認したい

1// ESP32
2void setup() {
3    LittleFS.begin();
4    Serial.printf("Total: %u bytes\n", LittleFS.totalBytes());
5    Serial.printf("Used: %u bytes\n", LittleFS.usedBytes());
6}
7
8void loop() {}

ファイルをアップロードしたい

Arduino IDEを使ってパソコン上のファイルをマイコンのフラッシュメモリにアップロードするには、LittleFSアップローダーを使用します。

準備手順

  1. LittleFSアップローダーをインストール

    • Arduino IDE 2.x:プラグイン機能から「LittleFS Upload」をインストール

  2. スケッチのフォルダーにdataフォルダーを作成

    • Sketch > Show Sketch Folder でスケッチフォルダーを開く

    • dataというフォルダーを作成

    • ここにアップロードしたいファイル(HTMLファイルなど)を配置

  3. シリアルモニターを閉じる(重要)

  4. アップローダーを実行

    • Ctrl+Shift+P(Mac: Cmd+Shift+P)でコマンドパレットを開き、「Upload LittleFS」を実行

アップロード後の確認

 1#include <LittleFS.h>
 2
 3void listDir(const char *dirname, uint8_t levels) {
 4    File root = LittleFS.open(dirname);
 5    if (!root || !root.isDirectory()) return;
 6
 7    File file = root.openNextFile();
 8    while (file) {
 9        Serial.print("FILE: ");
10        Serial.println(file.name());
11        file = root.openNextFile();
12    }
13}
14
15void setup() {
16    Serial.begin(115200);
17    LittleFS.begin();
18    listDir("/", 1);
19}
20
21void loop() {}

ファイルモード

ファイルを開く際に、以下のモードを指定できます:

モード

説明

FILE_READ

読み込みのみ

FILE_WRITE

上書き(既存ファイルは削除)

FILE_APPEND

追記

関連メソッド

メソッド

説明

file.available()

読み込み可能なバイト数

file.read()

1バイト読み込む

file.write()

データを書き込む

file.print()

テキストを書き込む

file.println()

テキストを改行付きで書き込む

file.seek(offset, mode)

ファイルポジションを移動

file.size()

ファイルサイズ(バイト)

file.name()

ファイル名

file.close()

ファイルを閉じる

file.isDirectory()

ディレクトリかどうか判定