0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ESP32-S3 SD高速ファイル一覧取得

Posted at

Arduino IDEでファイル一覧の取得が遅い

2024 年現在でも、国内ではなぜか古い方法しかヒットしないためメモします。

ESP32 の Arduino IDE では、SD カード内のファイル一覧を取得する場合、SD.h を使用する古い方法しか検索でヒットしません。次のような感じです。

以前の方法(遅い)
#include <SPI.h>
#include <SD.h>

...

  if (SD.begin(CS_PIN)) {
    FILE root = SD.open("/"); // ルート
    while (1) {
      File entry = root.openNextFile();
      if (!entry) {
        break;
      }
      if (!entry.isDirectory()) { // ディレクトリでなければ
        String fileName = entry.name();
        ... 
      }
    }
    root.close();
  }

この、旧来の方法はすべてのファイルをopenしているため非常に遅い処理となっています。

FS.hを使った方法(超高速)

FS.h で新たに定義されたgetNextFileNameを使うとファイルのオープンを行わないため高速にファイルのシークが行えます。

新しい方法
#include <SPI.h>
#include <FS.h>
#include <SD.h>

...

  bool isDir;
  
  if (SD.begin(CS_PIN)) {
    File root = SD.open("/");
    while (1) {
      String fileName = root.getNextFileName(&isDir);
      if (fileName == "") break; // ファイルがない場合
      if (isDir) break; // ディレクトリの場合
      ...
    }
    root.close();
  }

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?