Como gerenciar dados no ESP32 para projetos IoT

ESP32 é um poderoso controlador de 32 bits que funciona em velocidades de 160 ~ 240 MHz. Projetado para IoT, o controlador possui Wi-Fi on-chip (40 MHz), Bluetooth 4.0, Bluetooth Low Energy, CAN e uma interface Ethernet. Com 34 GPIO, 18 pinos analógicos, 16 canais PWM de software, 4 portas SPI, 2 portas I2C, 2 portas I2S e 2 portas UART, o ESP32 oferece infinitas possibilidades para design embarcado. Sendo um chip tão capaz, o ESP32 pode ser implantado para alimentar uma variedade de nós de rede IoT.

Diferentes dispositivos IoT têm diferentes requisitos de hardware. Gerenciar dados bem no centro de uma “coisa” é um aspecto crucial do hardware embarcado. Depois de selecionar o ESP32 para seu projeto de IoT, você não precisa se preocupar com recursos computacionais. ESP32 é mais que suficiente para executar um aplicativo embarcado em rede. Memória e RAM são as áreas onde os microcontroladores costumam ter seus limites naturais, mas a RAM do ESP32 (512 KB) é suficiente para qualquer tarefa embarcada ou IoT. O ESP32 também possui flash de 4 a 16 MB, dos quais 512 bytes são usados ​​para armazenar dados, enquanto o restante é usado para armazenar código do usuário.

No entanto, os 512 bytes (ROM) disponíveis para dados pode ser insuficiente para muitos projetos de IoT, especialmente aqueles que envolvem o uso de arquivos de áudio ou vídeo ou que exigem registro de dados integrado mais longo. Para tais projetos, precisamos explorar outras mídias de armazenamento que possam ser interligadas com o ESP32 para estender a memória. Felizmente, o ESP32 pode ser carregado com diferentes sistemas de arquivos que removem a restrição de uso apenas de arquivos simples. Neste artigo, exploraremos diferentes dispositivos de armazenamento que podem ter interface com o ESP32 e investigaremos diferentes sistemas de arquivos possíveis no ESP32 para permitir armazenamento e gerenciamento de dados adequados.

Memória flash ESP32
ESP32 vem com memória flash on-chip ou onboard de 4 MB, 8 MB ou 16 MB. A maior parte desse espaço de memória é reservada para armazenar o bootloader, o driver de rádio e o código do aplicativo. Conforme observado anteriormente, apenas 512 bytes de memória flash estão disponíveis para armazenar dados do usuário. A memória flash é particionada em três slots para configuração não OTA: biblioteca NVS, PHY_init e fábrica. A partição da biblioteca NVS é o único espaço onde os parâmetros da aplicação do usuário podem ser salvos. A partição de fábrica armazena o bootloader, enquanto a partição PHY armazena o driver de rádio para Bluetooth e Wi-Fi, responsável pela implementação da camada física de rede. Com a configuração OTA (atualizações Over-The-Air), existem três partições adicionais, das quais uma “OTAdata” é usada para armazenar o aplicativo OTA e duas partições são usadas para armazenar atualizações OTA.

A memória flash no ESP32 só pode armazenar dados escalares do usuário iniciados por meio de variáveis ​​ou estruturas de dados no código. Esses valores escalares são armazenados na partição da biblioteca NVS como parâmetros do aplicativo. A memória flash tem alguns MB de tamanho, o que é suficiente apenas para aplicativos sensíveis ao custo que ocupam pouco espaço na memória. Algumas partes da memória flash podem ser particionadas para armazenar dados do usuário, como texto, imagens e outros arquivos, somente após a montagem de um sistema de arquivos (SPIFFS ou FAT) nela. Caso contrário, a memória flash só pode armazenar código binário gerado pelo usuário e parâmetros de aplicação. O flash SPI no ESP32 pode usar o modo de operação de 2 ou 4 linhas. A taxa de dados pode ser definida em 40 MHz ou 80 MHz.

Estendendo a memória com cartões SD
Embora a memória flash possa ser montada e particionada para armazenar dados como imagens e outros arquivos, muitas vezes é insuficiente para armazenar um volume apropriado de dados. Por exemplo, arquivos de áudio e vídeo podem ter vários megabytes de tamanho. Esses tipos de arquivo nunca podem ser armazenados em flash; a melhor alternativa é usar cartões SD.

Cartões SD de 4 GB a 32 GB tendem a funcionar bem com ESP32, onde o tamanho máximo de um arquivo pode ser de até 4 GB. Há bastante espaço para armazenar arquivos de áudio, vídeo e banco de dados. O ESP32 pode transmitir áudio/vídeo, capturar imagens e manter grandes registros de dados conectando um cartão SD de tamanho suficiente. Existem duas interfaces no ESP32 para acessar cartões SD – SDIO e SPI. Se a interface SDIO for utilizada para conectar um leitor de cartão SD com ESP32, ela ocupa seis GPIOs fixos na placa. A interface SPI pode ser multiplexada com qualquer GPIO e requer três ou quatro pinos. É possível conectar mais de um cartão SD ao ESP32 configurando pinos adicionais como seleção de chip. A interface SDIO possui uma frequência padrão de 20 MHz que pode ser configurada para 40 MHz para modos de linha 1/4/8. A frequência da interface SPI é configurável através do código do usuário. No ESP32-S2, apenas a interface SPI está disponível para interface de cartões SD. O cartão SD deve ter um sistema de arquivos FAT para funcionar com ESP32.

Estendendo a memória com cartões eMMC
Os cartões eMMC são semelhantes aos cartões SD e usam o mesmo driver dos cartões SD. É importante observar que os cartões de memória eMMC não são suportados no ESP32-S2. Com outros modelos de ESP32, os cartões eMMC podem ter interface para armazenar arquivos de áudio, vídeo e banco de dados. Esses cartões de memória podem ser conectados ao ESP32 apenas usando a interface SDIO. A taxa de dados padrão é de 20 MHz, que pode ser definida para 40 MHz com modo de 8 linhas e modo DDR de 4 linhas. Os cartões eMMC costumam ter interface com chips ESP32 em wearables como smartwatches. Em tais aplicações, o cartão eMMC armazena aplicações de sistema contendo gráficos e/ou arquivos de banco de dados.

Estendendo memória com EEPROM
Em aplicações de baixo consumo de energia, como IIoT, arquivos de imagens, áudio ou vídeo não precisam ser armazenados. O controlador precisa de algum espaço extra para armazenar parâmetros de configuração, manter logs ou restaurar dados antes da retransmissão. Nessas aplicações, os cartões SD ou eMMC podem ser um exagero, esgotando a bateria e multiplicando desnecessariamente o custo do dispositivo. Para essas situações, espaço extra de 1 MB ou 16 MB pode ser adicionado ao dispositivo através da interface EEPROM com ESP32. O ESP32 suporta chips EEPROM AT24C01/02 da Atmel e pode ser conectado ao ESP32 por meio de uma interface I2C. ESP32 também pode ler/gravar EEPROM a uma taxa de dados de 100 a ~400KHz e acessar dados por meio de endereçamento direto.

Sistema de arquivos suportado no ESP32
Uma configuração típica do ESP32 é simples – até que você tenha que lidar com arquivos simples. Porém, quando é necessário armazenar áudio, vídeo, banco de dados ou outros arquivos complexos na placa ESP32, surgem complicações. Os microcontroladores são projetados para armazenar dados simples e raramente precisam operar em tipos de arquivos complexos. Felizmente, o ESP32 pode ser carregado com diferentes sistemas de arquivos para armazenar e lidar com tipos de arquivos complexos. Os seguintes sistemas de arquivos são suportados no ESP32.

  1. Biblioteca NVS
  2. ESPETOS
  3. GORDO
  4. Sistema de arquivos virtuais

Sistema de arquivos da biblioteca NVS
Uma das partições padrão no flash ESP32 é a biblioteca NVS. A partição pode ser usada para armazenar parâmetros do aplicativo. Os dados do aplicativo armazenados no NVS não são perdidos quando o ESP32 é desligado, reiniciado ou encontra falha de energia. A partição precisa ser ativada usando a biblioteca NVS no código do usuário, que então monta o sistema de arquivos da biblioteca NVS na respectiva partição. O sistema de arquivos permite armazenar pares chave-valor onde as chaves podem ser strings ASCII e os valores podem ser inteiros, strings ou objetos binários grandes (BLOBs), como matrizes de caracteres. A partição NVS ainda não é adequada para armazenar strings grandes. Dependendo da tabela de partição padrão ou personalizada aplicada, o tamanho da partição é limitado a KB ou MB.

Sistema de arquivos SPIFFS
Serial Peripheral Interface Flash File System (SPIFFS) é o sistema de arquivos padrão suportado pelo ESP32. SPIFFS é um sistema de arquivos de microcontrolador leve com flash SPI NOR de menos de 128 MB. O sistema de arquivos requer menos RAM em comparação com o sistema de arquivos FAT. Ele suporta nivelamento de desgaste, consistência de dados e suporte POSIX. O sistema de arquivos pode ser montado no ESP32 ou unificado em um sistema de arquivos virtual no ESP32. O sistema de arquivos SPIFFS é adequado para particionar memória flash para armazenar imagens, áudio, vídeo e outros arquivos.

Sistema de arquivos FAT
O sistema de arquivos SPIFFS não vem com suporte de diretório porque não é independente de plataforma. Uma estrutura de diretórios organizada geralmente é necessária em muitas situações, como quando o ESP32 hospeda um pequeno servidor web com alguns arquivos HTML, CSS e de imagem. A outra situação pode ser quando dispositivos de memória externos, como cartões SD ou cartões eMMC, fazem interface com o ESP32 e possuem arquivos armazenados não diretamente na raiz, mas em diretórios. Nesses casos, o ESP32 pode ser montado com o sistema de arquivos FAT-Fs. Os FAT-Fs atuam como uma camada independente de plataforma e fornecem uma interface unificada para acessar todos os dispositivos de memória disponíveis, como chips flash externos, cartões SD e eMMC.

O sistema de arquivos oferece suporte a uma estrutura de diretórios e permite a criptografia de dados. O FAT-Fs suporta dispositivos de memória de gigabytes, enquanto o SPIFFS é adequado apenas para memórias flash de até 128 MB. O nivelamento de desgaste é opcional em FAT-Fs. O sistema de arquivos FAT-Fs no ESP32 deve ser usado para armazenar áudio, vídeo, imagens e outros tipos de arquivos quando os arquivos precisam ser armazenados em dispositivos de memória externos de grande capacidade ou requerem uma estrutura de diretórios para armazenamento.

Sistema de arquivos virtual
O ESP32 também pode ser carregado com Virtual File System. Ele unifica o sistema de arquivos SPIFFS e FAT-Fs no ESP32 e fornece uma interface semelhante a um arquivo para drivers externos. O sistema de arquivos virtual é útil quando os sistemas de arquivos SPIFFS e FAT são necessários no ESP32 por determinados motivos.

Conclusão
O gerenciamento de dados de usuários e de rede pode ser um desafio com microcontroladores. ESP32 não é exceção. ESP32 é uma poderosa plataforma de desenvolvimento Wi-Fi para a construção de aplicações IoT de todos os tamanhos. Felizmente, a memória do ESP32 pode ser estendida com flash/EEPROM externo, cartões SD e eMMC. Os chips flash externos ou EEPROM são adequados quando é necessário um pequeno incremento na capacidade de armazenamento. Se o aplicativo exigir o armazenamento de arquivos grandes, como arquivos de áudio, vídeo ou banco de dados, você deverá usar cartões SD ou eMMC.

Com a seleção apropriada de armazenamento on-board ou no dispositivo, a próxima etapa importante no gerenciamento de dados no ESP32 é selecionar um sistema de arquivos adequado. Se um aplicativo requer apenas o armazenamento de parâmetros importantes de chave-valor que não devem ser perdidos durante o desligamento ou falha de energia, o sistema de arquivos da biblioteca NVS é suficiente. Por exemplo, parâmetros de nível IP para conectar o ESP32 a uma rede existente podem ser armazenados na partição NVS como pares de chave-valor no sistema de arquivos da biblioteca NVS. Se o aplicativo requer o armazenamento de logs de áudio, vídeo ou dados de tamanho pequeno, o SPIFFS é mais adequado porque não consumirá RAM. Para aplicativos que exigem o armazenamento de arquivos grandes, a organização de arquivos em uma estrutura de diretório ou a criptografia de dados, o sistema de arquivos FAT no ESP32 é a opção. Para algumas circunstâncias raras, tanto o SPIFFS quanto o sistema de arquivos FAT podem ser necessários no ESP32, após o que o ESP32 pode ser carregado com o sistema de arquivos virtual para extrair os benefícios dos recursos do sistema de arquivos FAT e SPIFFS. Embora o ESP32 suporte o armazenamento de arquivos de áudio e vídeo, a taxa máxima de dados de 40 MHz ainda pode ser uma restrição.

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.