Microcontroladores ESP8266 - Usar SPIFFS en el IDE Arduino

Arduino, STM32 (Maple), ESP8266, etc
Responder
Avatar de Usuario
Naguissa
Administrador del Sitio
Mensajes: 238
Registrado: 04 Jul 2016, 11:17
Contactar:

Microcontroladores ESP8266 - Usar SPIFFS en el IDE Arduino

Mensaje por Naguissa » 25 Feb 2017, 16:13

ESP8266FS es una herramienta que se integra en el IDE Arduino y añade una opción en el menú Herramientas para poder subir los archivos de la carpeta "data" de nuestro proyecto al sistema de ficheros SPIFFFS (SPI Flash File System) del ESP8266.


Pasos para instalar el soporte SPIFFS para ESP8266 en el IDE Arduino:
  1. Descarga el ZIP con la herramienta desde: https://github.com/esp8266/arduino-esp8 ... ses/latest
    ESP8266 SPIFFS - Descargar.png
    ESP8266 SPIFFS - Descargar la herramienta
  2. Descomprime el archivo descargado
  3. Crea la carpeta "tools" dentro de la carpeta Arduino de tu usuario si no existe:
    • Linux/Mac: ~/Arduino
    • Windows: Mi PC -> Documentos -> Arduino
  4. Mueve la carpeta ESP8266FS descomprimida del ZIP a la careta tools del punto anterior; debe quedar como:
    • Linux / Mac: ~/Arduino/tools/ESP8266FS
    • Windows, Mi PC -> Documentos -> Arduino -> tools -> ESP8266FS
  5. Reinicia el IDE Arduino

Cómo usar SPIFFS para ESP8266 en el IDE Arduino:

Sencillamente se ha de crear una carpeta llamada "data" en la carpeta del Sketch y pulsar el menú "Herramientas" --> "ESP8266 Sketch Data Upload". En la barra de estado veremos el progreso de la operación.
ESP8266 SPIFFS - Subir datos.png
ESP8266 SPIFFS - Subir datos desde Arduino IDE
Advertencia: ¡Esta operación borra todo el contenido y sube lo que haya en la carpeta data, no conserva los archivos!


Más información y funcionalidad:

Se usa parecido a una SD. Para mas información mira su página: https://github.com/esp8266/Arduino/blob ... esystem.md

Tags:

Avatar de Usuario
Naguissa
Administrador del Sitio
Mensajes: 238
Registrado: 04 Jul 2016, 11:17
Contactar:

Microcontroladores ESP8266 - Usar SPIFFS en el IDE Arduino - Uso

Mensaje por Naguissa » 27 Feb 2017, 11:42

Cómo usar SPIFFS en tu programa Arduino para ESP8266:

Como paso inicial, tenemos que incluir la librería "FS.h". Ésta librería no se puede usar junto a la librería de SD ya que colisiona con ella:

Código: Seleccionar todo

#include "FS.h"
Hemos de tener en cuenta las siguientes limitaciones del sistema de archivos:
  • La longitud máxima de la ruta de archivos es 31 carácteres (32 menos el terminador de string).
  • No tenemos directorios. A cambio, podemos usar "/" dentro del nombre de archivo ("/ejemplos/ejemplo1.txt" sería un nombre completo, no un archivo dentro de la carpeta "ejemplos")

Funciones:


* Para empezar a usar el SPIFFS deberemos usar:

Código: Seleccionar todo

SPIFFS.begin();
Retorna true si funciona correctamente

* Asimismo, si queremos dejar de usarlo utilizaremos:

Código: Seleccionar todo

SPIFFS.end();
* Si, por ejemplo, queremos usarlo para guardar datos del programa pero no hemos subido nada desde el ordenador, podemos formatear la unidad:

Código: Seleccionar todo

SPIFFS.format();
Puede ser llamado antes o después del begin(). Devuelve true si el formato se ha realizado con éxito.

* Para comprobar si existe un archivo usaremos:

Código: Seleccionar todo

SPIFFS.exists(path);
Devolverá true si el archivo existe. Recuerda que el path es el nombre completo, no un archivo dentro de una carpeta.

* Existe un filtrado, que se usa como algo similar a carpetas:

Código: Seleccionar todo

SPIFFS.openDir(path);
Pero, ¿no hemos dicho que no existen carpetas? Sí, lo que hace este comando es listar los archivos que comienzan por esa ruta.

Devuelve un objeto tipo "Dir", que puedes usar así:

Código: Seleccionar todo

Dir dir = SPIFFS.openDir("/data");
while (dir.next()) {
    Serial.print(dir.fileName()); // Nombre del archivo
    File f = dir.openFile("r"); // Abrir archivo
    Serial.println(f.size()); // Tamaño; lo veremos mas tarde.
}

* Para abrir un fichero usaremos:

Código: Seleccionar todo

File file = SPIFFS.open(path, mode);
Mode es:
  • r = Sólo lectura. El cursor se posiciona al principio del archivo
  • r+ = Lectura y escritura. El cursor se posiciona al principio del archivo
  • w = Escritura. Si el archivo existe lo trunca a 0 bytes. El cursor se posiciona al principio del archivo, aunque siendo 0 bytes es la única opción.
  • w+ = Lectura y escritura. Trunca el archivo a 0 bytes si existe o lo crea si no existe. El cursor se posiciona al principio del archivo, aunque siendo 0 bytes es la única opción.
  • a = Escritura al final, 'append'. Abre un archivo sin truncarlo o lo crea si no existe. El cursor se posiciona al final del archivo.
  • a+ = Escritura al final, 'append'. Abre un archivo sin truncarlo o lo crea si no existe. El cursor se posiciona al principio del archivo pero cualquier escritura se hará al final.

* Para eliminar un fichero usaremos:

Código: Seleccionar todo

SPIFFS.remove(path);
Devuelve true si ha sido correctamente eliminado.


* Para cambiar el nombre de un fichero usaremos:

Código: Seleccionar todo

SPIFFS.rename(pathFrom, pathTo);
Devuelve true si ha sido correctamente cambiado de nombre.


* Para obtener información del sistema de archivos::

Código: Seleccionar todo

FSInfo fs_info;
SPIFFS.info(fs_info);
La estructura FSInfo es:

Código: Seleccionar todo

struct FSInfo {
    size_t totalBytes; // Tamaño total usable en el sistema de archivos en bytes
    size_t usedBytes; // Bytes usados en el sistema de archivos
    size_t blockSize; // Tamaño del bloque, en bytes
    size_t pageSize; // Tamaño de la página, en butes
    size_t maxOpenFiles; // Numero máximo de archivos abiertos simultáneamente.
    size_t maxPathLength; // Tamaño máximo del path, incluyendo el '\0' final. Normalmente debería ser 32.
};



Operaciones del objeto archivo:

Tras abrir un archivo con cualquiera de éstas operaciones:

Código: Seleccionar todo

File file = SPIFFS.open(path, mode); // Abrir un archivo directamente
File file2 = dir.openFile(mode); // En el bucle tras usar SPIFFS.openDir(path);
Obtenemos un objeto tipo File con el que podemos usar las funciones de la clase Stream como readBytes, findUntil, parseInt, println y similares.

Además, tenemos disponibles las siguientes funciones:

* File.seek

Código: Seleccionar todo

bool result = file.seek(offset, mode);
Se comporta como la función fseek de C.

Los valores de mode son:
  • SeekSet - Se mueve el cursor 'offset' bytes desde el inicio del archivo.
  • SeekCur - Se mueve el cursor 'offset' bytes desde la posición actual del mismo.
  • SeekEnd - - Se mueve el cursor 'offset' bytes desde el final del archivo. Se usa con offsets negativos.
Devuelve true en caso de realizarse correctamente.

* File.position

Código: Seleccionar todo

int pos = file.position();
Devuelve la posición actual del cursor en bytes.


* File.size

Código: Seleccionar todo

int size = file.size();
Devuelve el tamaño del archivo en bytes.


* File.name

Código: Seleccionar todo

String name = file.name();
Devuelve el nombre del archivo como un const char*.


* File.close

Código: Seleccionar todo

file.close();
Cierra un archivo. No se podrán realizar operaciones en la variable "file" a no ser que abramos otro archivo (que podría ser el mismo, si lo deseamos).

Ejemplo:

Podéis ver un ejemplo aquí: https://github.com/squix78/esp8266-proj ... xample.ino

Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado