2025年7月14日月曜日

ESP32/arduino : LittleFS を使用する

目的:

arduino IDE でこれまで使用してきた SPIFFS が 非推奨となり、SPIFFS アップローダ も IDE 2.xx では 使用できない。
この為、LittleFS を使用して ファイルの生成, リード 等の記述を試した。

SPIFFS から LittleFS への移行 :

SPIFFS から LittleFS へ書き換える場合の変更箇所としては、主に
  1. include file
    SPIFFS.h → LittleFS.h
  2. コード
    主に 以下の様に "SPIFFS" を "LittleFS" に 書き換えれば 動作する。
    SPIFFS.begin  → LittleFS.begin
    SPIFFS.exists → LittleFS.exists
    SPIFFS.open   → LittleFS.open
    SPIFFS.remove → LittleFS.remove

サンプルコード

以下にサンプルコートを表示する。
サンプルコードでは、
ファイルの存在確認を行い、
あればファイルを1行づつ読み込んで行数をカウントする。
その後、ファイルに1行書き足して終了。
実行する(リセットする)たび、ファイルの内容が 1行づつ増えていく。

コードの説明は、サンプルコード内の コメントを参照。

#include <Arduino.h>                           //
#include "FS.h"                                // LittleFS 使用に必要
#include <LittleFS.h>                          // LittleFS 使用に必要

void setup() {                                 //  
  File datafile ;                              // File 定義
  String buf = ""   ;                          // 文字列変数 定義
  String lbuf = ""  ;                          // 文字列変数 定義
  int n = 0 ;                                  //
                                               //
  Serial.begin(115200);                        // シリアル 開始
  Serial.println("") ;                         //
  Serial.println(" ------ Test Start ----------") ; //
                                               //
  // LittleFS テスト ------------------------- //
  if (!LittleFS.begin(true)) {                 // LittleFS 開始
    Serial.println("ファイルシステムのマウントに失敗") ; //
    return ;                                   //
  }                                            //
                                               // 
  // ファイルの存在チェック ------------------ // 
  Serial.println(" ------ Check_file ----------") ; //
  if (LittleFS.exists("/data_1.txt")) {        // data_1.txt ファイル存在確認
    Serial.println("data_1.txt 有り") ;        // あった場合の表示
    // ファイルのリード -----------------------//
    datafile = LittleFS.open("/data_1.txt","r") ; 
                                             // ファイルをリードモードでオープン
    if (!datafile) {                           //
      Serial.println("datafile open error !!"); // オープン失敗時の表示
    } else {                                   //
      //  ファイルを1行づつリード
      n = 0 ;                                  //
      while (datafile.available()) {           // リードできる文字がある間ループ
        lbuf = datafile.readStringUntil('\n') ;  // ファイルを1行リード
        Serial.println(lbuf) ;                 // リードした内容の表示
        n++ ;                                  // 行数をカウント
        buf += lbuf + "\n" ;                   // buf に追加
      } ;                                      //
      Serial.println("line no. :" + String(n)) ; // リードした  行数の表示

      datafile.close() ;                       // ファイルをクローズ
    }                                          //
  } else {                                     //
    Serial.println("data_1.txt なし") ;        // 無かった場合の表示
  }                                            //
                                               //
  // ファイルのライト -------------------------//
      Serial.println(" ------ File W/R Test Start ----------") ; //
  datafile = LittleFS.open("/data_1.txt","w") ; 
                                             // ファイルをライトモードでオープン
  if (!datafile) {                             // 
    Serial.println("datafile open error !! ") ; // オープン失敗時の表示
  } else {                                     // 
    buf += "data add line #" + String(n) + "\n" ;  // 文字列を追加
    Serial.println("   write data :") ;        // 書き込む内容を表示
    Serial.print(buf) ;                        //
    Serial.println("") ;                       //
    datafile.print(buf) ;                      // data_1.txt に書き込み
    datafile.close() ;                         // ファイルをクローズ
  }                                            // 
                                               // 
  // ファイルのリード -------------------------//
  Serial.println("   read check  --- ") ;      //
  datafile = LittleFS.open("/data_1.txt","r") ; 
                                               // ファイルをリードモードでオープン
  if (!datafile) {                             //
    Serial.println("datafile open error !!"); // オープン失敗時の表示
  } else {                                     //
    buf = datafile.readString() ;              // ファイルをリード
    Serial.print(buf) ;                        // リードした内容の表示
    Serial.println("") ;                       //
    datafile.close() ;                         // ファイルをクローズ
  }                                            //
                                               //
  Serial.println(" ------ File W/R Test End ----------") ; //

  // ファイルの削除 , 削除して終わる場合は 以下のコメントアウトを外す
  //if (LittleFS.remove("/data_1.txt")) {        // data_1.txt ファイル存在確認
  //   Serial.println("data_1.txt 削除成功") ;   // 成功時の表示
  //} else {                                     //
  //   Serial.println("data_1.txt 削除失敗") ;   // 失敗時の表示
  //}                                            //
  // ------- ここまで ---------------------------//
}
// loop() は 未使用 -----------------------------
void loop() { }                                // 処理なし

実行結果 (シリアル出力)



0 件のコメント:

コメントを投稿