lorol 4 роки тому
батько
коміт
1e732f2c91

+ 3 - 1
README.md

@@ -63,7 +63,9 @@ Read [here](https://github.com/joltwallet/esp_littlefs/blob/master/Kconfig) and
 - Restart Arduino IDE. 
 
 ### PlatformIO
- ( notes from [BlueAndi](https://github.com/BlueAndi) )
+
+- See [LITTLEFS_PlatformIO example here](https://github.com/lorol/LITTLEFS/tree/master/examples/LITTLEFS_PlatformIO)  
+ ( based on notes below from [BlueAndi](https://github.com/BlueAndi) )
 - Add to _platformio.ini_:
  `extra_scripts = replace_fs.py`
  

+ 4 - 0
examples/LITTLEFS_PlatformIO/.gitignore

@@ -0,0 +1,4 @@
+.pio
+.vscode
+mklittlefs.exe
+mklittlefs

+ 61 - 0
examples/LITTLEFS_PlatformIO/README.md

@@ -0,0 +1,61 @@
+# How to run on PlatformIO IDE
+
+- Download and extract here the **mklittlefs** executable for your OS from a zipped binary [here](https://github.com/earlephilhower/mklittlefs/releases) 
+- Open **LITTLEFS_PlatformIO** folder
+- Run PlatformIO project task: **Upload Filesystem Image** 
+- Run PlatformIO project task: **Upload and Monitor**
+- You will see a Serial output like:
+```
+--- Miniterm on COM5  115200,8,N,1 ---
+--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
+Listing directory: /
+  FILE: /file1.txt      SIZE: 3
+  FILE: /test.txt       SIZE: 0
+  DIR : /testfolder
+Creating Dir: /mydir
+Dir created
+Writing file: /mydir/hello2.txt
+- file written
+Listing directory: /
+  FILE: /file1.txt      SIZE: 3
+  DIR : /mydir
+Listing directory: /mydir
+  FILE: /mydir/hello2.txt       SIZE: 6
+  FILE: /test.txt       SIZE: 0
+  DIR : /testfolder
+Listing directory: /testfolder
+  FILE: /testfolder/test2.txt   SIZE: 3
+Deleting file: /mydir/hello2.txt
+- file deleted
+Removing Dir: /mydir
+Dir removed
+Listing directory: /
+  FILE: /file1.txt      SIZE: 3
+  FILE: /test.txt       SIZE: 0
+  DIR : /testfolder
+Listing directory: /testfolder
+  FILE: /testfolder/test2.txt   SIZE: 3
+Writing file: /hello.txt
+- file written
+Appending to file: /hello.txt
+- message appended
+Reading file: /hello.txt
+- read from file:
+Hello World!
+Renaming file /hello.txt to /foo.txt
+- file renamed
+Reading file: /foo.txt
+- read from file:
+Hello World!
+Deleting file: /foo.txt
+- file deleted
+Testing file I/O with /test.txt
+- writing................................................................
+ - 1048576 bytes written in 11369 ms
+- reading................................................................
+- 1048576 bytes read in 523 ms
+Deleting file: /test.txt
+- file deleted
+Test complete
+```
+- If you have a module with more than 4MB flash, you can uncomment **partitions_custom.csv** in **platformio.ini** and modify the csv file accordingly

+ 1 - 0
examples/LITTLEFS_PlatformIO/data/file1.txt

@@ -0,0 +1 @@
+aaa

+ 1 - 0
examples/LITTLEFS_PlatformIO/data/testfolder/test2.txt

@@ -0,0 +1 @@
+bbb

+ 0 - 0
examples/LITTLEFS_PlatformIO/include/.placeholder.txt


+ 0 - 0
examples/LITTLEFS_PlatformIO/lib/.placeholder.txt


+ 2 - 0
examples/LITTLEFS_PlatformIO/littlefsbuilder.py

@@ -0,0 +1,2 @@
+Import("env")
+env.Replace( MKSPIFFSTOOL=env.get("PROJECT_DIR") + '/mklittlefs' )

+ 6 - 0
examples/LITTLEFS_PlatformIO/partitions_custom.csv

@@ -0,0 +1,6 @@
+# Name,   Type, SubType,  Offset,   Size,  Flags
+ota_0,     app, ota_0,   0x10000,  0x1A0000
+ota_1,     app, ota_1,          ,  0x1A0000
+otadata,  data, ota,    0x350000,  0x2000
+nvs,      data, nvs,            ,  0x6000 
+data,     data, spiffs,         ,  0xA8000

+ 31 - 0
examples/LITTLEFS_PlatformIO/platformio.ini

@@ -0,0 +1,31 @@
+; PlatformIO Project Configuration File
+;
+;   Build options: build flags, source filter
+;   Upload options: custom upload port, speed and extra flags
+;   Library options: dependencies, extra library storages
+;   Advanced options: extra scripting
+;
+; Please visit documentation for the other options and examples
+; https://docs.platformio.org/page/projectconf.html
+
+[platformio]
+default_envs = esp32
+
+[env]
+framework = arduino
+
+[env:esp32]
+platform = https://github.com/platformio/platform-espressif32.git
+build_flags = 
+	${env.build_flags} 
+	-D=${PIOENV} 
+	-DCONFIG_LITTLEFS_FOR_IDF_3_2 
+
+lib_deps = https://github.com/lorol/LITTLEFS.git
+
+board = esp32dev
+;board_build.partitions = partitions_custom.csv
+monitor_filters = esp32_exception_decoder
+monitor_speed = 115200
+
+extra_scripts = ./littlefsbuilder.py

+ 208 - 0
examples/LITTLEFS_PlatformIO/src/main.cpp

@@ -0,0 +1,208 @@
+#include <Arduino.h>
+#include "FS.h"
+#include <LITTLEFS.h>
+
+/* 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
+
+void listDir(fs::FS &fs, const char * dirname, uint8_t levels){
+    Serial.printf("Listing directory: %s\r\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("\tSIZE: ");
+            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\r\n", path);
+
+    File file = fs.open(path);
+    if(!file || file.isDirectory()){
+        Serial.println("- failed to open file for reading");
+        return;
+    }
+
+    Serial.println("- 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\r\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\r\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\r\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\r\n", path);
+    if(fs.remove(path)){
+        Serial.println("- file deleted");
+    } else {
+        Serial.println("- delete failed");
+    }
+}
+
+void testFileIO(fs::FS &fs, const char * path){
+    Serial.printf("Testing file I/O with %s\r\n", path);
+
+    static uint8_t buf[512];
+    size_t len = 0;
+    File file = fs.open(path, FILE_WRITE);
+    if(!file){
+        Serial.println("- failed to open file for writing");
+        return;
+    }
+
+    size_t i;
+    Serial.print("- writing" );
+    uint32_t start = millis();
+    for(i=0; i<2048; i++){
+        if ((i & 0x001F) == 0x001F){
+          Serial.print(".");
+        }
+        file.write(buf, 512);
+    }
+    Serial.println("");
+    uint32_t end = millis() - start;
+    Serial.printf(" - %u bytes written in %u ms\r\n", 2048 * 512, end);
+    file.close();
+
+    file = fs.open(path);
+    start = millis();
+    end = start;
+    i = 0;
+    if(file && !file.isDirectory()){
+        len = file.size();
+        size_t flen = len;
+        start = millis();
+        Serial.print("- reading" );
+        while(len){
+            size_t toRead = len;
+            if(toRead > 512){
+                toRead = 512;
+            }
+            file.read(buf, toRead);
+            if ((i++ & 0x001F) == 0x001F){
+              Serial.print(".");
+            }
+            len -= toRead;
+        }
+        Serial.println("");
+        end = millis() - start;
+        Serial.printf("- %u bytes read in %u ms\r\n", flen, end);
+        file.close();
+    } else {
+        Serial.println("- failed to open file for reading");
+    }
+}
+
+void setup(){
+    Serial.begin(115200);
+    if(!LITTLEFS.begin(FORMAT_LITTLEFS_IF_FAILED)){
+        Serial.println("LITTLEFS Mount Failed");
+        return;
+    }
+    
+    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");
+    renameFile(LITTLEFS, "/hello.txt", "/foo.txt");
+    readFile(LITTLEFS, "/foo.txt");
+    deleteFile(LITTLEFS, "/foo.txt");
+    testFileIO(LITTLEFS, "/test.txt");
+    deleteFile(LITTLEFS, "/test.txt");
+	
+    Serial.println( "Test complete" );
+}
+
+void loop(){
+
+}