CODIGO COMENTADO:
1. Inclusión de bibliotecas necesarias
#include <stdio.h>
#include "string.h"
#include "esp_wifi.h"
#include "nvs_flash.h"
#include "protocol_examples_common.h"
#include "esp_http_server.h"
- #include <stdio.h>: Biblioteca estándar de C para funciones de entrada/salida como printf().
- #include "string.h": Biblioteca estándar para manejo de cadenas de caracteres.
- #include "esp_wifi.h": Proporciona funciones para manejar Wi-Fi en ESP32.
- #include "nvs_flash.h": Biblioteca para manejar la memoria No Volátil (NVS), usada para almacenar configuraciones.
- #include "protocol_examples_common.h": Proporciona configuraciones y funciones de red predefinidas.
- #include "esp_http_server.h": Biblioteca principal para configurar y manejar un servidor HTTP en el ESP32.
2. Definición del manejador de solicitudes HTTP GET
static esp_err_t api_get_handler(httpd_req_t *req) {
httpd_resp_send(req, "Hola mundo!", HTTPD_RESP_USE_STRLEN);
return ESP_OK;
}
- static esp_err_t api_get_handler(httpd_req_t *req): Esta es la función que maneja las solicitudes HTTP GET en la ruta /api.
- httpd_resp_send(req, "Hola mundo!", HTTPD_RESP_USE_STRLEN);: Responde con el mensaje "Hola mundo!" al cliente que hizo la solicitud.
- return ESP_OK;: Indica que la operación fue exitosa.
3. Configuración de la estructura URI
static const httpd_uri_t api = {
.uri = "/api",
.method = HTTP_GET,
.handler = api_get_handler
};
- Se crea una estructura httpd_uri_t llamada api, que define cómo el servidor manejará la ruta /api.
- .uri = "/api": Especifica la ruta que este manejador atenderá.
- .method = HTTP_GET: Especifica que este manejador responderá a solicitudes GET.
- .handler = api_get_handler: Asigna la función que maneja la solicitud (definida anteriormente).
4. Función para iniciar el servidor web
void web_server_init() {
httpd_handle_t server = NULL;
httpd_config_t config = HTTPD_DEFAULT_CONFIG();
- httpd_handle_t server = NULL;: Declara un identificador para el servidor HTTP.
- httpd_config_t config = HTTPD_DEFAULT_CONFIG();: Se inicializa la configuración del servidor con valores predeterminados.
if (httpd_start(&server, &config) == ESP_OK) {
httpd_register_uri_handler(server, &api);
return;
}
- httpd_start(&server, &config): Intenta iniciar el servidor con la configuración especificada.
- if (httpd_start(&server, &config) == ESP_OK): Verifica si el servidor se inició correctamente.
- httpd_register_uri_handler(server, &api);: Registra la ruta /api en el servidor web.
printf("Error al iniciar servidor\n");
}
- Si el servidor no se inicia correctamente, imprime un mensaje de error.
5. Función app_main() - Punto de entrada del programa
void app_main(void)
{
- app_main() es la función principal en aplicaciones ESP-IDF (similar a main() en C estándar).
nvs_flash_init();
esp_netif_init();
esp_event_loop_create_default();
- nvs_flash_init();: Inicializa la memoria No Volátil (NVS).
- esp_netif_init();: Inicializa la interfaz de red del ESP32.
- esp_event_loop_create_default();: Crea el bucle de eventos predeterminado del ESP32.
example_connect();
- example_connect();: Función predefinida que conecta el ESP32 a una red Wi-Fi usando la configuración de protocol_examples_common.h.
6. Obtener la dirección IP del ESP32
esp_netif_ip_info_t ip_info;
esp_netif_t* netif = NULL;
netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF");
- esp_netif_ip_info_t ip_info;: Declara una estructura para almacenar información de la IP.
- esp_netif_t* netif = NULL;: Puntero para manejar la interfaz de red.
- netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF");: Obtiene el identificador de la interfaz Wi-Fi configurada.
if (netif == NULL) {
printf("No hay interfaz\n");
} else {
- Si netif es NULL, significa que no hay una interfaz Wi-Fi disponible y se imprime un mensaje de error.
esp_netif_get_ip_info(netif, &ip_info);
printf("IP: %d.%d.%d.%d\n", IP2STR(&ip_info.ip));
- esp_netif_get_ip_info(netif, &ip_info);: Obtiene la información de la dirección IP asignada al ESP32.
- printf("IP: %d.%d.%d.%d\n", IP2STR(&ip_info.ip));: Imprime la dirección IP en formato legible.
web_server_init();
}
}
- web_server_init();: Llama a la función para iniciar el servidor web.