参考嵌入式终端AtShell的精简版.csdnmain.cpp读写测试#includeArduino.h#includeSimpleAtShell.h#includeSD.h#includeSPI.h// SD SPI引脚#defineSD_MISO19#defineSD_MOSI23#defineSD_SCK18#defineSD_CS5// 读取test.txt函数voidreadTestTxt(){Serial.println(\n----------读取test.txt----------);File fileSD.open(/test.txt,FILE_READ);if(!file){Serial.println(打开文件失败);return;}while(file.available()){Serial.write(file.read());}Serial.println(\n--------------------------------);file.close();}// 可选列出目录函数保留备用voidlistDir(fs::FSfs,constchar*dirname,uint8_tlevels){Serial.printf(目录: %s\n,dirname);File rootfs.open(dirname);if(!root){Serial.println(无法打开目录);return;}if(!root.isDirectory()){Serial.println(不是目录);return;}File fileroot.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());}fileroot.openNextFile();}}staticintreadTestTxt(intargc,char**argv){readTestTxt();return0;}staticvoidatshell_init(){Serial.begin(115200);at_init([](uint8_t*buf,uint32_tlen)-int{returnSerial.write(buf,len);});at_show_version();AT_SHELL_EXPORT(readTestTxt,读取test.txt,readTestTxt);}staticvoidsd_init(){SPI.begin(SD_SCK,SD_MISO,SD_MOSI,SD_CS);Serial.println(初始化SD卡...);if(!SD.begin(SD_CS)){Serial.println(SD卡初始化失败);return;}Serial.println(SD卡就绪);}voidsetup(){atshell_init();sd_init();}voidloop(){intlenSerial.available();if(len0){Serial.readBytes((uint8_t*)AT_m_buf,len);at_import((uint8_t*)AT_m_buf,len,millis());}}容量探测,如果探测不到,大概率卡已经损坏staticintsd_discover(intargc,char**argv){if(!SD.begin(SD_CS,SPI)){Serial.println(SD begin failed);return0;}Serial.printf(Card Type: %d\n,SD.cardType());Serial.printf(Card Size: %llu MB\n,SD.cardSize()/1024/1024);return0;}测试[01:27:13.080]发→◇0 □[01:27:13.083]收←◆AtShell commands:0.helplist cmd1. readTestTxt 读取test.txt[01:27:14.855]发→◇1 □[01:27:14.859]收←◆ ----------读取test.txt---------- Hello ESP32 SD Card PlatformIO Demo 测试写入文本 --------------------------------