Arduino ESP32 读写查看SD信息示例

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino ESP32 读写查看SD信息示例相关的知识,希望对你有一定的参考价值。

Arduino ESP32 读写查看SD信息示例




接线说明

ESP32----- SD
D5(GPIO 5)-----CS
D18(GPIO 18)-----SCK
D19(GPIO 19)-----MISO
D23()GPIO 23-----MOSI

示例代码

#include "FS.h"
#include "SD.h"
#include "SPI.h"

void listDir(fs::FS &fs, const char * dirname, uint8_t levels)
  Serial.printf("Listing directory: %s\\n", dirname);

  File root = fs.open(dirname);
  if(!root)
    Serial.println("Failed to open directory");
    return;
  
  if(!root.isDirectory())
    Serial.println("Not a directory");
    return;
  

  File file = root.openNextFile();
  while(file)
    if(file.isDirectory())
      Serial.print("  DIR : ");
      Serial.println(file.name());
      if(levels)
        listDir(fs, file.name(), levels -1);
      
     else 
      Serial.print("  FILE: ");
      Serial.print(file.name());
      Serial.print("  SIZE: ");
      Serial.println(file.size());
    
    file = root.openNextFile();
  


void createDir(fs::FS &fs, const char * path)
  Serial.printf("Creating Dir: %s\\n", path);
  if(fs.mkdir(path))
    Serial.println("Dir created");
   else 
    Serial.println("mkdir failed");
  


void removeDir(fs::FS &fs, const char * path)
  Serial.printf("Removing Dir: %s\\n", path);
  if(fs.rmdir(path))
    Serial.println("Dir removed");
   else 
    Serial.println("rmdir failed");
  


void readFile(fs::FS &fs, const char * path)
  Serial.printf("Reading file: %s\\n", path);

  File file = fs.open(path);
  if(!file)
    Serial.println("Failed to open file for reading");
    return;
  

  Serial.print("Read from file: ");
  while(file.available())
    Serial.write(file.read());
  
  file.close();


void writeFile(fs::FS &fs, const char * path, const char * message)
  Serial.printf("Writing file: %s\\n", path);

  File file = fs.open(path, FILE_WRITE);
  if(!file)
    Serial.println("Failed to open file for writing");
    return;
  
  if(file.print(message))
    Serial.println("File written");
   else 
    Serial.println("Write failed");
  
  file.close();


void appendFile(fs::FS &fs, const char * path, const char * message)
  Serial.printf("Appending to file: %s\\n", path);

  File file = fs.open(path, FILE_APPEND);
  if(!file)
    Serial.println("Failed to open file for appending");
    return;
  
  if(file.print(message))
      Serial.println("Message appended");
   else 
    Serial.println("Append failed");
  
  file.close();


void renameFile(fs::FS &fs, const char * path1, const char * path2)
  Serial.printf("Renaming file %s to %s\\n", path1, path2);
  if (fs.rename(path1, path2)) 
    Serial.println("File renamed");
   else 
    Serial.println("Rename failed");
  


void deleteFile(fs::FS &fs, const char * path)
  Serial.printf("Deleting file: %s\\n", path);
  if(fs.remove(path))
    Serial.println("File deleted");
   else 
    Serial.println("Delete failed");
  


void testFileIO(fs::FS &fs, const char * path)
  File file = fs.open(path);
  static uint8_t buf[512];
  size_t len = 0;
  uint32_t start = millis();
  uint32_t end = start;
  if(file)
    len = file.size();
    size_t flen = len;
    start = millis();
    while(len)
      size_t toRead = len;
      if(toRead > 512)
        toRead = 512;
      
      file.read(buf, toRead);
      len -= toRead;
    
    end = millis() - start;
    Serial.printf("%u bytes read for %u ms\\n", flen, end);
    file.close();
   else 
    Serial.println("Failed to open file for reading");
  


  file = fs.open(path, FILE_WRITE);
  if(!file)
    Serial.println("Failed to open file for writing");
    return;
  

  size_t i;
  start = millis();
  for(i=0; i<2048; i++)
    file.write(buf, 512);
  
  end = millis() - start;
  Serial.printf("%u bytes written for %u ms\\n", 2048 * 512, end);
  file.close();


void setup()
  Serial.begin(115200);
  if(!SD.begin(5))
    Serial.println("Card Mount Failed");
    return;
  
  uint8_t cardType = SD.cardType();

  if(cardType == CARD_NONE)
    Serial.println("No SD card attached");
    return;
  

  Serial.print("SD Card Type: ");
  if(cardType == CARD_MMC)
    Serial.println("MMC");
   else if(cardType == CARD_SD)
    Serial.println("SDSC");
   else if(cardType == CARD_SDHC)
    Serial.println("SDHC");
   else 
    Serial.println("UNKNOWN");
  

  uint64_t cardSize = SD.cardSize() / (1024 * 1024);
  Serial.printf("SD Card Size: %lluMB\\n", cardSize);

  listDir(SD, "/", 0);//
  createDir(SD, "/mydir");//创建文件夹
  listDir(SD, "/", 0);//
  removeDir(SD, "/mydir");//文件夹重命名
  listDir(SD, "/", 2);//
  writeFile(SD, "/hello.txt", "Hello World!\\n");//写数据到hello.txt文件
  appendFile(SD, "/hello.txt", "perseverance9527\\r\\n");//向文件内添加信息
  readFile(SD, "/hello.txt");//读取文件
  deleteFile(SD, "/foo.txt");//删除文件
  renameFile(SD, "/hello.txt", "/foo.txt");//文件重命名
  readFile(SD, "/foo.txt");
  testFileIO(SD, "/test.txt");
  Serial.printf("Total space: %lluMB\\n", SD.totalBytes() / (1024 * 1024));
  Serial.printf("Used space: %lluMB\\n", SD.usedBytes() / (1024 * 1024));


void loop()


  • 编译信息
 已使用: C:\\Users\\Administrator\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\1.0.6\\libraries\\SD
使用 1.0  版本的库 FS 在文件夹: C:\\Users\\Administrator\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\1.0.6\\libraries\\FS 
使用 1.0.5  版本的库 SD 在文件夹: C:\\Users\\Administrator\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\1.0.6\\libraries\\SD 
使用 1.0  版本的库 SPI 在文件夹: C:\\Users\\Administrator\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\1.0.6\\libraries\\SPI 
"C:\\\\Users\\\\Administrator\\\\AppData\\\\Local\\\\Arduino15\\\\packages\\\\esp32\\\\tools\\\\xtensa-esp32-elf-gcc\\\\1.22.0-97-gc752ad5-5.2.0/bin/xtensa-esp32-elf-size" -A "d:\\\\arduino\\\\MyHexDir/SDRead3.ino.elf"
项目使用了 247118 字节,占用了 (18%) 程序存储空间。最大为 1310720 字节。
全局变量使用了14088字节,(4%)的动态内存,余留313592字节局部变量。最大为327680字节。
  • 串口打印信息

以上是关于Arduino ESP32 读写查看SD信息示例的主要内容,如果未能解决你的问题,请参考以下文章

Arduino ESP32 SD卡读写实例

Arduino ESP32 第三方库读取SD卡信息

基于arduino的ESP32 学习笔记SD卡使用

基于arduino的ESP32 学习笔记SD卡使用

基于arduino的ESP32 学习笔记SD卡使用

基于arduino的ESP32 学习笔记SD卡使用