Arduino ESP32 读取Micro sd卡容量信息示例

Posted perseverance52

tags:

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

Arduino ESP32 读取Micro sd卡容量信息示例



接线说明

ESP32 ----Micro SD
VIN (DEVKIT这个引脚有5V电压)---- VCC
GND  ----GND
D23(GPIO 23) ---- MOSI
D19(GPIO 19) ---- MISO
D18(GPIO 18) ---- SCK(CLK)
D5(GPIO 5)  ---- CS

读取Micro SD容量信息代码

/*
ESP32 ----Micro SD
VIN (DEVKIT这个引脚有5V电压)---- VCC
GND  ----GND
D23(GPIO 23) ---- MOSI
D19(GPIO 19) ---- MISO
D18(GPIO 18) ---- SCK(CLK)
D5(GPIO 5)  ---- CS
 */
#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())
        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 ");
    appendFile(SD, "/hello.txt", "World!\\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()


  • 串口打印信息

以上是关于Arduino ESP32 读取Micro sd卡容量信息示例的主要内容,如果未能解决你的问题,请参考以下文章

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

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

Arduino ESP8266 Micro SD卡读写操作实例

Arduino ESP32 读取SD卡接口选择参考

Arduino ESP32 Web服务器从microSD卡读取

Arduino ESP8266 Micro SD卡写操作实例