Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/aasjunior/esp32_web_server

Este é um projeto utilizado para fins acadêmicos e aprendizado com a placa de desenvolvimento Esp32 e linguagem de programação C++.
https://github.com/aasjunior/esp32_web_server

cpp esp32 iot platformio webserver

Last synced: 3 months ago
JSON representation

Este é um projeto utilizado para fins acadêmicos e aprendizado com a placa de desenvolvimento Esp32 e linguagem de programação C++.

Awesome Lists containing this project

README

        

# Servidor Web com Esp32

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++**.


PlatformIO
ESP32
C++
VS Code


### Sobre o PlatformIO

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.

platformio

### Sobre o ESP32

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.

Esp32




## Configuração do Ambiente

###### Requisitos
- VSCode
- PlatformIO
- Placa Esp32
- Cartão SD
- MicroSD Card Adapter (Modulo)

#### Lista de Componentes


Componentes
Quantidade



Esp32
1


MicroSD Card Adapter
1


Cartão SD
1


Cabo USB
1


Jumpers
6

### Instalação e Configuração

1. Faça a instalação do **VSCode**, depois busque e instale a extensão do **PlatformIO**.

2. Formate o cartão SD como **FAT16**, **FAT32** ou **exFAT**.

3. Clone o repositório para sua máquina local:

```
git clone https://github.com/aasjunior/esp32_web_server.git
```
4. Salve o diretório `site` no cartão SD e depois o coloque no slot do **MicroSD Card Adapter**

5. Abra o diretório `web_server` utilizando o **PlatformIO**.

6. Verifique se todas as dependências estão instaladas conforme especificado no `platformio.ini`.

7. Crie um arquivo `Credentials.h` dentro de `web_server/include` e insira o nome e a senha da sua rede **WiFi**:

```c++
const char* ssid = "WIFI_SSID";
const char* password = "WIFI_PASSWORD";
```

8. Faça as conexões entre o **Esp32** e o modulo MicroSD como especificado abaixo:


Diagrama de conexão


### Como Usar

1. Compile e carregue o código para o **ESP32** utilizando o **PlatformIO**.

2. Abra o **monitor serial** para verificar a saída e o endereço **IP** atribuído.

3. Conecte-se na mesma rede **WiFi** do **ESP32**.

4. Acesse o servidor web através do endereço **IP** exibido para acessar a página web salva no cartão SD.


Página Web

### Observações

- Certifique-se de que seu adaptador MicroSD esteja devidamente conectado ao **ESP32** para que o cartão SD seja inicializado corretamente.


## Componentes do Projeto

#### Estrutura de Arquivos

```
📁 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` e `SDStatus`) utilizadas para representar o status da conexão WiFi e do cartão SD.



```c++
#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.



```c++
const char* ssid = "WIFI_SSID";
const char* password = "WIFI_PASSWORD";
```

- **SDManager.h**: Declara a classe `SDManager`, responsável pelo gerenciamento do cartão SD.

```c++
#ifndef SD_MANAGER_H
#define SD_MANAGER_H

#include
#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.

```c++
#ifndef WEB_SERVER_MANAGER_H
#define WEB_SERVER_MANAGER_H

#include
#include

class WebServerManager{
public:
WebServerManager();
void begin();

private:
AsyncWebServer server;
};

#endif
```

- **WiFiManager.h**: Declara a classe `WiFiManager`, responsável pelo gerenciamento da conexão WiFi.

```c++
#ifndef WIFI_MANAGER_H
#define WIFI_MANAGER_H

#include
#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 em `SDManager.h`, como `begin()` e `listDir()`.

- **WebServerManager.cpp**: Implementa os métodos da classe `WebServerManager` declarados em `WebServerManager.h`, como `begin()` para iniciar o servidor web.

- **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**.

- **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**.

- **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
```

## Tecnologias



PlatformIO
ESP32
C++
HTML
Bootstrap
JavaScript

##
**Aviso**

Este é um projeto utilizado para fins de aprendizado com a placa de desenvolvimento **Esp32** e linguagem de programação **C++**.