Este projeto implementa um servidor web utilizando o ESP32 e o modulo MicroSD Card Adapter para servir uma pagina HTML, estilizada com Bootstrap e Javascript, através da rede local. Para desenvolvimento do projeto foi utilizada a plataforma PlatformIO pelo Visual Studio Code e a linguagem de programação C++.
O PlatformIO é um ambiente de desenvolvimento integrado (IDE) e um gerenciador de projetos para sistemas embarcados. Ele oferece suporte a diversas plataformas de hardware e frameworks, facilitando o desenvolvimento e a integração de firmware. Com o PlatformIO, os desenvolvedores podem aproveitar uma ampla gama de bibliotecas e ferramentas de compilação, tornando o processo de desenvolvimento mais eficiente e simplificado. Além disso, o PlatformIO pode ser integrado ao Visual Studio Code, oferecendo uma interface de usuário poderosa e funcionalidades avançadas de edição de código e de autocomplete.
O ESP32 é um microcontrolador de baixo custo e alto desempenho, desenvolvido pela Espressif Systems. Ele possui conectividade Wi-Fi e Bluetooth integrada, tornando-o ideal para aplicações de IoT (Internet das Coisas). Com um processador dual-core e várias interfaces de comunicação, o ESP32 é altamente versátil e pode ser utilizado em uma ampla gama de projetos, desde automação residencial até dispositivos conectados industriais. A robustez e a flexibilidade do ESP32, juntamente com seu suporte a múltiplos frameworks de desenvolvimento, como o Arduino e o ESP-IDF, o tornam uma escolha popular entre os desenvolvedores de sistemas embarcados.
- VSCode
- PlatformIO
- Placa Esp32
- Cartão SD
- MicroSD Card Adapter (Modulo)
Componentes | Quantidade |
---|---|
Esp32 | 1 |
MicroSD Card Adapter | 1 |
Cartão SD | 1 |
Cabo USB | 1 |
Jumpers | 6 |
-
Faça a instalação do VSCode, depois busque e instale a extensão do PlatformIO.
-
Formate o cartão SD como FAT16, FAT32 ou exFAT.
-
Clone o repositório para sua máquina local:
git clone https://github.com/aasjunior/esp32_web_server.git
-
Salve o diretório
site
no cartão SD e depois o coloque no slot do MicroSD Card Adapter -
Abra o diretório
web_server
utilizando o PlatformIO. -
Verifique se todas as dependências estão instaladas conforme especificado no
platformio.ini
. -
Crie um arquivo
Credentials.h
dentro deweb_server/include
e insira o nome e a senha da sua rede WiFi:
const char* ssid = "WIFI_SSID";
const char* password = "WIFI_PASSWORD";
- Faça as conexões entre o Esp32 e o modulo MicroSD como especificado abaixo:
-
Compile e carregue o código para o ESP32 utilizando o PlatformIO.
-
Abra o monitor serial para verificar a saída e o endereço IP atribuído.
-
Conecte-se na mesma rede WiFi do ESP32.
-
Acesse o servidor web através do endereço IP exibido para acessar a página web salva no cartão SD.
- Certifique-se de que seu adaptador MicroSD esteja devidamente conectado ao ESP32 para que o cartão SD seja inicializado corretamente.
📁 web_server/
├── 📁 include/
| ├── 📄 Enums.h
| ├── 📄 Credentials.h
| ├── 📄 SDManager.h
| ├── 📄 WebServerManager.h
| └── 📄 WiFiManager.h
├── 📁 src/
| ├── 📁 core/
| | ├── 📄 SDManager.cpp
| | ├── 📄 WebServerManager.cpp
| | └── 📄 WiFiManager.cpp
| └── 📄 main.cpp
└── 📄 platformio.ini
-
📁 include/: Este diretório possui os arquivos de cabeçalho (
.h
) que definem as interfaces das classes de funções utilizadas no projeto.-
Enums.h: Define as enumerações (
WiFiStatus
eSDStatus
) utilizadas para representar o status da conexão WiFi e do cartão SD.
#ifndef ENUMS_H #define ENUMS_H enum WiFiStatus{ WIFI_CONNECTING, WIFI_CONNECTED, WIFI_FAILED }; enum SDStatus{ SD_INITIALIZED, SD_FAILED, SD_NO_CARD }; #endif
-
Credentials.h: Contém as credenciais de rede WiFi (
SSID
e senha), mantidas separadamente para fins de segurança.
const char* ssid = "WIFI_SSID"; const char* password = "WIFI_PASSWORD";
-
SDManager.h: Declara a classe
SDManager
, responsável pelo gerenciamento do cartão SD.
#ifndef SD_MANAGER_H #define SD_MANAGER_H #include <SD.h> #include "Enums.h" class SDManager{ public: SDManager(int pinCS); SDStatus begin(); void listDir(fs::FS &fs, const char * dirname, uint8_t levels); private: int pinCS; }; #endif
-
WebServerManager.h: Declara a classe
WebServerManager
, responsável pela configuração e execução do servidor web.
#ifndef WEB_SERVER_MANAGER_H #define WEB_SERVER_MANAGER_H #include <ESPAsyncWebServer.h> #include <SD.h> class WebServerManager{ public: WebServerManager(); void begin(); private: AsyncWebServer server; }; #endif
-
WiFiManager.h: Declara a classe
WiFiManager
, responsável pelo gerenciamento da conexão WiFi.
#ifndef WIFI_MANAGER_H #define WIFI_MANAGER_H #include <WiFi.h> #include "Enums.h" class WiFiManager{ public: WiFiManager(const char* ssid, const char* password); WiFiStatus connect(); IPAddress getIP(); private: const char* ssid; const char* password; }; #endif
-
-
📁 src/core: Este diretório possui os arquivos de implementação (
.cpp
) das classes definidas nos arquivos de cabeçalho.-
SDManager.cpp: Implementa os métodos da classe
SDManager
declarados emSDManager.h
, comobegin()
elistDir()
. -
WebServerManager.cpp: Implementa os métodos da classe
WebServerManager
declarados emWebServerManager.h
, comobegin()
para iniciar o servidor web. -
WiFiManager.cpp: Implementa os métodos da classe
WiFiManager
declarados emWiFiManager.h
, comoconnect()
para conectar-se à rede WiFi egetIP()
para obter o endereço IP.
-
-
main.cpp: Arquivo principal do programa, que contém a função
setup()
eloop()
(não utilizada no exemplo) do ESP32, onde as instâncias das classes são criadas e utilizadas para inicializar o WiFi, o cartão SD e o servidor web. -
platformio.ini: Arquivo de configuração do PlatformIO que define as opções de compilação, upload e configuração de bibliotecas utilizadas no projeto.
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps =
SPI
SD
ESP Async WebServer
AsyncTCP
WiFi
Aviso
Este é um projeto utilizado para fins de aprendizado com a placa de desenvolvimento Esp32 e linguagem de programação C++.