Conectando nuestra tarjeta de desarrollo a una red Wi-Fi
Requisitos previos
Antes de comenzar, asegúrate de contar con lo siguiente:
-
Un Access Point o dispositivo de red con conexión Wi-Fi.
-
El SSID (nombre de la red) y la contraseña para acceder a la red.
-
Una tarjeta de desarrollo compatible con ESP-IDF, que ya incluye todo lo necesario para conectarse a una red Wi-Fi sin necesidad de dispositivos adicionales.
Preparación del entorno
Trabajaremos en Visual Studio Code. En este punto, ya deberíamos tener un proyecto creado y haber realizado la primera compilación.
Inclusión de librerías necesarias
1. Conexión a la red Wi-Fi
#include "esp_wifi.h"
Esta librería nos permitirá gestionar la conexión a la red Wi-Fi en nuestra tarjeta de desarrollo.
2. Almacenamiento de credenciales
#include "nvs_flash.h"
Esta función permite la reconexión automática sin necesidad de ingresar nuevamente las credenciales.
3. Uso de la librería protocol_examples_common.h
Para simplificar la conexión Wi-Fi, utilizaremos una librería de ejemplo proporcionada por ESP-IDF:
#include "protocol_examples_common.h"
Agregar la librería al proyecto
3.1 Incluir la librería en CMakeLists.txt
set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
3.2 Explicación del código
-
set(EXTRA_COMPONENT_DIRS ...) → Define un directorio de componentes adicionales.
-
$ENV{IDF_PATH} → Ubicación donde está instalado el ESP-IDF.
-
examples/common_components/protocol_examples_common → Contiene la librería protocol_examples_common.h.
3.3 Verificación y exploración
Si deseas entender cómo funciona esta librería:
-
Ve al directorio especificado.
-
Explora el código fuente.
Importación en nuestro código C
#include "protocol_examples_common.h"
Explicación del código en app_main(void)
Código de la función app_main(void)
void app_main(void)
{
nvs_flash_init();
esp_netif_init();
esp_event_loop_create_default();
example_connect();
esp_netif_ip_info_t ip_info;
esp_netif_t* netif = NULL;
netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF");
}
1. Inicialización del almacenamiento no volátil (NVS)
nvs_flash_init();
Permite guardar el SSID y la contraseña de la red Wi-Fi.
2. Inicialización de la interfaz de red
esp_netif_init();
Permite que el dispositivo maneje conexiones de red.
3. Creación del event loop
esp_event_loop_create_default();
Un event loop es un sistema que maneja eventos de conexión y desconexión.
4. Establecimiento de la conexión Wi-Fi
example_connect();
Facilita la conexión sin necesidad de programar manualmente los eventos de Wi-Fi.
5. Preparación para obtener la dirección IP
5.1 Declaración de una variable para almacenar la IP
esp_netif_ip_info_t ip_info;
5.2 Creación de una variable para la interfaz de red
esp_netif_t* netif = NULL;
5.3 Obtener la interfaz de red Wi-Fi
netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF");
Accede a la interfaz de red en modo estación.
Verificación de la conexión Wi-Fi y obtención de la dirección IP
1. Verificación de la conexión
if (netif == NULL) {
printf("No hay interfaz\n");
} else {
esp_netif_get_ip_info(netif, &ip_info);
printf("IP: %d.%d.%d.%d\n", IP2STR(&ip_info.ip));
}
Si netif == NULL, significa que no se obtuvo una interfaz de red. Si la conexión es exitosa, se imprime la dirección IP.
2. Conversión de la IP a formato de texto
IP2STR
Convierte la estructura de IP en una cadena legible.
Código final completo
#include <stdio.h>
#include "esp_wifi.h"
#include "nvs_flash.h"
#include "protocol_examples_common.h"
void app_main(void)
{
nvs_flash_init();
esp_netif_init();
esp_event_loop_create_default();
example_connect();
esp_netif_ip_info_t ip_info;
esp_netif_t* netif = NULL;
netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF");
if (netif == NULL) {
printf("No hay interfaz\n");
} else {
esp_netif_get_ip_info(netif, &ip_info);
printf("IP: %d.%d.%d.%d\n", IP2STR(&ip_info.ip));
}
}
🛠️ Ejemplo listo para ejecución
📡 Configuración de la red Wi-Fi
Ejecutamos:
idf.py menuconfig
Editamos el SSID y la contraseña, luego guardamos con S + Enter y salimos con Q.
🔨 Compilación del programa
idf.py build
🚀 Subida del programa a la tarjeta de desarrollo
idf.py -p COM6 flash
(Sustituye COM6 por el puerto correcto en tu sistema).
🔍 Verificación de la conexión en la terminal
idf.py -p COM6 monitor
La dirección IP se imprimirá en la terminal.
🎉 ¡Felicidades!
Has logrado: ✅ Configurar la red Wi-Fi en menuconfig. ✅ Compilar y cargar el programa en el ESP32. ✅ Verificar la conexión y obtener la dirección IP asignada.
🚀 Próximos pasos: