Browse Source

Updated included examples:

- A "re-define" of SPIFFS to LITTLEFS to reuse existing sketches 
- File and Directory operations - LITTLEFS.rmdir(path) and LITTLEFS.mkdir(path)
- Get file timestamps by file.getLastWrite(), needs an esp32 core on IDFv3.3
lorol 4 years ago
parent
commit
d5c678a076
2 changed files with 247 additions and 2 deletions
  1. 219 0
      examples/LITTLEFS_time/LITTLEFS_time.ino
  2. 28 2
      examples/LittleFS_test/LittleFS_test.ino

+ 219 - 0
examples/LITTLEFS_time/LITTLEFS_time.ino

@@ -0,0 +1,219 @@
+#include "FS.h"
+//#include "SPIFFS.h" 
+#include "LITTLEFS.h"
+#include <time.h> 
+#include <WiFi.h>
+
+#define SPIFFS LITTLEFS
+
+/* This examples uses "quick re-define" of SPIFFS to run 
+   an existing sketch with LITTLEFS instead of SPIFFS
+   
+   To get time/date stamps by file.getLastWrite(), you need an 
+   esp32 core on IDF 3.3 and comment a line in file esp_littlefs.c:
+   
+   //#define CONFIG_LITTLEFS_FOR_IDF_3_2
+
+   You only need to format LITTLEFS the first time you run a
+   test or else use the LITTLEFS plugin to create a partition
+   https://github.com/lorol/arduino-esp32littlefs-plugin */
+   
+#define FORMAT_LITTLEFS_IF_FAILED true
+
+const char* ssid     = "yourssid";
+const char* password = "yourpass";
+
+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){
+                listDir(fs, file.name(), levels -1);
+            }
+        } 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("\nNow 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(!SPIFFS.begin(FORMAT_LITTLEFS_IF_FAILED)){
+        Serial.println("LITTLEFS Mount Failed");
+        return;
+    }
+
+    Serial.println("----list 1----");
+    listDir(SPIFFS, "/", 1);
+	
+    Serial.println("----remove old dir----");
+    removeDir(SPIFFS, "/mydir");
+	
+    Serial.println("----create a new dir----");
+    createDir(SPIFFS, "/mydir");
+	
+    Serial.println("----remove the new dir----");
+    removeDir(SPIFFS, "/mydir");
+	
+    Serial.println("----create the new again----");
+    createDir(SPIFFS, "/mydir");
+	
+    Serial.println("----create and work with file----");
+    writeFile(SPIFFS, "/mydir/hello.txt", "Hello ");
+    appendFile(SPIFFS, "/mydir/hello.txt", "World!\n");
+
+    Serial.println("----list 2----");
+    listDir(SPIFFS, "/", 1);
+	
+    Serial.println("----attempt to remove dir w/ file----");
+    removeDir(SPIFFS, "/mydir");
+	
+    Serial.println("----remove dir after deleting file----");
+    deleteFile(SPIFFS, "/mydir/hello.txt");
+    removeDir(SPIFFS, "/mydir");
+	
+	Serial.println("----list 3----");
+    listDir(SPIFFS, "/", 1);
+	
+	Serial.println( "Test complete" );
+
+}
+
+void loop(){
+
+}

+ 28 - 2
examples/LittleFS_test/LittleFS_test.ino

@@ -2,9 +2,10 @@
 #include "FS.h"
 #include <LITTLEFS.h>
 
-/* You only need to format SPIFFS the first time you run a
+/* You only need to format LITTLEFS the first time you run a
    test or else use the LITTLEFS plugin to create a partition
-   https://github.com/me-no-dev/arduino-esp32fs-plugin */
+   https://github.com/lorol/arduino-esp32littlefs-plugin */
+   
 #define FORMAT_LITTLEFS_IF_FAILED true
 
 void listDir(fs::FS &fs, const char * dirname, uint8_t levels){
@@ -38,6 +39,24 @@ void listDir(fs::FS &fs, const char * dirname, uint8_t levels){
     }
 }
 
+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\r\n", path);
 
@@ -166,6 +185,12 @@ void setup(){
     }
     
     listDir(LITTLEFS, "/", 0);
+	createDir(LITTLEFS, "/mydir");
+	writeFile(LITTLEFS, "/mydir/hello2.txt", "Hello2");
+	listDir(LITTLEFS, "/", 1);
+	deleteFile(LITTLEFS, "/mydir/hello2.txt");
+	removeDir(LITTLEFS, "/mydir");
+	listDir(LITTLEFS, "/", 1);
     writeFile(LITTLEFS, "/hello.txt", "Hello ");
     appendFile(LITTLEFS, "/hello.txt", "World!\r\n");
     readFile(LITTLEFS, "/hello.txt");
@@ -174,6 +199,7 @@ void setup(){
     deleteFile(LITTLEFS, "/foo.txt");
     testFileIO(LITTLEFS, "/test.txt");
     deleteFile(LITTLEFS, "/test.txt");
+	
     Serial.println( "Test complete" );
 }