Como gerenciar dados no ESP32 para projetos IoT

Cómo gestionar datos en ESP32 para proyectos de IoT

ESP32 es un potente controlador de 32 bits que funciona a velocidades de 160 ~ 240 MHz. Diseñado para IoT, el controlador cuenta con Wi-Fi en chip (40 MHz), Bluetooth 4.0, Bluetooth Low Energy, CAN y una interfaz Ethernet. Con 34 GPIO, 18 pines analógicos, 16 canales de software PWM, 4 puertos SPI, 2 puertos I2C, 2 puertos I2S y 2 puertos UART, el ESP32 ofrece infinitas posibilidades para el diseño integrado. Al ser un chip tan capaz, el ESP32 se puede implementar para alimentar una variedad de nodos de red de IoT.

Los diferentes dispositivos de IoT tienen diferentes requisitos de hardware. Gestionar datos directamente en el corazón de una "cosa" es un aspecto crucial del hardware integrado. Una vez que seleccione ESP32 para su proyecto de IoT, no necesita preocuparse por los recursos informáticos. ESP32 es más que suficiente para ejecutar una aplicación integrada en red. La memoria y la RAM son áreas donde los microcontroladores a menudo tienen sus límites naturales, pero la RAM del ESP32 (512 KB) es suficiente para cualquier tarea integrada o de IoT. El ESP32 también tiene de 4 a 16 MB flash, de los cuales 512 bytes se usan para almacenar datos mientras que el resto se usa para almacenar código de usuario.

Sin embargo, los 512 bytes (ROM) disponibles para datos puede ser insuficiente para muchos proyectos de IoT, especialmente aquellos que implican el uso de archivos de audio o vídeo o que requieren un registro de datos integrado más prolongado. Para tales proyectos, necesitamos explorar otros medios de almacenamiento que puedan conectarse con ESP32 para ampliar la memoria. Afortunadamente, ESP32 se puede cargar con diferentes sistemas de archivos que eliminan la restricción de utilizar sólo archivos planos. En este artículo, exploraremos diferentes dispositivos de almacenamiento que pueden interactuar con el ESP32 e investigaremos diferentes sistemas de archivos posibles en el ESP32 para permitir el almacenamiento y la administración de datos adecuados.

Memoria flash ESP32
ESP32 viene con memoria flash integrada o en chip de 4 MB, 8 MB o 16 MB. La mayor parte de este espacio de memoria está reservado para almacenar el gestor de arranque, el controlador de radio y el código de la aplicación. Como se señaló anteriormente, sólo hay 512 bytes de memoria flash disponibles para almacenar datos del usuario. La memoria flash se divide en tres ranuras para configuración no OTA: biblioteca NVS, PHY_init y fábrica. La partición de la biblioteca NVS es el único espacio donde se pueden guardar los parámetros de la aplicación del usuario. La partición de fábrica almacena el gestor de arranque, mientras que la partición PHY almacena el controlador de radio para Bluetooth y Wi-Fi, responsable de implementar la capa de red física. Con la configuración OTA (Actualizaciones inalámbricas), hay tres particiones adicionales de las cuales una “OTAdata” se usa para almacenar la aplicación OTA y dos particiones se usan para almacenar actualizaciones OTA.

La memoria flash en ESP32 solo puede almacenar datos de usuario escalares iniciados a través de variables o estructuras de datos en el código. Estos valores escalares se almacenan en la partición de la biblioteca NVS como parámetros de la aplicación. La memoria flash tiene un tamaño de unos pocos MB, lo que sólo es suficiente para aplicaciones sensibles al costo que ocupan poco espacio en la memoria. Algunas partes de la memoria flash se pueden particionar para almacenar datos del usuario, como texto, imágenes y otros archivos, solo después de montar un sistema de archivos (SPIFFS o FAT) en ellas. De lo contrario, la memoria flash sólo puede almacenar código binario generado por el usuario y parámetros de la aplicación. El flash SPI en el ESP32 puede usar el modo de operación de 2 o 4 líneas. La velocidad de datos se puede configurar en 40 MHz u 80 MHz.

Ampliación de memoria con tarjetas SD
Aunque la memoria flash se puede montar y particionar para almacenar datos como imágenes y otros archivos, a menudo resulta insuficiente para almacenar un volumen adecuado de datos. Por ejemplo, los archivos de audio y vídeo pueden tener un tamaño de varios megabytes. Estos tipos de archivos nunca se pueden almacenar en flash; la mejor alternativa es utilizar tarjetas SD.

Las tarjetas SD de 4 GB a 32 GB tienden a funcionar bien con ESP32, donde el tamaño máximo de un archivo puede ser de hasta 4 GB. Hay mucho espacio para almacenar archivos de audio, vídeo y bases de datos. El ESP32 puede transmitir audio/vídeo, capturar imágenes y mantener grandes registros de datos conectando una tarjeta SD de tamaño suficiente. Hay dos interfaces en el ESP32 para acceder a tarjetas SD: SDIO y SPI. Si se utiliza la interfaz SDIO para conectar un lector de tarjetas SD con ESP32, ocupa seis GPIO fijos en la placa. La interfaz SPI se puede multiplexar con cualquier GPIO y requiere tres o cuatro pines. Es posible conectar más de una tarjeta SD al ESP32 configurando pines adicionales como selección de chip. La interfaz SDIO tiene una frecuencia predeterminada de 20 MHz que se puede configurar a 40 MHz para los modos de línea 1/4/8. La frecuencia de la interfaz SPI es configurable mediante código de usuario. En ESP32-S2, solo la interfaz SPI está disponible para conectar tarjetas SD. La tarjeta SD debe tener un sistema de archivos FAT para funcionar con ESP32.

Ampliación de memoria con tarjetas eMMC
Las tarjetas eMMC son similares a las tarjetas SD y utilizan el mismo controlador que las tarjetas SD. Es importante tener en cuenta que las tarjetas de memoria eMMC no son compatibles con el ESP32-S2. Con otros modelos ESP32, las tarjetas eMMC se pueden interconectar para almacenar archivos de audio, video y bases de datos. Estas tarjetas de memoria se pueden conectar al ESP32 utilizando únicamente la interfaz SDIO. La velocidad de datos predeterminada es 20 MHz, que se puede configurar en 40 MHz con el modo de 8 líneas y el modo DDR de 4 líneas. Las tarjetas eMMC suelen estar interconectadas con chips ESP32 en dispositivos portátiles como relojes inteligentes. En dichas aplicaciones, la tarjeta eMMC almacena aplicaciones del sistema que contienen gráficos y/o archivos de bases de datos.

Ampliación de memoria con EEPROM
En aplicaciones de bajo consumo como IIoT, no es necesario almacenar archivos de imagen, audio o vídeo. El controlador necesita algo de espacio adicional para almacenar parámetros de configuración, mantener registros o restaurar datos antes de la retransmisión. En estas aplicaciones, las tarjetas SD o eMMC pueden resultar excesivas, agotando la batería y multiplicando innecesariamente el coste del dispositivo. Para estas situaciones, se puede agregar espacio adicional de 1 MB o 16 MB al dispositivo a través de la interfaz EEPROM con ESP32. El ESP32 admite chips EEPROM AT24C01/02 de Atmel y se puede conectar al ESP32 a través de una interfaz I2C. ESP32 también puede leer/escribir EEPROM a una velocidad de datos de 100 a ~400 KHz y acceder a datos mediante direccionamiento directo.

Sistema de archivos compatible con ESP32
Una configuración típica de ESP32 es simple, hasta que tienes que lidiar con archivos planos. Sin embargo, cuando es necesario almacenar audio, video, base de datos u otros archivos complejos en la placa ESP32, surgen complicaciones. Los microcontroladores están diseñados para almacenar datos simples y rara vez necesitan operar con tipos de archivos complejos. Afortunadamente, el ESP32 se puede cargar con diferentes sistemas de archivos para almacenar y manejar tipos de archivos complejos. Los siguientes sistemas de archivos son compatibles con ESP32.

  1. Biblioteca NVS
  2. BROCHETAS
  3. GORDO
  4. sistema de archivos virtuales

Sistema de archivos de biblioteca NVS
Una de las particiones predeterminadas en la memoria flash ESP32 es la biblioteca NVS. La partición se puede utilizar para almacenar parámetros de la aplicación. Los datos de la aplicación almacenados en NVS no se pierden cuando el ESP32 se apaga, se reinicia o se produce un corte de energía. La partición debe activarse utilizando la biblioteca NVS en el código de usuario, que luego monta el sistema de archivos de la biblioteca NVS en la partición respectiva. El sistema de archivos le permite almacenar pares clave-valor donde las claves pueden ser cadenas ASCII y los valores pueden ser números enteros, cadenas u objetos binarios grandes (BLOB), como matrices de caracteres. La partición NVS aún no es adecuada para almacenar cadenas grandes. Dependiendo de la tabla de particiones predeterminada o personalizada aplicada, el tamaño de la partición está limitado a KB o MB.

Sistema de archivos SPIFFS
El sistema de archivos Flash de interfaz periférica serie (SPIFFS) es el sistema de archivos predeterminado compatible con ESP32. SPIFFS es un sistema de archivos de microcontrolador liviano con flash SPI NOR de menos de 128 MB. El sistema de archivos requiere menos RAM en comparación con el sistema de archivos FAT. Admite nivelación de desgaste, coherencia de datos y compatibilidad con POSIX. El sistema de archivos se puede montar en ESP32 o unificarse en un sistema de archivos virtual en ESP32. El sistema de archivos SPIFFS es adecuado para particionar la memoria flash para almacenar imágenes, audio, vídeo y otros archivos.

sistema de archivos FAT
El sistema de archivos SPIFFS no viene con soporte de directorio porque no es independiente de la plataforma. Una estructura de directorio organizada suele ser necesaria en muchas situaciones, como cuando el ESP32 aloja un pequeño servidor web con algunos archivos HTML, CSS e imágenes. La otra situación podría ser cuando dispositivos de memoria externa, como tarjetas SD o tarjetas eMMC, interactúan con el ESP32 y tienen archivos almacenados no directamente en la raíz sino en directorios. En estos casos, el ESP32 se puede montar con el sistema de archivos FAT-Fs. Los FAT-F actúan como una capa independiente de la plataforma y proporcionan una interfaz unificada para acceder a todos los dispositivos de memoria disponibles, como chips flash externos, tarjetas SD y eMMC.

El sistema de archivos admite una estructura de directorios y permite el cifrado de datos. FAT-Fs admite dispositivos de memoria de gigabytes, mientras que SPIFFS sólo es adecuado para memorias flash de hasta 128 MB. La nivelación del desgaste es opcional en los FAT-F. El sistema de archivos FAT-Fs en el ESP32 debe usarse para almacenar audio, video, imágenes y otros tipos de archivos cuando los archivos deben almacenarse en dispositivos de memoria externos de gran capacidad o requieren una estructura de directorios para el almacenamiento.

sistema de archivos virtuales
El ESP32 también se puede cargar con el sistema de archivos virtual. Unifica el sistema de archivos SPIFFS y FAT-Fs en ESP32 y proporciona una interfaz similar a un archivo para controladores externos. El sistema de archivos virtual es útil cuando se requieren sistemas de archivos SPIFFS y FAT en ESP32 por ciertas razones.

Conclusión
Administrar los datos de los usuarios y de la red puede ser un desafío con los microcontroladores. ESP32 no es una excepción. ESP32 es una potente plataforma de desarrollo de Wi-Fi para crear aplicaciones de IoT de todos los tamaños. Afortunadamente, la memoria del ESP32 se puede ampliar con flash externo/EEPROM, tarjetas SD y eMMC. Los chips flash externos o EEPROM son adecuados cuando se necesita un pequeño aumento en la capacidad de almacenamiento. Si su aplicación requiere el almacenamiento de archivos grandes, como archivos de audio, video o bases de datos, debe usar tarjetas SD o eMMC.

Con la selección adecuada de almacenamiento integrado o en el dispositivo, el siguiente paso importante en la gestión de datos en el ESP32 es seleccionar un sistema de archivos adecuado. Si una aplicación solo requiere el almacenamiento de parámetros clave-valor importantes que no deben perderse durante el apagado o un corte de energía, el sistema de archivos de la biblioteca NVS es suficiente. Por ejemplo, los parámetros de nivel de IP para conectar el ESP32 a una red existente se pueden almacenar en la partición NVS como pares clave-valor en el sistema de archivos de la biblioteca NVS. Si la aplicación requiere almacenar registros de audio, registros de video o datos de tamaño pequeño, SPIFFS es más adecuado porque no consumirá RAM. Para aplicaciones que requieren almacenar archivos grandes, organizar archivos en una estructura de directorios o cifrar datos, el sistema de archivos FAT del ESP32 es la opción. En algunas circunstancias excepcionales, es posible que se requieran tanto el sistema de archivos SPIFFS como el FAT en ESP32, después de lo cual ESP32 se puede cargar con el sistema de archivos virtual para extraer los beneficios de las características del sistema de archivos FAT y SPIFFS. Aunque el ESP32 admite el almacenamiento de archivos de audio y video, la velocidad de datos máxima de 40 MHz aún puede ser una restricción.

Volver al blog

Deja un comentario

Los comentarios deben ser aprobados antes de su publicación.