#include <stdio.h>
#include "esp_log.h"
#include "esp_system.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_netif.h"
#include "nvs_flash.h"
#include "driver/gpio.h"
#include "esp_http_server.h"
#define LED_PIN 2 // Pino do LED
static const char *TAG = "ESP32";
// Configuração do Wi-Fi
#define WIFI_SSID "Beth 2.4" // Substitua pelo nome da sua rede Wi-Fi
#define WIFI_PASS "BETH2330" // Substitua pela sua senha de rede Wi-Fi
// Função de conexão Wi-Fi
void wifi_init_sta(void) {
esp_netif_init(); // Inicializa a pilha de rede do ESP32.
esp_event_loop_create_default(); //Cria o loop de eventos padrão, que será usado para tratar eventos de Wi-Fi.
esp_netif_create_default_wifi_sta(); //Cria uma interface de rede para Wi-Fi no modo estação.
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&cfg); //Inicializa o Wi-Fi com a configuração padrão.
esp_wifi_set_mode(WIFI_MODE_STA); //Configura o ESP32 para o modo estação (STA), ou seja, ele irá se conectar a uma rede Wi-Fi.
// Definir o SSID e a senha
wifi_config_t wifi_config = {
.sta = {
.ssid = WIFI_SSID,
.password = WIFI_PASS,
},
};
esp_wifi_set_config(WIFI_IF_STA, &wifi_config); // Configura o Wi-Fi com SSID e senha
esp_wifi_start(); //Inicia a interface Wi-Fi.
esp_wifi_connect(); //Solicita ao ESP32 para se conectar à rede Wi-Fi.
ESP_LOGI(TAG, "Conectando à rede Wi-Fi...");
}
// Função para exibir a página HTML
esp_err_t serve_main_page(httpd_req_t *req) {
const char *html =
"<html><body>"
"<h1>Sinal Online</h1>"
"<button onclick=\"location.href='/led/on'\">Ligar LED</button><br><br>"
"<button onclick=\"location.href='/led/off'\">Desligar LED</button><br>"
"</body></html>";
httpd_resp_send(req, html, HTTPD_RESP_USE_STRLEN);
return ESP_OK;
}
// Função para ligar o LED
esp_err_t turn_on_led(httpd_req_t *req) {
gpio_set_level(LED_PIN, 1); // Aciona o LED
ESP_LOGI(TAG, "LED Ligado!");
httpd_resp_send(req, "LED Ligado!", HTTPD_RESP_USE_STRLEN);
return ESP_OK;
}
// Função para desligar o LED
esp_err_t turn_off_led(httpd_req_t *req) {
gpio_set_level(LED_PIN, 0); // Desliga o LED
ESP_LOGI(TAG, "LED Desligado!");
httpd_resp_send(req, "LED Desligado!", HTTPD_RESP_USE_STRLEN);
return ESP_OK;
}
// Configuração do servidor HTTP
httpd_uri_t main_page = {
.uri = "/",
.method = HTTP_GET,
.handler = serve_main_page
};
httpd_uri_t led_on = {
.uri = "/led/on",
.method = HTTP_GET,
.handler = turn_on_led
};
httpd_uri_t led_off = {
.uri = "/led/off",
.method = HTTP_GET,
.handler = turn_off_led
};
// Função para iniciar o servidor web
esp_err_t start_webserver(void) {
httpd_handle_t server = NULL;
httpd_config_t config = HTTPD_DEFAULT_CONFIG();
// Inicia o servidor HTTP
if (httpd_start(&server, &config) == ESP_OK) {
// Registra as rotas
httpd_register_uri_handler(server, &main_page);
httpd_register_uri_handler(server, &led_on);
httpd_register_uri_handler(server, &led_off);
return ESP_OK;
}
return ESP_FAIL;
}
// Função principal
void app_main(void) {
esp_err_t ret = nvs_flash_init(); //Inicializa a memória NVS para armazenar configurações persistentes.
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);
// Configura o pino do LED
gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
// Inicializa a conexão Wi-Fi
wifi_init_sta();
// Aguardar até o ESP32 conectar à rede Wi-Fi
//while (esp_wifi_is_connected() != true) {
//vTaskDelay(1000 / portTICK_PERIOD_MS); // Aguarda 1 segundo
// ESP_LOGI(TAG, "Conectando...");
//}
ESP_LOGI(TAG, "Conectado ao Wi-Fi!");
// Inicia o servidor web
start_webserver();
}