SPI Flash File System é o sistema de arquivos do ESP32. É possível acessar a memória flash para ler, gravar, renomear e excluir arquivos.
Um sistema de monitoramento gerando arquivos de log em txt, o html de uma página, ou um arquivo com parâmetros de configurações são bons exemplos para uso.
No ambiente Arduino, a biblioteca SPIFFS já está incluída no pacote do ESP32.
Para realizar o upload de um arquivo já escrito para a memória, é necessário baixar o plugin ESP32 Sketch Data Upload.
O arquivo deverá ser salvo dentro do diretório "tools" da Arduino IDE.
No diretório do seu programa, crie uma pasta chamada "data" e, dentro dela, salve os arquivos que serão enviados para a memória do ESP32.
Após reiniciar a IDE, no menu Ferramentas estará disponível a opção para realizar o upload dos arquivos para a memória.Para listar os arquivos salvos, ler os conteúdos, criar novos arquivos, deixo os exemplos no código fonte.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | /*--------------------------------------------------------- Programa : SPIFFS - SPI Flash File System Autor : Fellipe Couto [ http://www.efeitonerd.com.br ] Data : 02/06/2021 ---------------------------------------------------------*/ #include <FS.h> //File System [ https://github.com/espressif/arduino-esp32/tree/master/libraries/FS ] #include <SPIFFS.h> //SPI Flash File System [ https://github.com/espressif/arduino-esp32/tree/master/libraries/SPIFFS ] void setup() { int t = 5000; Serial.begin(115200); delay(1000); Serial.println("SPIFFS - SPI Flash File System"); Serial.println("www.efeitonerd.com.br"); delay(t); Serial.println("\nEscreve novo arquivo"); writeFile("Linha1", "/Arquivo01.txt", false); delay(t); Serial.println("\nEscreve no arquivo criado, adicionando nova linha"); writeFile("Linha2", "/Arquivo01.txt", true); delay(t); Serial.println("\nEscreve novo arquivo em sub diretório"); writeFile("Linha1-AA", "/Subdir/ArquivoAA.txt", false); delay(t); Serial.println("\nLista todos os arquivos"); listFiles("/"); delay(t); Serial.println("\nLista todos os arquivos do sub diretorio"); listFiles("/Subdir"); delay(t); Serial.println("\nVisualiza o conteudo do ArquivoAA.txt do sub diretório"); readFile("/Subdir/ArquivoAA.txt"); delay(t); Serial.println("\nRenomeia o Arquivo01.txt para Arq001.txt"); renameFile("/Arquivo01.txt", "/Arq001.txt"); delay(t); Serial.println("\nApaga o arquivo Arq001.txt"); deleteFile("/Arq001.txt"); delay(t); Serial.println("\nLista todos os arquivos novamente"); listFiles("/"); delay(t); Serial.println("\nwww.efeitonerd.com.br"); } void loop() { } /*--- ESCREVE O ARQUIVO ---*/ bool writeFile(String values, String pathFile, bool appending) { char *mode = "w"; //open for writing (creates file if it doesn't exist). Deletes content and overwrites the file. if (appending) mode = "a"; //open for appending (creates file if it doesn't exist) Serial.println("- Writing file: " + pathFile); Serial.println("- Values: " + values); SPIFFS.begin(true); File wFile = SPIFFS.open(pathFile, mode); if (!wFile) { Serial.println("- Failed to write file."); return false; } else { wFile.println(values); Serial.println("- Written!"); } wFile.close(); return true; } /*--- LEITURA DO ARQUIVO ---*/ String readFile(String pathFile) { Serial.println("- Reading file: " + pathFile); SPIFFS.begin(true); File rFile = SPIFFS.open(pathFile, "r"); String values; if (!rFile) { Serial.println("- Failed to open file."); } else { while (rFile.available()) { values += rFile.readString(); } Serial.println("- File values: " + values); } rFile.close(); return values; } /*--- APAGA O ARQUIVO ---*/ bool deleteFile(String pathFile) { Serial.println("- Deleting file: " + pathFile); SPIFFS.begin(true); if (!SPIFFS.remove(pathFile)) { Serial.println("- Delete failed."); return false; } else { Serial.println("- File deleted!"); return true; } } /*--- RENOMEIA O ARQUIVO ---*/ void renameFile(String pathFileFrom, String pathFileTo) { Serial.println("- Renaming file " + pathFileFrom + " to " + pathFileTo); SPIFFS.begin(true); if (!SPIFFS.rename(pathFileFrom, pathFileTo)) { Serial.println("- Rename failed."); } else { Serial.println("- File renamed!"); } } /*--- FORMATA O FILE SYSTEM ---*/ bool formatFS() { Serial.println("- Formatting file system..."); SPIFFS.begin(true); if (!SPIFFS.format()) { Serial.println("- Format failed."); return false; } else { Serial.println("- Formatted!"); return true; } } /*--- LISTA OS ARQUIVOS DOS DIRETÓRIOS ---*/ void listFiles(String path) { Serial.println("- Listing files: " + path); SPIFFS.begin(true); File root = SPIFFS.open(path); if (!root) { Serial.println("- Failed to open directory"); return; } if (!root.isDirectory()) { Serial.println("- Not a directory: " + path); return; } File file = root.openNextFile(); while (file) { if (file.isDirectory()) { Serial.print("- Dir: "); Serial.println(file.name()); } else { Serial.print("- File: "); Serial.print(file.name()); Serial.print("\tSize: "); Serial.println(file.size()); } file = root.openNextFile(); } } |
Realmente muito bom! me ajudou muito!
ResponderExcluirComo eu faria um upload GET/POST, eu fiz um form simples, tipo um webserver pedreiro para GET/POST direto para o SPIFFs ...
ResponderExcluirclient.println(" p> Upload de Arquivos: /p>");
client.println(" form method='POST' enctype='multipart/form-data'>");
client.println(" input type='file' name='name'>");
client.println(" input class='button' type='submit' value='Upload'> /form>");
Eu nao sei como fazer a ponte entre isso acima e o writefile... conhece algum exemplo? Só acho para o ESP8266 que reclama que server nao tem o metodo upload
Seria enviar um arquivo para o SPIFFS via página web? Não sei como seria. Preciso estudar sobre. É interessante! Anotado aqui para eu verificar sobre isso também.
ExcluirEstou iniciando como ESP32. Gostei muito do seu post. Valeu!!!
ResponderExcluir#TMJ 😀😎
ExcluirOnde acho esta biblioteca para o 8266, no link não consegu baixar
ResponderExcluirBoa tarde! Os links do github estão na postagem.
ExcluirVou deixa-los aqui no comentário também:
https://github.com/espressif/arduino-esp32/tree/master/libraries/SPIFFS
https://github.com/me-no-dev/arduino-esp32fs-plugin/releases/