Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
/
/
Servidor de arquivos com ESP32

Servidor de arquivos com ESP32

Sumário

Baixe agora a apostila Arduino Iniciante e comece seus projetos

Compartilhe seu conhecimento e receba em dinheiro ou produtos.

Introdução

Além de aplicações voltadas para automação e IoT, tradicionalmente exploradas pela comunidade, o ESP32 também pode atuar como uma pequena plataforma de serviços de rede. No artigo anterior, foi apresentado um mini-roteador experimental capaz de criar uma rede local sem fio e atuar como gateway de acesso. A partir dos conceitos estudados naquele projeto, surge uma nova proposta: utilizar o ESP32 como servidor de arquivos e servidor web leve.

Neste projeto é desenvolvido um sistema embarcado baseado em ESP32 que implementa um servidor de arquivos acessível via navegador web, permitindo operações de upload, download, listagem e gerenciamento de arquivos em uma interface simples e responsiva.

O sistema utiliza o sistema de arquivos LittleFS como um dos recursos de armazenamento interno, e suporte a armazenamento externo via cartão microSD, permitindo expansão da capacidade de armazenamento.

A arquitetura do sistema foi projetada como um serviço de rede autônomo, no qual o ESP32 atua como servidor HTTP responsável por expor uma interface web de gerenciamento de arquivos e endpoints de acesso direto. A comunicação ocorre inteiramente via requisições HTTP, permitindo interação com o sistema através de qualquer navegador sem dependência de software externo.

A configuração de rede é realizada por meio de um sistema de WiFi Manager embarcado, permitindo que o dispositivo seja inicialmente configurado em modo de acesso (AP), com persistência de credenciais em memória não volátil (NVS). Após a configuração, o sistema realiza conexão automática em modo STA, garantindo reconexão transparente às redes previamente configuradas.

Por fim, o projeto integra um display OLED responsável pela exibição em tempo real das principais informações operacionais do sistema, utilização do armazenamento interno e externo e registros básicos de atividades e eventos do servidor. Esse recurso amplia a autonomia e a usabilidade do dispositivo, permitindo monitoramento local sem necessidade de acesso constante à interface web.

Hardware

O desenvolvimento do servidor de arquivos foi realizado utilizando uma plataforma baseada no microcontrolador ESP32, acompanhada por um display OLED para monitoramento local e um módulo de armazenamento externo via cartão microSD. A combinação desses componentes permite implementar um sistema embarcado capaz de oferecer serviços de rede básicos com baixo consumo energético e baixo custo de implementação.


ESP32

https://www.eletrogate.com/modulo-wifi-esp32-bluetooth-30-pinos

A arquitetura dual-core do ESP32 permite que as tarefas internas do sistema operacional e da pilha de rede operem paralelamente à aplicação do usuário, contribuindo para o bom desempenho das aplicações embarcadas conectadas.

Outro recurso relevante é a presença de conectividade Wi-Fi integrada, eliminando a necessidade de módulos externos para acesso à rede local. Dessa forma, o próprio microcontrolador é capaz de atuar como servidor HTTP, disponibilizando serviços acessíveis por navegadores web em computadores, smartphones ou outros dispositivos conectados à mesma rede.

Apesar de suas capacidades, o ESP32 possui limitações quando comparado a servidores convencionais. A quantidade reduzida de memória RAM e o poder computacional disponível restringem sua utilização a aplicações de pequeno porte, com número limitado de conexões simultâneas e arquivos de tamanho moderado.

Display OLED SSD1306

https://www.eletrogate.com/display-oled-128x64-096-i2c-azulamarelo

Para monitoramento local do sistema foi utilizado um display OLED baseado no controlador SSD1306, conectado ao ESP32 por meio da interface I²C.

O módulo empregado possui resolução de 128 × 64 pixels e tela monocromática, oferecendo boa legibilidade mesmo em ambientes com pouca iluminação. A tecnologia OLED dispensa retroiluminação, proporcionando baixo consumo energético e elevado contraste visual.

Durante a execução do sistema, o display é utilizado para exibir informações operacionais como endereço IP obtido na rede, estado da conexão Wi-Fi, utilização dos sistemas de arquivos e mensagens de log geradas pelo servidor. Dessa forma, o usuário pode acompanhar o funcionamento do dispositivo sem necessidade de acessar continuamente a interface web.

Cartão microSD

https://www.eletrogate.com/modulo-micro-sd-card

Como mecanismo de expansão de armazenamento foi utilizado um cartão microSD conectado ao barramento SPI do ESP32.

Embora o sistema utilize o LittleFS para armazenamento interno na memória flash do microcontrolador, a capacidade disponível nesse ambiente é limitada e compartilhada com o firmware da aplicação. A utilização do cartão microSD permite armazenar quantidades significativamente maiores de dados, tornando viável o gerenciamento de documentos, imagens, páginas web e outros arquivos de maior tamanho.

A presença de dois sistemas de armazenamento distintos também amplia a flexibilidade da aplicação, permitindo ao usuário selecionar dinamicamente o local de armazenamento por meio da interface web do servidor.

Diagrama Físico

Firmware

O firmware foi desenvolvido utilizando o ambiente Arduino para ESP32, concentrando toda a lógica principal da aplicação no arquivo fileserver_esp32.ino. Essa abordagem foi adotada com o objetivo de simplificar o estudo do sistema e facilitar a compreensão do fluxo completo de execução.

A aplicação é composta por cinco módulos principais: gerenciamento de rede Wi-Fisistema de arquivosservidor web, hospedagem de arquivos estáticos e interface local através do display OLED. Embora implementados de forma integrada, cada módulo possui responsabilidades bem definidas dentro da arquitetura do servidor.

O projeto utiliza bibliotecas nativas e amplamente difundidas no ecossistema ESP32, incluindo WiFi para conectividade de rede, WebServer para implementação do servidor HTTP, LittleFS e SD para acesso aos sistemas de arquivos, além de WireAdafruit_GFX e Adafruit_SSD1306 para controle do display OLED.

Durante a inicialização do sistema, o firmware realiza a montagem dos sistemas de arquivos, configura a conectividade Wi-Fi, inicializa o display OLED e, por fim, ativa o servidor HTTP responsável pelo gerenciamento dos arquivos e pela hospedagem de conteúdo web.


Gerenciador Wi-Fi

A configuração de rede foi implementada através do mesmo módulo desenvolvido no projeto do mini-roteador ESP32, promovendo o reaproveitamento de código e a padronização da configuração dos dispositivos.

O módulo é composto pelos arquivos wifi_config.cpp e wifi_config.h, responsáveis por encapsular toda a lógica de configuração e conexão sem fio. As credenciais são armazenadas em memória não volátil (NVS), permitindo que o dispositivo restabeleça automaticamente a conexão após reinicializações.

Durante a primeira utilização, ou quando nenhuma configuração válida é encontrada, o sistema pode operar temporariamente em modo ponto de acesso (Access Point), disponibilizando uma interface para configuração da rede local. Após a configuração inicial, o ESP32 passa a operar em modo Station (STA), conectando-se automaticamente à rede cadastrada.


Sistema de Arquivos

O servidor foi projetado para operar simultaneamente com dois sistemas de armazenamento distintos: o LittleFS, localizado na memória flash interna do ESP32, e um cartão microSD conectado através da interface SPI.

O LittleFS é utilizado como armazenamento interno permanente para arquivos menores e conteúdo embarcado diretamente no dispositivo. Já o cartão SD fornece capacidade adicional para armazenamento de páginas web, documentos, imagens e outros arquivos de maior tamanho.

Para simplificar o desenvolvimento da aplicação, foi implementada uma camada de abstração responsável por selecionar dinamicamente o sistema de arquivos ativo. Dessa forma, operações como leitura, gravação, remoção e listagem de arquivos podem ser realizadas utilizando uma interface comum, independentemente do meio de armazenamento utilizado.

Essa abordagem reduz duplicação de código e permite que novas funcionalidades sejam implementadas sem necessidade de tratamento específico para cada sistema de arquivos.


Interface Web

A interface de gerenciamento é disponibilizada através de um servidor HTTP implementado utilizando a biblioteca WebServer.

As páginas são geradas dinamicamente pelo firmware e enviadas diretamente ao navegador do usuário. O conteúdo HTML é construído durante a execução da aplicação, permitindo que informações como lista de arquivos, utilização do armazenamento e estado dos dispositivos sejam atualizadas em tempo real.

A comunicação entre navegador e servidor ocorre por meio de rotas HTTP registradas durante a inicialização da aplicação. Cada rota é associada a uma função responsável por processar a requisição correspondente.

Entre as funcionalidades implementadas destacam-se:

  • upload de arquivos;
  • download de arquivos;
  • abertura direta de arquivos no navegador;
  • renomeação de arquivos;
  • exclusão de arquivos;
  • formatação do armazenamento interno;
  • visualização da utilização do armazenamento.

Hospedagem de Arquivos Estáticos

Além das funções de gerenciamento de arquivos, o servidor também pode atuar como uma plataforma simples de hospedagem de conteúdo estático.

Quando uma requisição é recebida e não corresponde a nenhuma rota previamente registrada, o sistema executa um mecanismo de busca automática nos sistemas de arquivos disponíveis. Inicialmente é realizada uma busca no LittleFS e, caso o arquivo não seja encontrado, uma segunda tentativa é realizada no cartão SD.

Esse mecanismo permite que páginas HTMLfolhas de estilo CSSscripts JavaScriptimagens e outros recursos sejam servidos diretamente pelo ESP32 sem necessidade de configuração adicional.

O tipo de conteúdo enviado ao navegador é determinado automaticamente a partir da extensão do arquivo solicitado, permitindo a renderização correta de páginas e recursos web.

Essa funcionalidade transforma o dispositivo em um pequeno servidor web capaz de hospedar aplicações estáticas de baixa complexidade utilizando exclusivamente os recursos disponíveis no microcontrolador.

OLED e Logs do Sistema

O monitoramento local do servidor é realizado por meio de um display OLED baseado no controlador SSD1306.

Durante a execução, o display apresenta informações operacionais relevantes, incluindo o endereço IP obtido na rede local, utilização do armazenamento interno, estado do cartão SD e mensagens resumidas de eventos recentes.

As informações são atualizadas periodicamente através de uma rotina centralizada de renderização da interface gráfica. Eventos importantes, como montagem de sistemas de arquivos, conexão Wi-Fi, uploads, downloads e operações administrativas, geram mensagens de log exibidas diretamente no display.

Diagrama Lógico

Neste projeto, o ESP32 atua como elemento central responsável por integrar os diferentes subsistemas de armazenamento, comunicação de rede e interface local. A figura a seguir apresenta uma visão simplificada da arquitetura lógica da aplicação.

O navegador web interage diretamente com o servidor HTTP embarcado no ESP32, que por sua vez realiza operações sobre os sistemas de arquivos LittleFS e cartão microSD. Paralelamente, o módulo de monitoramento local atualiza continuamente o display OLED com informações operacionais, enquanto o gerenciador Wi-Fi mantém a conectividade de rede necessária para o acesso remoto aos serviços.

Fluxo de Inicialização

Durante a energização do dispositivo, o firmware executa uma sequência de inicialização responsável por preparar todos os recursos necessários para o funcionamento do servidor.

  • Inicialização do display OLED;
  • Montagem do sistema de arquivos LittleFS;
  • Inicialização do cartão microSD;
  • Carregamento das configurações de rede armazenadas em NVS;
  • Conexão à rede Wi-Fi ou ativação do modo Access Point para configuração inicial;
  • Registro das rotas HTTP do servidor;
  • Inicialização do servidor web;
  • Entrada no loop principal de execução.

Essa sequência garante que todos os recursos de armazenamento, comunicação e interface estejam disponíveis antes que o servidor passe a atender requisições dos usuários.

Códigos

Os códigos-fonte apresentados neste trabalho foram disponibilizados em um arquivo compactado (.zip) para download. Essa abordagem visa melhorar a organização e a legibilidade do texto, concentrando os recursos necessários em um único pacote, facilitando tanto a consulta quanto a reprodução dos experimentos descritos.Estrutura do pacote:fileserver_esp32.zip ├ fileserver_esp32.ino Aplicação principal do servidor de arquivos ├ wifi_config.cpp Implementação das funções de configuração Wi-Fi ├ wifi_config.h Cabeçalho das funções de configuração Wi-Fi └ config.h Parâmetros e definições globais do projeto
Download do firmware completo

Limitações e Expansões

Embora o ESP32 seja capaz de executar serviços de rede surpreendentemente completos para sua categoria, é importante considerar algumas limitações inerentes à arquitetura do dispositivo.

A principal restrição está relacionada à quantidade reduzida de memória RAM disponível. Diferentemente de servidores convencionais, o ESP32 possui recursos limitados para armazenamento temporário de dados e gerenciamento de múltiplas conexões simultâneas. Como consequência, o sistema é mais adequado para acessos esporádicos ou ambientes com poucos usuários concorrentes.

Outro aspecto relevante é a implementação simplificada do gerenciamento de arquivos. O projeto foi desenvolvido com foco em arquivos localizados no diretório raiz dos sistemas de armazenamento, não contemplando mecanismos avançados de navegação em múltiplos níveis de subdiretórios. Embora essa funcionalidade possa ser adicionada futuramente, sua ausência contribui para a simplicidade da interface e da lógica de processamento.

Do ponto de vista da segurança, o servidor não implementa mecanismos de autenticação de usuários. Qualquer dispositivo com acesso à interface web pode executar operações de leitura e modificação dos arquivos armazenados. Da mesma forma, toda a comunicação ocorre através do protocolo HTTP convencional, sem suporte nativo a HTTPS e criptografia TLS.

Essas características tornam recomendável a utilização do sistema em redes locais controladas ou em ambientes de laboratório, onde os riscos de exposição são reduzidos e o objetivo principal é o estudo de tecnologias embarcadas e serviços de rede.

Apesar dessas limitações, o projeto demonstra uma característica interessante dos microcontroladores modernos: a possibilidade de disponibilizar serviços acessíveis remotamente utilizando recursos extremamente modestos.

Durante os testes realizados neste projeto, o acesso remoto não foi implementado através da exposição direta do ESP32 à Internet. Em vez disso, foi utilizada uma combinação entre VPN e encaminhamento de portas (port forwarding), explorando os recursos avançados do sistema operacional Linux embarcado no roteador utilizado no laboratório.

Nesse cenário, o encaminhamento de portas foi aplicado apenas na interface virtual da VPN, permitindo que o servidor hospedado no ESP32 permanecesse isolado da rede pública. Dessa forma, somente dispositivos previamente conectados à rede privada virtual poderiam acessar os serviços disponibilizados pelo microcontrolador.

Essa abordagem oferece uma camada adicional de segurança em comparação à publicação direta do serviço na interface WAN do roteador, uma vez que reduz significativamente a superfície de exposição do dispositivo e restringe o acesso a usuários autenticados na VPN.

Embora a implementação tenha sido realizada utilizando um roteador baseado em Linux embarcado, o mesmo conceito pode ser reproduzido em outras plataformas de rede, incluindo roteadores com firmware customizado, dispositivos baseados em System-on-Chip (SoC) ou pequenos servidores dedicados executando serviços de VPN e roteamento.

Conclusão

O desenvolvimento deste servidor de arquivos demonstra como plataformas embarcadas modernas podem ultrapassar aplicações tradicionais de automação e atuar como pequenos servidores de rede. Embora não substituam servidores convencionais, dispositivos como o ESP32 permitem a construção de soluções educacionais, laboratoriais e experimentais com baixo custo, reduzido consumo energético e elevada flexibilidade de implementação.

REFERÊNCIAS

ESPRESSIF SYSTEMS. ESP32 Series Datasheet. Shanghai: Espressif Systems, 2024. Disponível em: https://www.espressif.com. Acesso em: 03 jun. 2026.ESPRESSIF SYSTEMS. ESP-IDF Programming Guide. Shanghai: Espressif Systems, 2026. Disponível em: https://docs.espressif.com. Acesso em: 03 jun. 2026.LITTLEFS PROJECT. LittleFS Documentation. Disponível em: https://github.com/littlefs-project/littlefs. Acesso em: 03 jun. 2026.ESPRESSIF SYSTEMS. Arduino-ESP32 Documentation. Disponível em: https://docs.espressif.com/projects/arduino-esp32. Acesso em: 03 jun. 2026.TANENBAUM, Andrew S.; WETHERALL, David. Redes de Computadores. 5. ed. São Paulo: Pearson, 2011.STALLINGS, William. Comunicações de Dados e Redes de Computadores. 10. ed. São Paulo: Pearson Education do Brasil, 2016.NXP SEMICONDUCTORS. UM10204: I²C-bus Specification and User Manual. Eindhoven: NXP Semiconductors, 2021.MOTOROLA INC. SPI Block Guide V03.06. Austin: Motorola Semiconductor Products Sector, 2000.WIREGUARD DEVELOPMENT TEAM. WireGuard Documentation. Disponível em: https://www.wireguard.com. Acesso em: 03 jun. 2026.SOLOMON SYSTECH LIMITED. SSD1306 OLED Display Driver Datasheet. Hong Kong: Solomon Systech Limited, 2008.MATTOS, Erwin de. Usando o ESP32 como roteador. Blog Eletrogate, 2026.

Precisa dos componentes para este projeto?

Encontre tudo na Loja Eletrogate com frete grátis para compras acima de R$ 200