Hola a todos y bienvenidos al artículo de hoy.
El módulo es muy popular.En el pasado hemos demostrado lo fácil que es conectarse a WLAN, mostrar el sitio web y abrir relés.
Sin embargo, una función muy útil es el almacenamiento de datos en la memoria flash del ESP.Esto nos permite subir los archivos, podemos visitar más tarde con nuestros bocetos.O guardar la información que siga estando disponible después de la reapertura.
Cargar el archivo en el ESP
Necesitamos la herramienta "esp8266 FS", una extensión integrada en Ardino IDE.Añade la entrada "los datos del boceto esp8266" al menú "herramientas".
En primer lugar, descargamos la herramienta de la página esp8266 github:
https://github.com/esp8266/arduino-esp8266fs-plugin/releases/download/0.1.3/ESP8266FS-0.1.3.zip
Ahora estamos creando una carpeta denominada "herramientas", que se encuentra en la misma carpeta que nuestro proyecto de mapa de Ardino.Por lo general, está bajo "C: usuario", "nombre de usuario & gt", "documentos" - Ardino ".
El archivo zip descargado por compresión y copiado.Espp8266 FS del catálogo de "herramientas".Por último, tenemos "C: usuario & lt; nombre de usuario & gt; / documents / / dudino / tools / ESP 8266 fs.jar".
Ahora vamos a reiniciar arduino IDE y hacer un nuevo boceto.En este caso, me llamo "test de datos esp".Ahora debemos conservar el boceto.
Ahora, navegamos a la carpeta recientemente creada "C: Users & lt; usename & gt; - documents - Ardino - ESP data - Test" y colocamos en ella la carpeta "Data".Una vez cargados, todos los archivos almacenados aquí se cargarán en la memoria flash del ESP.
Inserté un nuevo archivo de texto llamado test.txt, en el que se insertaban varias líneas de texto y se guardaban en la nueva carpeta "Data".
Yo uso uno. Esp8266 - 01s con adaptador USBPor consiguiente, he preparado las siguientes opciones bajo el epígrafe "herramientas":
- Placa de circuito: "módulo universal esp8266"
- Dimensiones de destello: "1 m (pico de 64k)
- Velocidad de carga: "11500"
- Puerto: "comx" Seleccione su puerto com
Si no sabe el tamaño del módulo, al final del artículo habrá una pista sobre cómo determinarlo.
A modo de prueba, ahora tratamos de introducir en el ESP los borradores vacíos (void settup () y void Loop ()).Para mi ESP, necesito asegurarme de que el modo de programación está activado.
Si todo esto funciona, podemos intentar cargar el contenido de la carpeta "Data" en el ESP.Para ello, nos dirigimos a "herramientas" - gt; "datos del boceto ESP 8266".
"Spiffs está cargando imágenes..."Apareció poco después: "spiffs Images subiendo":
¡Si se produce un error en este momento (error en la carga del spiffs!Tal vez porque el ESP ya no está programado.Simplemente desconecta y reconecta la conexión USB para asegurarse de que el modo de programación está activado.
Uso del spiffs en el boceto
Para utilizar el spifs en el boceto, se incluye el coofs.h.
35; incluye "fs.h"
Ahora podemos utilizar las siguientes órdenes:
Objeto del sistema de archivo
Spifs.start ()
Sistema de archivo de documentosTodas las demás órdenes deben ejecutarse antes.Si el montaje tiene éxito, devuelve la "verdad" o "False".
Spifs.format ()
Formatear (eliminar) archivoSi el formato funciona, vuelve a la verdad.
Spiffs.open (ruta, modo)
Abrir archivoComo "ruta", designan un nombre de archivo que contiene una ruta absoluta (por ejemplo "/ folder" nombre / test.txt ").El modo indica el tipo de acceso.Puede contener las siguientes opciones:"R", "W", "a", "R +", "W +" y "a +".
- "R" abre el archivo para leer.
- W crea un nuevo archivo sin contenido.Si existe un archivo con el mismo nombre, se elimina su contenido y se considera que el archivo es nuevo y vacío.
- "A" depende del documento ("append").Los datos se añadirán al final del documento.Si el archivo no existe, se creará un nuevo archivo
- "R +" abre un archivo para leer y escribir.Los archivos deben existir.
- "W +" crea un archivo vacío para leer y escribir.
- "A +" abre un archivo para leer y adjuntar.
Si.F) ii)
Serial. Println ("fallo en la apertura de los documentos");
}
Spifs.exists (Pathways)
Si la ruta existe, vuelve a la verdad o vuelve a false.
Spifs.openpdir (Pathways)
Abra el directorio especificado.Vuelve al objeto "tú".
Spiffs.remove (ruta)
Eliminar la ruta especificada.Si la supresión tiene éxito, vuelve a la verdad.
Cambio de nombre (pathform, pathto)
El documento pasó de ser "pathform" a ser "pathto".El camino debe ser absoluto.Si el cambio de nombre tiene éxito, vuelve a la verdad.
Sistema de archivos
FS Info - FS Information;
Spiffs. Information (FS)
Rellene la estructura de fsinfo con información sobre el sistema de archivo de documentos.Volver a "verdad" significa tener éxito o volver a "False".
Estructura:
Cadena fsinfo
Total de bytes;
Usar tamaño de Byte
Tamaño de bloque
Tamaño de página
Tamaño / T maxopenfiles;
Tamaño / t longitud máxima de la ruta;
};
Objeto del catálogo (dir)
Los objetos "Dir" nos permiten acceder a los archivos del catálogo utilizando los métodos "Next", "filename ()" y "openfile (Mode)".
Dir dir = spifs.openpir ("/ data);
While (dir. Next ())
Impresión en serie (dir.filename ();
Documento f = dir.openfile ("R");
Serial. Println (f.size ();
}
En la medida en que los documentos se encuentran en el catálogo, dir.Debe llamarse antes de "filename" o "openfile".
"Openfile" acepta el parámetro "Mode", que es idéntico al del spifs.open.
Objeto del documento (archivo)
Spifs.open y dir.open file regresan a un objeto "file".Es un objeto corriente que apoya todas las funciones, como "readbytes", "finuntil", "parseint", "println" y todos los demás métodos de flujo.
También hay algunos objetos específicos del archivo.
File.seek (desviación, modo)
La posición actual se basa en el valor de "Mode" como sigue:
- Seekset & gt; la ubicación está configurada para desviar la sección desde el principio
- Ver cur - - gt; posición actual en la Sección de transferencia
- Seekend - - gt; se extrajo la ubicación para desviar la Sección de
Ubicación del archivo
Volver a la posición actual del archivo en bytes
Tamaño del archivo
Devuelve el tamaño del archivo en bytes
File.name ();
Devuelve el nombre del documento A "Const char *".Se puede guardar en la cadena usando "String name = file.name ()".
Archivo cerrado ()
Cierra el archivo.
Práctico adj.
Ahora estamos escribiendo un pequeño boceto para probar todo el proceso: Queremos exportar el archivo de texto "test.txt", que creamos al principio y llenamos varias líneas de texto en el monitor serial.
35; incluye Grados Fahrenheit. Aquí tenemos la Biblioteca que necesitamos. Vacío. Configuración() { Transporte.Iniciar(9600); Activar salida en serie Retraso(1000); Un breve descanso, así que tenemos tiempo para abrir el monitor en serie. Pico.Iniciar(); / / sistema de archivo certificado Documentación Tipo F = Pico.Abrir( "/ test.txt", "R"); Abrir archivo para leer Si (!Tipo F) { Transporte.Imprimir(Fallo al abrir el archivo); } Cadena Fecha = Tipo F.Leer cadena(); Leer el contenido del archivo de texto Transporte.Imprimir("Contenido del archivo abierto:"); De serie.println(datos); // ... y pasé de nuevo f.cerrar(); // Cerramos el archivo } nulo bucle() { }
Después de cargar, la salida aparece en el monitor en serie:
Consejo extra: ¿Qué tan grande es la memoria flash de mi ESP 8266?
Dependiendo del módulo ESP8266 que esté utilizando, el tamaño de la memoria flash puede variar. Puede buscar la hoja de datos usando la etiqueta en el chip, pero para estar seguro, hay un pequeño boceto que verifica el tamaño, la velocidad y el modo de su módulo. Ahí esta el bocetohttps://github.com/esp8266/Arduino/tree/master/libraries/esp8266/examples/CheckFlashConfig
Simplemente cargue este boceto y configure el monitor en serie a 115200 baudios, y se nos mostrará el tamaño del chip.
Espero que hayan disfrutado nuestra publicación de blog hoy y hayan estimulado su creatividad. Ahora puede usar la función SPIFFS de su ESP para, p. Archivando módulos de texto HTML, almacenando datos de sensores permanentemente y mucho más.
Estamos muy contentos con los elogios, las críticas y las sugerencias para nuestro blog.
Tuyo Markus Neumann
14 comentarios
Adele
https://github.com/esp8266/arduino-esp8266fs-plugin/releases/download/0.5.0/ESP8266FS-0.5.0.zip
löst das SPIFFS Error: esptool not found! – Problem
Bernd Albrecht
@ Tom: Bitte der Anleitung folgen, die Max dankenswerterweise am 30. März hier “geposted” hat.
(Ein Bild mit den Einstellungen habe ich per Email gesendet.)
@ all: Einer unserer Blogger wird das Thema, die Fragen und Anregungen erneut aufgreifen.
Zieldatum für Veröffentlichung Mitte Juli 2020
Tom
Hallo Zusammen,
Funktioniert das Flashen von SPIFFS beim “D1 Mini NodeMcu mit ESP8266-12F WLAN Modul für Arduino” nicht.
Ich habe das nun genau nach Anleitung gemacht und bleibe leider bei genau dieser Meldung “SPIFFS Upload failed!” hängen. Den D1 Mini muss man ja nicht extra in den Programmiermodus bringen soweit mir das bekannt ist, oder? Auf jeden Fall finde ich keine Lösung um den Fehler zu beseitigen. Im Anschluss habe ich den gesamten LOG aus dem Arduino IDE kopiert. Vielleicht hat jemand noch eine Idee woran es liegen könnte.
-—————————————————————————————————————————————-
esptool.py v2.8
Serial port COM3
Connecting….
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: ec:fa:bc:59:3f:98
Uploading stub…
Running stub…
Stub running…
Changing baud rate to 460800
Changed.
Configuring flash size…
Auto-detected Flash size: 4MB
Compressed 259824 bytes to 190276…
Writing at 0×00000000... (8 %)
Writing at 0×00004000... (16 %)
Writing at 0×00008000... (25 %)
Writing at 0×0000c000… (33 %)
Writing at 0×00010000... (41 %)
Writing at 0×00014000... (50 %)
Writing at 0×00018000... (58 %)
Writing at 0×0001c000… (66 %)
Writing at 0×00020000... (75 %)
Writing at 0×00024000... (83 %)
Writing at 0×00028000... (91 %)
Writing at 0×0002c000… (100 %)
Wrote 259824 bytes (190276 compressed) at 0×00000000 in 4.3 seconds (effective 482.7 kbit/s)…
Hash of data verified.
Leaving…
Hard resetting via RTS pin…
[SPIFFS] data : C:\Users\Thomas Schmid\Documents\Arduino\D1-Mini-WebserverV4b\data
[SPIFFS] size : 2024
[SPIFFS] page : 256
[SPIFFS] block : 8192
/Test.txt
[SPIFFS] upload : C:\Users\THOMAS~1\AppData\Local\Temp\arduino_build_524988/D1-Mini-WebserverV4b.spiffs.bin
[SPIFFS] address : 0×200000
[SPIFFS] reset : —before default_reset —after hard_reset
[SPIFFS] port : COM3
[SPIFFS] speed : 921600
[SPIFFS] python : python.exe
[SPIFFS] uploader : C:\Users\Thomas Schmid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\tools\upload.py
SPIFFS Upload failed!
Danke im Voraus für Eure Hilfe
Gruß Tom
steve
Hallo,
danke für die sehr guten Anleitungen.
Aber wie könnte man als nächstes die entstandene SPIFFS-Datei “test.txt” per SFTP zu aaaaa.bplaced.net (user: bbbbb; passwort: ccccc) hochladen. Beim Raspi funktionierte es mit curl…. oder ncftp…. .
steve
Max
Wer Probleme mit SPIFFS Error: esptool not found! hat tauscht sein ESP8266FS aus.
ESP8266FS-0.5.0.zip
https://arduino-esp8266.readthedocs.io/en/latest/filesystem.html#uploading-files-to-file-system
Peter
Hallo, sehr schönes Tool, beim Kopieren des Codes zeigten sich aber doch viele Tipp-Fehler. Nach Korrektur der (meisten) Fehler sieht es so aus:
/*
Diese Skizze testet, ob die EEPROM-Einstellungen der IDE mit der Hardware übereinstimmenESP8266 CheckFlashConfig von Markus Sattler
*/
void setup (void)
{
Serial.begin(115200);
}
void loop ()
uint32_t realSize = ESP.getFlashChipRealSize(); uint32_t ideSize = ESP.getFlashChipSize(); FlashMode_t ideMode = ESP.getFlashChipMode(); Serial.printf (“Flash-Real-ID:% 08X \n”, ESP.getFlashChipId ()); Serial.printf (“Flash-Realgröße:% u Bytes \n \n”, realSize); Serial.printf (“Flash-Ide-Größe:% u Bytes \n”, ideSize); Serial.printf (“Flash-Ide-Geschwindigkeit:% u Hz \n”, ESP.getFlashChipSpeed()); Serial.printf (“Flash-Ide-Modus:% s \n”, (ideMode == FM_QIO? “QIO”: ideMode == FM_QOUT? “QOUT”: ideMode == FM_DIO? “DIO”: ideMode == FM_DOUT? "DOUT " : “UNBEKANNT”)); if (ideSize != realSize) { Serial.println (“Flash-Chip-Konfiguration falsch! \ N”); } else { Serial.println (“Flash Chip Konfiguration ok. \ N”); } delay(5000);{
}
O.Wenzel
“Soweit so gut, funktioniert das.
Nur wie kann ich die Datei jetzt wieder Zeilenweise auslesen?
Bzw. wie kann ich den Inhalt der Datei wieder in Variablen einlesen?”
*************************
das würde mich auch brennend interessieren, alle Versuche mit array’s , f.seek(3, fs::SeekEnd); etc. führen zu keinem Ergebnis !
Äd Franzis
Lieben Dank, für die Info.
Mal eine Frage: Kann man nur Text-Dateien speichern (also Type char) oder lassen sich auch Messwerte direkt als Integer ablegen. Char ist halt sehr Daten-hungrig.
Ich konnte leider kein entsprechendes Beispiel finden.
/Äd
Matthias
Hallo,
die Fehlermeldung:“SPIFFS Error: esptool” lässt einen Fehler mit dem Setup vermuten und hat nichts mit dem hier zur Verfügung gestellten Code und der Erklärung der Funktionsweise zu tun (danke dafür).
Gruß Matthias
Detlef
vom September 20, 2019
Hallo,
gibt es denn jetzt eine Lösung für den Fehler
SPIFFS Error: esptool not found!
Ich habe das gleiche Problem aber noch keine Lösung gefunden.
wo ist die Lösung ????
Klaus
Hallo,
gibt es denn jetzt eine Lösung für den Fehler
SPIFFS Error: esptool not found!
Ich habe das gleiche Problem aber noch keine Lösung gefunden.
Danke.
Andreas Engelmann
Hallo Herr Neumann,
Danke für den Beitrag. Das Thema Flash wird bei den meisten Tutorials garnicht behandelt. Auch die Informationen zur Flashgrösse gehen meist unter.
Grade für HTML-Seiten für einen Server auf dem ESP32/8266 ist das prima.
Lieber Torsten, ich habe neulich ein schönes Zitat bei " Microkontroller.net "gelesen:
“Wer schnelle Lösungen sucht sollte nicht programmieren”.
Jedes Proggramm ist eine Herausforderung . Nim sie an und finde die Lösung.
Dann kannst du sagen: “Das habe ich programmiert”.
Viel Spaß beim Basteln.
Andreas
Torsten
Wie üblich funktioniert der ganze Kram nur nach tausenden Suchen….
Ich bekomme immer wieder: SPIFFS Error: esptool not found!
Ist und bleibt schlicht Bastelkram,
Christian
Hallo!
Soweit so gut, funktioniert das.
Nur wie kann ich die Datei jetzt wieder Zeilenweise auslesen?
Bzw. wie kann ich den Inhalt der Datei wieder in Variablen einlesen?
Danke