{"id":15011913,"url":"https://github.com/aasjunior/esp32_web_server","last_synced_at":"2026-02-01T01:34:30.657Z","repository":{"id":244731922,"uuid":"816094781","full_name":"aasjunior/esp32_web_server","owner":"aasjunior","description":"Este é um projeto utilizado para fins acadêmicos e aprendizado com a placa de desenvolvimento Esp32 e linguagem de programação C++.","archived":false,"fork":false,"pushed_at":"2024-06-25T01:48:43.000Z","size":1451,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-15T01:36:44.224Z","etag":null,"topics":["cpp","esp32","iot","platformio","webserver"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aasjunior.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-17T03:04:27.000Z","updated_at":"2024-06-25T01:48:45.000Z","dependencies_parsed_at":"2024-06-17T04:25:19.858Z","dependency_job_id":"0d558c77-f20b-4ee2-a5ad-a863bfb53198","html_url":"https://github.com/aasjunior/esp32_web_server","commit_stats":{"total_commits":18,"total_committers":2,"mean_commits":9.0,"dds":0.2777777777777778,"last_synced_commit":"a2a8140d597fcfc0992b8a724584ff5df3590a65"},"previous_names":["aasjunior/esp32_web_server"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aasjunior/esp32_web_server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aasjunior%2Fesp32_web_server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aasjunior%2Fesp32_web_server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aasjunior%2Fesp32_web_server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aasjunior%2Fesp32_web_server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aasjunior","download_url":"https://codeload.github.com/aasjunior/esp32_web_server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aasjunior%2Fesp32_web_server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28963913,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T01:25:30.373Z","status":"ssl_error","status_checked_at":"2026-02-01T01:25:29.809Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","esp32","iot","platformio","webserver"],"created_at":"2024-09-24T19:41:53.043Z","updated_at":"2026-02-01T01:34:30.642Z","avatar_url":"https://github.com/aasjunior.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Servidor Web com Esp32\n\nEste 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++**.\n\n\u003cp align=\"center\"\u003e\n   \u003cimg src=\"https://img.shields.io/badge/PlatformIO-00979D?style=for-the-badge\u0026logo=platformio\u0026logoColor=white\" alt=\"PlatformIO\"/\u003e\n   \u003cimg src=\"https://img.shields.io/badge/ESP32-000000?style=for-the-badge\u0026logo=espressif\u0026logoColor=white\" alt=\"ESP32\"/\u003e\n   \u003cimg src=\"https://img.shields.io/badge/C++-00599C?style=for-the-badge\u0026logo=c%2B%2B\u0026logoColor=white\" alt=\"C++\"/\u003e\n   \u003cimg src=\"https://img.shields.io/badge/VS_Code-007ACC?style=for-the-badge\u0026logo=visual-studio-code\u0026logoColor=white\" alt=\"VS Code\"/\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n### Sobre o PlatformIO\n\nO **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.\n\n\u003cimg width='100' src='https://github.com/aasjunior/esp32_web_server/assets/61213599/94e62aec-3549-477f-82db-08087995edbc' alt='platformio'\u003e\n\n### Sobre o ESP32\n\nO **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.\n\n\u003cimg width='100' src='https://github.com/aasjunior/esp32_web_server/assets/61213599/3e1dfffe-fdc8-4408-9261-926fbe91929a' alt='Esp32'\u003e\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n## Configuração do Ambiente\n\n###### Requisitos\n- VSCode\n- PlatformIO\n- Placa Esp32\n- Cartão SD\n- MicroSD Card Adapter (Modulo)\n\n#### Lista de Componentes\n\n\u003ctable\u003e\n   \u003cthead\u003e\n      \u003cth\u003eComponentes\u003c/th\u003e\n      \u003cth\u003eQuantidade\u003c/th\u003e\n   \u003c/thead\u003e\n   \u003ctbody\u003e\n      \u003ctr\u003e\n         \u003ctd\u003eEsp32\u003c/td\u003e\n         \u003ctd\u003e1\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n         \u003ctd\u003eMicroSD Card Adapter\u003c/td\u003e\n         \u003ctd\u003e1\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n         \u003ctd\u003eCartão SD\u003c/td\u003e\n         \u003ctd\u003e1\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n         \u003ctd\u003eCabo USB\u003c/td\u003e\n         \u003ctd\u003e1\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n         \u003ctd\u003eJumpers\u003c/td\u003e\n         \u003ctd\u003e6\u003c/td\u003e\n      \u003c/tr\u003e\n   \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003cspan style=\"display:block; height:0.5em;\"\u003e\u003c/span\u003e\n\n### Instalação e Configuração\n\n1. Faça a instalação do **VSCode**, depois busque e instale a extensão do **PlatformIO**.\n\n2. Formate o cartão SD como **FAT16**, **FAT32** ou **exFAT**.\n\n3. Clone o repositório para sua máquina local:\n\n```\ngit clone https://github.com/aasjunior/esp32_web_server.git\n```\n4. Salve o diretório `site` no cartão SD e depois o coloque no slot do **MicroSD Card Adapter**\n\n5. Abra o diretório `web_server` utilizando o **PlatformIO**.\n\n6. Verifique se todas as dependências estão instaladas conforme especificado no `platformio.ini`.\n\n7. Crie um arquivo `Credentials.h` dentro de `web_server/include` e insira o nome e a senha da sua rede **WiFi**:\n \n ```c++\n const char* ssid = \"WIFI_SSID\";\n const char* password = \"WIFI_PASSWORD\";\n ```\n\n8. Faça as conexões entre o **Esp32** e o modulo MicroSD como especificado abaixo:\n\n\u003cdiv align='center'\u003e\n    \u003cimg src='diagrama.png' alt='Diagrama de conexão' width='800'\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n### Como Usar\n\n1. Compile e carregue o código para o **ESP32** utilizando o **PlatformIO**.\n\n2. Abra o **monitor serial** para verificar a saída e o endereço **IP** atribuído.\n\n3. Conecte-se na mesma rede **WiFi** do **ESP32**.\n\n4. Acesse o servidor web através do endereço **IP** exibido para acessar a página web salva no cartão SD.\n\n\u003cdiv align='center'\u003e\n   \u003cimg width='200' src='https://github.com/aasjunior/esp32_web_server/assets/61213599/1bc64a27-650b-4d32-9c97-fc9e1af60c9e' alt='Página Web'\u003e\n\u003c/div\u003e\n\n\n### Observações\n\n- Certifique-se de que seu adaptador MicroSD esteja devidamente conectado ao **ESP32** para que o cartão SD seja inicializado corretamente.\n\n\u003cbr\u003e\n\n## Componentes do Projeto\n\n#### Estrutura de Arquivos\n\n```\n📁 web_server/ \n├── 📁 include/\n|    ├── 📄 Enums.h\n|    ├── 📄 Credentials.h\n|    ├── 📄 SDManager.h\n|    ├── 📄 WebServerManager.h\n|    └── 📄 WiFiManager.h\n├── 📁 src/  \n|    ├── 📁 core/\n|    |    ├── 📄 SDManager.cpp\n|    |    ├── 📄 WebServerManager.cpp\n|    |    └── 📄 WiFiManager.cpp\n|    └── 📄 main.cpp\n└── 📄 platformio.ini\n```\n\n\u003cspan style=\"display:block; height:0.5em;\"\u003e\u003c/span\u003e\n\n- 📁 **include/**: Este diretório possui os arquivos de cabeçalho (`.h`) que definem as **interfaces** das classes de funções utilizadas no projeto.\n   \n    - **Enums.h**: Define as enumerações (`WiFiStatus` e `SDStatus`) utilizadas para representar o status da conexão WiFi e do cartão SD.\n \n      \u003cspan style=\"display:block; height:0.5em;\"\u003e\u003c/span\u003e\n    \n    ```c++\n    #ifndef ENUMS_H\n    #define ENUMS_H\n\n    enum WiFiStatus{\n        WIFI_CONNECTING,\n        WIFI_CONNECTED, \n        WIFI_FAILED\n    };\n\n    enum SDStatus{\n        SD_INITIALIZED,\n        SD_FAILED,\n        SD_NO_CARD\n    };\n\n    #endif\n    ```\n\n    \u003cspan style=\"display:block; height:0.5em;\"\u003e\u003c/span\u003e\n\n    - **Credentials.h**: Contém as credenciais de rede WiFi (`SSID` e senha), mantidas separadamente para fins de segurança.\n \n      \u003cspan style=\"display:block; height:0.5em;\"\u003e\u003c/span\u003e\n    \n    ```c++\n    const char* ssid = \"WIFI_SSID\";\n    const char* password = \"WIFI_PASSWORD\";\n    ```\n    \n    \u003cspan style=\"display:block; height:0.5em;\"\u003e\u003c/span\u003e\n\n    - **SDManager.h**: Declara a classe `SDManager`, responsável pelo gerenciamento do cartão SD.\n \n      \u003cspan style=\"display:block; height:0.5em;\"\u003e\u003c/span\u003e\n\n    ```c++\n    #ifndef SD_MANAGER_H\n    #define SD_MANAGER_H\n\n    #include \u003cSD.h\u003e\n    #include \"Enums.h\"\n\n    class SDManager{\n    public:\n        SDManager(int pinCS);\n        SDStatus begin();\n        void listDir(fs::FS \u0026fs, const char * dirname, uint8_t levels);\n\n    private:\n        int pinCS;\n    };\n\n    #endif\n    ```\n\n    \u003cspan style=\"display:block; height:0.5em;\"\u003e\u003c/span\u003e\n\n    - **WebServerManager.h**: Declara a classe `WebServerManager`, responsável pela configuração e execução do servidor web.\n\n      \u003cspan style=\"display:block; height:0.5em;\"\u003e\u003c/span\u003e\n\n    ```c++\n    #ifndef WEB_SERVER_MANAGER_H\n    #define WEB_SERVER_MANAGER_H\n\n    #include \u003cESPAsyncWebServer.h\u003e\n    #include \u003cSD.h\u003e\n\n    class WebServerManager{\n    public:\n        WebServerManager();\n        void begin();\n\n    private:\n        AsyncWebServer server;\n    };\n\n    #endif\n    ```\n\n    \u003cspan style=\"display:block; height:0.5em;\"\u003e\u003c/span\u003e\n\n    - **WiFiManager.h**: Declara a classe `WiFiManager`, responsável pelo gerenciamento da conexão WiFi.\n \n      \u003cspan style=\"display:block; height:0.5em;\"\u003e\u003c/span\u003e\n\n    ```c++\n    #ifndef WIFI_MANAGER_H\n    #define WIFI_MANAGER_H\n\n    #include \u003cWiFi.h\u003e\n    #include \"Enums.h\"\n\n    class WiFiManager{\n    public:\n        WiFiManager(const char* ssid, const char* password);\n        WiFiStatus connect();\n        IPAddress getIP();\n\n    private:\n        const char* ssid;\n        const char* password;\n    };\n\n    #endif\n    ```\n\n\u003cspan style=\"display:block; height:0.5em;\"\u003e\u003c/span\u003e\n\n- 📁 **src/core**: Este diretório possui os arquivos de implementação (`.cpp`) das classes definidas nos arquivos de cabeçalho.\n\n    - **SDManager.cpp**: Implementa os métodos da classe `SDManager` declarados em `SDManager.h`, como `begin()` e `listDir()`.\n\n    - **WebServerManager.cpp**: Implementa os métodos da classe `WebServerManager` declarados em `WebServerManager.h`, como `begin()` para iniciar o servidor web.\n\n    - **WiFiManager.cpp**: Implementa os métodos da classe `WiFiManager` declarados em `WiFiManager.h`, como `connect()` para conectar-se à rede WiFi e `getIP()` para obter o endereço **IP**.\n\n\n- **main.cpp**: Arquivo principal do programa, que contém a função `setup()` e `loop()` (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**.\n\n- **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.\n\n```\n[env:esp32dev]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\nmonitor_speed = 115200\nlib_deps =\n    SPI\n    SD\n    ESP Async WebServer\n    AsyncTCP\n    WiFi\n```\n\n## Tecnologias\n\n\u003cbr\u003e\n\n\u003cp align=\"center\"\u003e\n   \u003cimg src=\"https://img.shields.io/badge/PlatformIO-00979D?style=for-the-badge\u0026logo=platformio\u0026logoColor=white\" alt=\"PlatformIO\"/\u003e\n   \u003cimg src=\"https://img.shields.io/badge/ESP32-000000?style=for-the-badge\u0026logo=espressif\u0026logoColor=white\" alt=\"ESP32\"/\u003e\n   \u003cimg src=\"https://img.shields.io/badge/C++-00599C?style=for-the-badge\u0026logo=c%2B%2B\u0026logoColor=white\" alt=\"C++\"/\u003e\n   \u003cimg src=\"https://img.shields.io/badge/HTML-E34F26?style=for-the-badge\u0026logo=html5\u0026logoColor=white\" alt=\"HTML\"/\u003e\n   \u003cimg src=\"https://img.shields.io/badge/Bootstrap-563D7C?style=for-the-badge\u0026logo=bootstrap\u0026logoColor=white\" alt=\"Bootstrap\"/\u003e\n   \u003cimg src=\"https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge\u0026logo=javascript\u0026logoColor=black\" alt=\"JavaScript\"/\u003e\n\u003c/p\u003e\n\n##\n**Aviso**\n\nEste é um projeto utilizado para fins de aprendizado com a placa de desenvolvimento **Esp32** e linguagem de programação **C++**.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faasjunior%2Fesp32_web_server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faasjunior%2Fesp32_web_server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faasjunior%2Fesp32_web_server/lists"}