2018-03-04 21:20:34 +01:00
/*
* Connect the SD card to the following pins :
*
* SD Card | ESP32
* D2 -
* D3 SS
* CMD MOSI
* VSS GND
* VDD 3.3 V
* CLK SCK
* VSS GND
* D0 MISO
* D1 -
*/
# include "FS.h"
# include "SD_MMC.h"
# include "SPI.h"
# include <time.h>
# include <WiFi.h>
const char * ssid = " your-ssid " ;
const char * password = " your-password " ;
long timezone = 1 ;
byte daysavetime = 1 ;
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 . print ( file . name ( ) ) ;
time_t t = file . getLastWrite ( ) ;
struct tm * tmstruct = localtime ( & t ) ;
Serial . printf ( " LAST WRITE: %d-%02d-%02d %02d:%02d:%02d \n " , ( tmstruct - > tm_year ) + 1900 , ( tmstruct - > tm_mon ) + 1 , tmstruct - > tm_mday , tmstruct - > tm_hour , tmstruct - > tm_min , tmstruct - > tm_sec ) ;
if ( levels ) {
2021-04-15 16:25:01 +02:00
listDir ( fs , file . path ( ) , levels - 1 ) ;
2018-03-04 21:20:34 +01:00
}
} else {
Serial . print ( " FILE: " ) ;
Serial . print ( file . name ( ) ) ;
Serial . print ( " SIZE: " ) ;
Serial . print ( file . size ( ) ) ;
time_t t = file . getLastWrite ( ) ;
struct tm * tmstruct = localtime ( & t ) ;
Serial . printf ( " LAST WRITE: %d-%02d-%02d %02d:%02d:%02d \n " , ( tmstruct - > tm_year ) + 1900 , ( tmstruct - > tm_mon ) + 1 , tmstruct - > tm_mday , tmstruct - > tm_hour , tmstruct - > tm_min , tmstruct - > tm_sec ) ;
}
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 setup ( ) {
Serial . begin ( 115200 ) ;
// We start by connecting to a WiFi network
Serial . println ( ) ;
Serial . println ( ) ;
Serial . print ( " Connecting to " ) ;
Serial . println ( ssid ) ;
WiFi . begin ( ssid , password ) ;
while ( WiFi . status ( ) ! = WL_CONNECTED ) {
delay ( 500 ) ;
Serial . print ( " . " ) ;
}
Serial . println ( " WiFi connected " ) ;
Serial . println ( " IP address: " ) ;
Serial . println ( WiFi . localIP ( ) ) ;
Serial . println ( " Contacting Time Server " ) ;
configTime ( 3600 * timezone , daysavetime * 3600 , " time.nist.gov " , " 0.pool.ntp.org " , " 1.pool.ntp.org " ) ;
struct tm tmstruct ;
delay ( 2000 ) ;
tmstruct . tm_year = 0 ;
getLocalTime ( & tmstruct , 5000 ) ;
Serial . printf ( " \n Now is : %d-%02d-%02d %02d:%02d:%02d \n " , ( tmstruct . tm_year ) + 1900 , ( tmstruct . tm_mon ) + 1 , tmstruct . tm_mday , tmstruct . tm_hour , tmstruct . tm_min , tmstruct . tm_sec ) ;
Serial . println ( " " ) ;
if ( ! SD_MMC . begin ( ) ) {
Serial . println ( " Card Mount Failed " ) ;
return ;
}
uint8_t cardType = SD_MMC . 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_MMC . cardSize ( ) / ( 1024 * 1024 ) ;
Serial . printf ( " SD Card Size: %lluMB \n " , cardSize ) ;
listDir ( SD_MMC , " / " , 0 ) ;
removeDir ( SD_MMC , " /mydir " ) ;
createDir ( SD_MMC , " /mydir " ) ;
deleteFile ( SD_MMC , " /hello.txt " ) ;
writeFile ( SD_MMC , " /hello.txt " , " Hello " ) ;
appendFile ( SD_MMC , " /hello.txt " , " World! \n " ) ;
listDir ( SD_MMC , " / " , 0 ) ;
}
void loop ( ) {
}