Skip to main content
ESPBoards

¿Puede el ESP32 Conectarse a Wi-Fi de 5GHz? Explorando Opciones de Conectividad Wi-Fi con ESP32.

Descubre si el ESP32 puede conectarse a Wi-Fi de 5GHz en esta guía completa. Conoce las limitaciones y beneficios de utilizar esta función en tu proyecto de IoT.


El ESP32 es una opción popular entre los desarrolladores al construir proyectos de IoT debido a sus impresionantes características, incluido un módulo Wi-Fi integrado. Sin embargo, una pregunta frecuente es si el ESP32 puede conectarse a una red Wi-Fi de 5GHz. En esta publicación del blog, examinaremos este tema en detalle y te proporcionaremos respuestas concretas. Pero primero, echemos un vistazo rápido al módulo Wi-Fi del ESP32 y sus capacidades.

Comprendiendo las Diferencias entre WiFi de 5GHz y 2.4GHz #

Wi-Fi de 5 GHz es un protocolo de comunicación inalámbrica que opera en la banda de frecuencia de 5 GHz. Esta banda ofrece velocidades de transferencia de datos más rápidas y menos interferencias que la banda de 2.4 GHz, que es más común. La banda de 5 GHz ofrece más canales disponibles y menos congestión, lo que resulta en un mejor rendimiento y confiabilidad, especialmente en entornos abarrotados o congestionados. Sin embargo, el rango puede ser limitado en comparación con las señales de 2.4 GHz, ya que las señales de 5 GHz suelen tener más dificultades para penetrar objetos sólidos como paredes y pisos. Conocer la diferencia entre Wi-Fi de 5 GHz y 2.4 GHz es importante al elegir el dispositivo inalámbrico adecuado para tus necesidades.

Understanding the WiFi Capabilities and Limitations of the ESP32 Microcontroller #

El Wi-Fi de 5 GHz no solo tiene canales más amplios, sino también más canales, lo que permite tasas de transferencia de datos más rápidas. En general, puedes esperar velocidades máximas más altas de una red de 5 GHz. Además, dado que la mayoría de los dispositivos actuales utilizan Wi-Fi de 2.4 GHz, puedes esperar menor congestión en una red de 5 GHz.

Sin embargo, hay algunas limitaciones. El soporte de Wi-Fi de 5 GHz del ESP32 no es tan robusto como su contraparte de 2.4 GHz. Esto se debe a que la banda de frecuencia de 5 GHz tiene un ancho de banda bajo y es fácilmente bloqueada por obstáculos como paredes y muebles. Esto significa que el ESP32 puede conectarse técnicamente a una red Wi-Fi de 5 GHz, pero no siempre es la mejor opción para proyectos que requieren conexiones de larga distancia o de alta capacidad.

No todas las placas ESP32 son iguales en lo que respecta al soporte de Wi-Fi. El rendimiento del Wi-Fi puede ser mejor o peor dependiendo de ciertas especificaciones de hardware de la placa. Por lo tanto, es importante investigar y elegir una placa de desarrollo ESP32 que se adapte a tus necesidades específicas.

En resumen, aunque el 5 GHz suena prometedor y beneficioso, hay algunas limitaciones y consideraciones que tener en cuenta cuando el ESP32 puede conectarse a una red Wi-Fi de 5 GHz.

Dependiendo de las necesidades de tu proyecto, podría ser mejor ceñirse a la conexión de 2.4 GHz o elegir un microcontrolador diferente por completo.

¿El ESP32 Soporta Wi-Fi de 5GHz? #

Ahora que conocemos las ventajas y desventajas del Wi-Fi de 5 GHz, y a pesar de las desventajas, aún puede ser una mejor opción para tu próximo proyecto. Entonces, la pregunta ahora es: ¿puede el ESP32 conectarse a Wi-Fi de 5 GHz? Y la respuesta no es tan sencilla... Si tienes un ESP32 más antiguo, como el original ESP32, el ESP32S2 o, desafortunadamente, no podrás utilizar los beneficios del Wi-Fi de 5 GHz.

Incluso las versiones más nuevas de ESP32, como el ESP32C3 o el ESP32C6, que fue lanzado en abril de 2021 y proporciona capacidades de Wi-Fi 6, no admiten Wi-Fi de 5 GHz.

¡Pero no todo está perdido para el ESP32! En junio de 2022, Espressif anunció el lanzamiento de un sucesor de los anteriormente mencionados ESP32C6, El ESP32C5, que admite Wi-Fi de doble banda de 2.4 GHz y sí, Wi-Fi de 5 GHz. El ESP32-C5 viene con Wi-Fi de doble banda 6 (802.11ax) y aún tiene la compatibilidad hacia atrás con 802.11b/g/n.

Como puedes ver, el Wi-Fi de 5 GHz para las placas ESP solo se introdujo en las versiones más recientes; por lo tanto, como puedes imaginar, el ESP8266 no admite 5 GHz.

Conectando el ESP32 a Wi-Fi de 5GHz: Guía Paso a Paso, Ejemplos de Código y Consejos de Solución de Problemas #

Si ahora te estás preguntando cómo conectar el ESP32 a una red Wi-Fi de 5GHz, entonces tienes suerte. Aquí tienes una guía paso a paso para comenzar.

Antes de sumergirte en el código, asegúrate de que el microcontrolador ESP32 que tienes admite Wi-Fi de 5 GHz 6 con los siguientes pasos:

  • Verifica la capacidad Wi-Fi del ESP32: Antes de intentar conectarte a una red de 5GHz, es importante confirmar que el ESP32 admite esta banda de frecuencia.

  • Actualización de firmware: Asegúrate de tener el firmware más reciente instalado en tu ESP32, ya que esto puede afectar la compatibilidad con redes Wi-Fi de 5GHz.

  • Configuración del ESP32: El ESP32 debe configurarse para conectarse a una red Wi-Fi de 5 GHz. Esto se puede hacer utilizando los ejemplos de código a continuación.

  • Verifica la conexión: Después de configurar el ESP32, verifica la conexión para asegurarte de que esté funcionando correctamente.

Para ayudarte a comenzar, a continuación te guiaremos paso a paso para conectar nuestro ESP32 C5 a Wi-Fi de 5 GHz. Suponemos que tienes tu entorno de desarrollo listo para trabajar con microcontroladores ESP32, específicamente el ESP32-C5, y que has instalado las bibliotecas ESP-IDF, que proporcionan API de Wi-Fi y API de registro de ESP para propósitos de depuración.

  1. Incluye los encabezados requeridos
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_mac.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "nvs_flash.h"

#include "lwip/err.h"
#include "lwip/sys.h"
  1. Define tu SSID de WiFi y la contraseña a la que se conectará el ESP.
#define EXAMPLE_ESP_WIFI_SSID      "YOUR_SSID"
#define EXAMPLE_ESP_WIFI_PASS "YOUR_PASSWORD"
#define EXAMPLE_ESP_WIFI_CHANNEL 36
#define EXAMPLE_MAX_STA_CONN 4

Asegúrate de cambiar "YOUR_SSID" y "YOUR_PASSWORD" con las credenciales de tu red WiFi. Si deseas aprovechar los beneficios de 5 GHz, asegúrate de que el ESP32 esté conectado a WiFi de 5 GHz y establece EXAMPLE_ESP_WIFI_CHANNEL al canal utilizado con WiFi de 5 GHz.

En la mayoría de los países, el rango de frecuencia de WiFi de 5 GHz está dividido en múltiples canales no superpuestos, que se utilizan para redes inalámbricas. Estos son algunos números de canales comunes de WiFi de 5 GHz: Canal 36 (5180 MHz), Canal 40 (5200 MHz), Canal 44 (5220 MHz), Canal 48 (5240 MHz), Canal 52 (5260 MHz), Canal 56 (5280 MHz), ..., Canal 161 (5805 MHz), Canal 165 (5825 MHz).

Estos son solo algunos de los números de canales disponibles para 5 GHz y generalmente hay más. Ten en cuenta que la disponibilidad de canales puede variar dependiendo de las regulaciones de tu ubicación y del estándar de WiFi utilizado.

  1. Define el TAG para el registro de mensajes de WiFi
static const char *TAG = "wifi softAP";
  1. Define la función de callback para manejar los eventos de WiFi
static void wifi_event_handler(void* arg, esp_event_base_t event_base,
int32_t event_id, void* event_data)
{
if (event_id == WIFI_EVENT_AP_STACONNECTED) {
wifi_event_ap_staconnected_t* event = (wifi_event_ap_staconnected_t*) event_data;
ESP_LOGI(TAG, "station "MACSTR" join, AID=%d",
MAC2STR(event->mac), event->aid);
} else if (event_id == WIFI_EVENT_AP_STADISCONNECTED) {
wifi_event_ap_stadisconnected_t* event = (wifi_event_ap_stadisconnected_t*) event_data;
ESP_LOGI(TAG, "station "MACSTR" leave, AID=%d",
MAC2STR(event->mac), event->aid);
}
}

Esta función se llamará siempre que ocurra un evento de WiFi. Por ejemplo, al conectarse a la red o desconectarse de ella, al obtener una dirección IP, etc. La función registra los eventos utilizando la API de registro de ESP y toma las acciones apropiadas cuando ocurre un evento.

  1. A continuación, definimos la función utilizada para inicializar el WiFi en modo Soft AP
void wifi_init_softap(void)
{
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
esp_netif_create_default_wifi_ap();

wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));

ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
ESP_EVENT_ANY_ID,
&wifi_event_handler,
NULL,
NULL));

wifi_config_t wifi_config = {
.ap = {
.ssid = EXAMPLE_ESP_WIFI_SSID,
.ssid_len = strlen(EXAMPLE_ESP_WIFI_SSID),
.channel = EXAMPLE_ESP_WIFI_CHANNEL,
.password = EXAMPLE_ESP_WIFI_PASS,
.max_connection = EXAMPLE_MAX_STA_CONN,
#ifdef CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT
.authmode = WIFI_AUTH_WPA3_PSK,
.sae_pwe_h2e = WPA3_SAE_PWE_BOTH,
#else /* CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT */
.authmode = WIFI_AUTH_WPA2_PSK,
#endif
.pmf_cfg = {
.required = true,
},
},
};
if (strlen(EXAMPLE_ESP_WIFI_PASS) == 0) {
wifi_config.ap.authmode = WIFI_AUTH_OPEN;
}

ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP));
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &wifi_config));
ESP_ERROR_CHECK(esp_wifi_start());

ESP_LOGI(TAG, "wifi_init_softap finished. SSID:%s password:%s channel:%d",
EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS, EXAMPLE_ESP_WIFI_CHANNEL);
}

En esta función, primero inicializamos la interfaz de red usando la función esp_netif_init() y creamos un bucle de eventos predeterminado, utilizando la función esp_event_loop_create_default(). Luego, creamos un punto de acceso WiFi predeterminado utilizando la función esp_netif_create_default_wifi_ap().

A continuación, inicializamos la configuración de WiFi con configuraciones predeterminadas usando la función WIFI_INIT_CONFIG_DEFAULT() e inicializamos el módulo WiFi usando la función esp_wifi_init() con la configuración previamente establecida.

Luego, registramos un controlador de eventos de WiFi utilizando la función esp_event_handler_instance_register() para manejar cualquier evento de WiFi que pueda ocurrir y lo configuramos para usar la función wifi_event_handler(), que definimos en el paso anterior.

La estructura wifi_config_t se utiliza para configurar el punto de acceso WiFi con el SSID, la contraseña, el canal, el número máximo de conexiones y el modo de autenticación deseados. Aquí configuramos el WiFi para el canal de 5 GHz.

Finalmente, establecemos el modo de WiFi en modo punto de acceso usando la función esp_wifi_set_mode() y configuramos la configuración del punto de acceso utilizando la función esp_wifi_set_config() con el parámetro WIFI_IF_AP. Por último, el punto de acceso se inicia usando la función esp_wifi_start().

Si la conexión a la red WiFi es exitosa, deberías ver información sobre el SSID, la contraseña y el canal en el Monitor Serial.

  1. A continuación, definiremos la función principal de la aplicación app_main()
void app_main(void)
{

}
  1. Dentro de la función app_main(), inicializa el NVS Flash, necesario para WiFi, y llama a la función wifi_init_softap(), que definimos anteriormente.

Con este ejemplo de código, deberías poder conectarte a la red WiFi de 5 GHz. Si aún te preguntas cómo configuramos nuestro ESP32-C5 para conectarse a WiFi de 5 GHz, lo especificamos implícitamente a través de la selección del canal Wi-Fi. Al conectarse a una red Wi-Fi, el módulo ESP32-C5 escaneará automáticamente los canales disponibles y seleccionará el que coincida con la configuración de la red Wi-Fi.

Cuando el módulo ESP32-C5 se conecta a la red Wi-Fi, escaneará los canales que admiten estas configuraciones y seleccionará el apropiado en función de los canales disponibles y la intensidad de la señal. Esto debería resultar en una conexión a una red Wi-Fi de 5 GHz, siempre que una esté disponible y la configuración de la red sea correcta.

Ejemplo completo #

Si confías en ti mismo sin las explicaciones del código y prefieres sumergirte directamente en el código completo, aquí tienes el código completo del ejemplo anterior:

#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_mac.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "nvs_flash.h"

#include "lwip/err.h"
#include "lwip/sys.h"

#define EXAMPLE_ESP_WIFI_SSID YOUR_SSID
#define EXAMPLE_ESP_WIFI_PASS YOUR_PASSWORD
#define EXAMPLE_ESP_WIFI_CHANNEL 36
#define EXAMPLE_MAX_STA_CONN 4

static const char *TAG = "wifi softAP";

static void wifi_event_handler(void* arg, esp_event_base_t event_base,
int32_t event_id, void* event_data)
{
if (event_id == WIFI_EVENT_AP_STACONNECTED) {
wifi_event_ap_staconnected_t* event = (wifi_event_ap_staconnected_t*) event_data;
ESP_LOGI(TAG, "station "MACSTR" join, AID=%d",
MAC2STR(event->mac), event->aid);
} else if (event_id == WIFI_EVENT_AP_STADISCONNECTED) {
wifi_event_ap_stadisconnected_t* event = (wifi_event_ap_stadisconnected_t*) event_data;
ESP_LOGI(TAG, "station "MACSTR" leave, AID=%d",
MAC2STR(event->mac), event->aid);
}
}

void wifi_init_softap(void)
{
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
esp_netif_create_default_wifi_ap();

wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));

ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
ESP_EVENT_ANY_ID,
&wifi_event_handler,
NULL,
NULL));

wifi_config_t wifi_config = {
.ap = {
.ssid = EXAMPLE_ESP_WIFI_SSID,
.ssid_len = strlen(EXAMPLE_ESP_WIFI_SSID),
.channel = EXAMPLE_ESP_WIFI_CHANNEL,
.password = EXAMPLE_ESP_WIFI_PASS,
.max_connection = EXAMPLE_MAX_STA_CONN,
#ifdef CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT
.authmode = WIFI_AUTH_WPA3_PSK,
.sae_pwe_h2e = WPA3_SAE_PWE_BOTH,
#else /* CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT */
.authmode = WIFI_AUTH_WPA2_PSK,
#endif
.pmf_cfg = {
.required = true,
},
},
};
if (strlen(EXAMPLE_ESP_WIFI_PASS) == 0) {
wifi_config.ap.authmode = WIFI_AUTH_OPEN;
}

ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP));
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &wifi_config));
ESP_ERROR_CHECK(esp_wifi_start());

ESP_LOGI(TAG, "wifi_init_softap finished. SSID:%s password:%s channel:%d",
EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS, EXAMPLE_ESP_WIFI_CHANNEL);
}

void app_main(void)
{
//Initialize NVS
esp_err_t ret = nvs_flash_init();
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);

ESP_LOGI(TAG, "ESP_WIFI_MODE_AP");
wifi_init_softap();
}

En caso de que necesites algunas explicaciones, no dudes en volver a la sección anterior, donde encontrarás instrucciones paso a paso.

Solución de problemas de la conexión WiFi de 5 GHz del ESP32 #

Aquí hay algunos consejos de solución de problemas si encuentras problemas durante el proceso de conexión.

  • Verifica nuevamente la lista que proporcionamos para asegurarte de que tu ESP32 sea capaz de conectarse a WiFi de 5 GHz.
  • Revisa que tus configuraciones sean correctas.
  • Acerca el ESP32 a un enrutador o punto de acceso para asegurar una señal fuerte.
  • Asegúrate de que tu red WiFi de 5 GHz no esté oculta o configurada en un canal no estándar.

Si aún tienes problemas, asegúrate de consultar los recursos relevantes:

¿Puedes usar Arduino Core para conectarte a WiFi de 5 GHz? #

Desafortunadamente, como siempre, la biblioteca Arduino Core está un poco rezagada y actualmente no soporta la placa ESP32-C5, lo que significa que no puedes aprovechar los beneficios de 5 GHz con tu placa ESP32 utilizando Arduino Core. Esperamos que Espressif lance el soporte para el microcontrolador ESP32-C5 en Arduino Core, pero por ahora, solo tienes que esperar o usar ESP-IDF, si realmente necesitas que tu proyecto soporte WiFi de 5 GHz.

Si decides que tu proyecto debe soportar WiFi de 5 GHz y, por lo tanto, decides usar ESP-IDF, puedes consultar nuestra guía sobre cómo empezar con ESP-IDF, usando Visual Studio Code.

Si estás familiarizado con la programación en Arduino, ya conoces el lenguaje de programación C, por lo que el cambio a ESP-IDF no debería ser muy difícil. Lo más importante que debes recordar, si decides hacer el cambio, es que en el marco ESP-IDF no existe la función setup como en el IDE de Arduino.

En su lugar, la función app_main es el punto de entrada para el programa y es llamada automáticamente por el sistema cuando se inicia el dispositivo. Toda la configuración y preparación necesarias para la aplicación deben hacerse en la función app_main o ser llamadas por ella, como se muestra en el código de ejemplo.

Esto se debe a que el ESP32 es un sistema embebido, y la función app_main es el equivalente de la función main en un programa C regular. Es la primera función que se ejecuta cuando el dispositivo se enciende o se reinicia, y es responsable de inicializar el sistema, configurar los periféricos y comenzar el bucle principal del programa.

Resumen: Conectando el ESP32 a WiFi de 5 GHz y Consideraciones #

Después de explorar el tema de conectar el ESP32 a WiFi de 5 GHz, encontramos que el ESP32 soporta WiFi de 5 GHz y hay varios factores a considerar antes de decidir usarlo.

Hemos discutido las diferencias entre WiFi de 5 GHz y 2.4 GHz en las características de Wi-Fi de los ESP32 y proporcionado una guía paso a paso para conectar el ESP32 a una red de 5 GHz. También exploramos los pros y los contras de usar WiFi de 5 GHz con el ESP32.

Finalmente, es importante considerar las necesidades específicas del proyecto antes de decidir usar WiFi de 5 GHz con el ESP32. Si el rango y el consumo de energía no son factores importantes y necesitas altas tasas de datos, WiFi de 5 GHz puede ser una buena elección. Sin embargo, si el rango y el consumo de energía son importantes, puede ser mejor ceñirse a la banda de 2.4 GHz. La mejor opción, en última instancia, depende de las necesidades específicas de tu proyecto.

Recursos adicionales #

Además de los recursos mencionados en el artículo, hay algunos recursos adicionales para leer más sobre el tema de conectar el ESP32 a WiFi de 5 GHz:

Explorar estos recursos puede proporcionar una comprensión más profunda de las capacidades de Wi-Fi del ESP32 y cómo conectarse a una red de 5 GHz, así como aprender técnicas avanzadas para trabajar con el ESP32.