01 · Objetivo
Qué es Wi-Fi
«Wi-Fi» es una marca de la Wi-Fi Alliance, una asociación de fabricantes que certifica que los equipos de distintas marcas funcionan entre sí. La tecnología se define en la familia de normas IEEE 802.11, del mismo comité del IEEE que mantiene Ethernet (802.3). La relación no es casual: las dos usan el mismo formato de direcciones MAC de 48 bits y las dos entregan al nivel superior tramas que el protocolo IP puede usar sin saber qué hay debajo.
Lo que 802.11 define son dos capas: la capa física (PHY: bandas, canales, modulaciones, velocidades) y la subcapa de acceso al medio (MAC: cómo se comparte el aire, cómo se confirman las tramas, cómo se asocia un equipo a la red, cómo se cifra). Por arriba sigue lo conocido:
| Capa | En Ethernet (tema 33) | En Wi-Fi |
|---|---|---|
| Aplicación | HTTP, MQTT | Igual |
| Transporte | TCP, UDP | Igual |
| Red | IP, ARP, DHCP | Igual (DHCP se hace después de asociarse) |
| Enlace (MAC) | 802.3: sin colisiones en conmutadores full duplex | 802.11: medio compartido, CSMA/CA, confirmación de cada trama, asociación y cifrado |
| Física | Cable de par trenzado | Radio en 2,4, 5 o 6 GHz con modulación OFDM |
Para un dispositivo embebido, Wi-Fi es la forma más directa de llegar a Internet: ya hay red en casi todos lados, no hace falta cable y los módulos (como el ESP32) cuestan pocos dólares. A cambio es la tecnología de mayor consumo de las inalámbricas del curso (tema 34) y su conexión es la más lenta de establecer, algo que se verá en los números del laboratorio.
02 · Generaciones
Los estándares 802.11
802.11 nació en 1997 con 1 y 2 Mbit/s y fue creciendo con enmiendas identificadas por una letra. Desde 2018, la Wi-Fi Alliance también numera las generaciones para el público: Wi-Fi 4 es 802.11n, Wi-Fi 5 es 802.11ac, Wi-Fi 6 es 802.11ax y Wi-Fi 7 es 802.11be.
| Estándar | Año | Banda | Ancho del canal | Modulación máxima | Velocidad máxima |
|---|---|---|---|---|---|
| 802.11b | 1999 | 2,4 GHz | 22 MHz | DSSS / CCK | 11 Mbit/s |
| 802.11a | 1999 | 5 GHz | 20 MHz | OFDM, 64-QAM | 54 Mbit/s |
| 802.11g | 2003 | 2,4 GHz | 20 MHz | OFDM, 64-QAM | 54 Mbit/s |
| 802.11n (Wi-Fi 4) | 2009 | 2,4 y 5 GHz | 20 o 40 MHz | OFDM, 64-QAM, MIMO hasta 4 flujos | 600 Mbit/s |
| 802.11ac (Wi-Fi 5) | 2013 | 5 GHz | 20 a 160 MHz | 256-QAM, MIMO multiusuario | ≈ 6,9 Gbit/s |
| 802.11ax (Wi-Fi 6 y 6E) | 2021 | 2,4, 5 y 6 GHz | 20 a 160 MHz | 1024-QAM, OFDMA | ≈ 9,6 Gbit/s |
| 802.11be (Wi-Fi 7) | 2024 | 2,4, 5 y 6 GHz | hasta 320 MHz | 4096-QAM, varios enlaces a la vez | ≈ 46 Gbit/s |
Cada generación suma casi lo mismo, aplicando las ideas del tema 34: más ancho de banda (canales de 20 a 320 MHz), modulaciones más densas (de 64-QAM a 4096-QAM, que exigen más relación señal/ruido), más flujos espaciales (MIMO: varias antenas transmiten datos distintos en el mismo canal) y mejor reparto del tiempo (OFDMA en Wi-Fi 6, que permite atender a varios clientes en la misma transmisión). Wi-Fi 6 agrega además el Target Wake Time, que programa cuándo despierta cada dispositivo y está pensado para IoT de bajo consumo.
Compatibilidad y velocidad
Los estándares son compatibles hacia atrás: un punto de acceso 802.11n atiende a un cliente 802.11g. Pero la compatibilidad tiene un costo para todos. Un cliente lento ocupa el aire más tiempo: una trama de 1500 bytes dura 12 ms a 1 Mbit/s y solo 0,22 ms a 54 Mbit/s, y mientras una trama está en el aire nadie más habla. Una sola estación antigua o lejana, con baja velocidad, puede reducir el rendimiento de toda la red. La presencia de equipos 802.11b además obliga a los demás a usar mecanismos de protección que añaden mensajes. Por eso muchos routers permiten desactivar las velocidades más bajas.
| Módulo | Estándares | Banda | Notas |
|---|---|---|---|
| ESP8266 | b/g/n | 2,4 GHz | Un flujo, 20 MHz: hasta 72 Mbit/s en la capa física |
| ESP32, ESP32-S2, ESP32-S3, ESP32-C3 | b/g/n | 2,4 GHz | Un flujo, 20 o 40 MHz: hasta 150 Mbit/s de la capa física |
| ESP32-C6 | b/g/n y ax (Wi-Fi 6) | 2,4 GHz | Agrega Target Wake Time para ahorrar energía |
| ESP32-C5 | b/g/n y ax | 2,4 y 5 GHz | Primer ESP32 de doble banda |
| Arduino UNO R4 WiFi, Raspberry Pi Pico W | b/g/n | 2,4 GHz | Con un ESP32-S3 y un módulo Infineon como coprocesadores de red, respectivamente |
Para una aplicación de sensores, todo esto es más que suficiente: un nodo que envía 100 bytes cada 30 segundos no usa más que una parte ínfima de los 20 Mbit/s reales que ofrece un ESP32. Lo que decide la elección es la cobertura, el consumo y la facilidad de conexión a la red existente, no la velocidad.
03 · Quién es quién
Estaciones, puntos de acceso y redes
Los términos de 802.11 aparecen en cada configuración, y conviene distinguirlos:
- Estación (STA): cualquier dispositivo con radio Wi-Fi que se conecta a una red: un teléfono, una laptop, un ESP32 en modo cliente.
- Punto de acceso (AP): el equipo que crea la red, anuncia su presencia y reenvía el tráfico entre las estaciones y la red cableada. El «router Wi-Fi» de una casa combina un punto de acceso, un conmutador, un router IP con NAT y un servidor DHCP.
- BSS (Basic Service Set): un punto de acceso con sus estaciones asociadas, es decir, una «celda». Se identifica por el BSSID, que es la dirección MAC de la radio del punto de acceso (48 bits).
- SSID (Service Set Identifier): el nombre de la red, hasta 32 bytes (no caracteres: con UTF-8, una «ñ» ocupa dos). Es lo que ve el usuario. Muchos puntos de acceso pueden compartir el mismo SSID.
- ESS (Extended Service Set): varios BSS con el mismo SSID unidos por una red cableada. Una estación puede pasar de uno al otro (roaming) sin cambiar de red: lo decide la propia estación, según la señal.
- IBSS o ad hoc: estaciones que hablan entre sí sin punto de acceso. Es raro; las alternativas modernas son Wi-Fi Direct, las redes en malla (802.11s) y ESP-NOW (tema 39).
Una consecuencia importante del modo infraestructura: todo pasa por el punto de acceso, incluso la comunicación entre dos estaciones vecinas. Dos ESP32 en la misma red que se envían un mensaje usan el aire dos veces (de uno al AP y del AP al otro). Y algunos puntos de acceso tienen activado el aislamiento de clientes («AP isolation»), que impide directamente que las estaciones se comuniquen entre sí: un error típico de «no encuentro mi dispositivo desde la computadora» en redes de invitados.
Cada punto de acceso anuncia la red con una trama de baliza (beacon) cada 100 unidades de tiempo (1 TU = 1024 µs), o sea, cada 102,4 ms. La baliza contiene el SSID, las velocidades admitidas, el canal, el tipo de seguridad y un indicador de qué estaciones dormidas tienen datos pendientes. Las estaciones la usan para encontrar redes y, con ella, para sincronizar su reloj y despertarse a tiempo en el ahorro de energía (tema 36).
04 · El espectro compartido
Bandas y canales
En la banda de 2,4 GHz hay 13 canales (14 en Japón, solo para 802.11b), con los centros a 2407 + 5·n MHz. Pero cada señal ocupa 20 MHz (OFDM) o 22 MHz (802.11b), mucho más que los 5 MHz entre centros: casi todos los canales se solapan con sus vecinos. Solo se pueden usar tres sin solape a 22 MHz: el 1, el 6 y el 11. En regiones con los 13 canales y redes OFDM de 20 MHz también caben cuatro: 1, 5, 9 y 13. En Estados Unidos solo están permitidos los canales 1 a 11.
Estar en un canal ocupado puede significar dos cosas distintas, y no son igual de graves:
- Mismo canal (co-canal). Los equipos de las dos redes se escuchan como Wi-Fi y aplican CSMA/CA: esperan su turno y se reparten el tiempo. El rendimiento baja, pero de forma ordenada.
- Canales vecinos con solape parcial. Cada red oye a la otra como ruido, que no puede decodificar ni evitar, y las tramas se corrompen y se reintentan. Suele ser peor que compartir el mismo canal.
Por eso la regla es elegir 1, 6 u 11, o dejar que el router escoja el canal menos ocupado. Y por eso el uso de canales de 40 MHz en 2,4 GHz, que ocupan casi la mitad de la banda, es poco recomendable en un lugar con muchas redes.
| Banda | Canales de 20 MHz | Características | Dispositivos IoT |
|---|---|---|---|
| 2,4 GHz | 13 (3 sin solape) | Mayor alcance y mejor paso de paredes; muy congestionada (Bluetooth, Zigbee, microondas) | Casi todos: ESP8266, ESP32, Pico W |
| 5 GHz | Decenas, según el país; casi todos sin solape | Más velocidad y menos tráfico, pero menor alcance; algunas sub-bandas exigen evitar radares (DFS) | Pocos: ESP32-C5 y módulos más caros |
| 6 GHz | Hasta 59 | Banda nueva y despejada (Wi-Fi 6E y 7); alcance aún menor | Prácticamente ninguno |
Un detalle práctico muy frecuente: un router de doble banda suele emitir el mismo SSID en 2,4 y 5 GHz, y a veces empuja a los clientes hacia 5 GHz («band steering»). Un ESP32 que solo sabe de 2,4 GHz puede no encontrar la red si el router, mal configurado, no la emite en esa banda. Por eso muchos fabricantes recomiendan crear un SSID separado para 2,4 GHz destinado a los dispositivos de domótica.
El ESP32 tiene una sola radio. Cuando trabaja a la vez como estación y como punto de acceso (modo AP+STA), la radio solo puede estar en un canal, así que el canal del punto de acceso se fuerza al del router al que está conectado. Si el router cambia de canal, la red propia del ESP32 se mueve con él.
05 · El diálogo
Cómo se conecta un dispositivo
Cuando se llama a WiFi.begin() ocurre, en pocos cientos de milisegundos y a veces un par de segundos, una secuencia fija de intercambios:
- Descubrimiento (escaneo). La estación busca redes. En el escaneo pasivo escucha cada canal esperando balizas (hasta 100 ms por canal, o más). En el escaneo activo envía una solicitud de sondeo (probe request) y los puntos de acceso responden con una respuesta de sondeo. Las redes con SSID oculto no incluyen su nombre en la baliza y solo contestan a un sondeo que lo nombre: ocultar el SSID no es una medida de seguridad y complica la conexión de los dispositivos.
- Autenticación (open system). Dos tramas sin contenido criptográfico, un vestigio de WEP: la estación pide y el punto de acceso acepta. La verdadera autenticación llega después, en el paso 4.
- Asociación. La estación envía una solicitud con sus capacidades y velocidades; el punto de acceso responde con un identificador de asociación (AID). Desde aquí la estación pertenece al BSS.
- Negociación de claves (WPA2/WPA3). Un intercambio de cuatro mensajes EAPOL, el handshake de cuatro vías, comprueba que los dos conocen la clave sin enviarla y deriva las claves de cifrado de la sesión.
- Configuración IP. La estación pide dirección con DHCP (Discover, Offer, Request, Acknowledge, tema 30), con una IP, máscara, puerta de enlace y servidor DNS. Con IP estática este paso se omite.
- Datos. Ya puede hablar IP, TCP y MQTT. Cada trama de datos unicast tiene una confirmación (ACK) de la capa MAC y, si no llega, se retransmite antes de que TCP se entere.
La desconexión es el camino inverso: el punto de acceso o la estación envían una trama de desautenticación o de desasociación, o simplemente la estación deja de oír balizas durante un tiempo (en el ESP32, el motivo BEACON_TIMEOUT). Las tramas de gestión del estándar original no van cifradas: un tercero puede falsificar una desautenticación y expulsar a un cliente. WPA3 y la enmienda 802.11w (Protected Management Frames) lo corrigen.
Tiempo y energía de la conexión
El escaneo es lo que más tarda. Recorrer 13 canales a unos 120 ms por canal son 1,5 segundos, más 40 ms de asociación, unos 100 ms del handshake y unos 500 ms de DHCP: del orden de 2 segundos con la radio de 100 mA o más encendida. Para un nodo que se conecta cada pocos minutos, esa conexión puede consumir más energía que todo el resto del ciclo. Hay dos atajos:
- Conexión rápida. Si el dispositivo guarda el canal y el BSSID de la última vez (por ejemplo, en memoria RTC, que sobrevive al sueño profundo), puede llamar a
WiFi.begin(ssid, clave, canal, bssid)y saltarse el escaneo. - IP estática con
WiFi.config(): evita el intercambio DHCP, que a veces tarda más que todo lo anterior. A cambio hay que administrar las direcciones a mano y no colisionar con las que reparte el router (idealmente, una reserva en el DHCP por MAC).
La herramienta 4 del laboratorio calcula cuánto se gana: con valores razonables, la conexión rápida reduce el tiempo y la energía en casi tres cuartos. El tema 36 retoma esto junto con la reconexión y el sueño profundo.
06 · Que no escuche cualquiera
Seguridad: de WEP a WPA3
En una red cableada hace falta acceso físico al cable. En Wi-Fi basta con estar dentro del alcance: cualquiera puede escuchar todas las tramas del aire, y también inyectar las suyas. La única barrera es el cifrado y la autenticación, y su historia es una sucesión de correcciones:
| Protocolo | Cifrado | Estado | Comentario |
|---|---|---|---|
| Abierta | Ninguno | Solo para pruebas o con una capa superior (VPN, HTTPS) | Todo el tráfico es legible para cualquiera cercano |
| WEP | RC4 con vector de 24 bits | Roto desde 2001; no usar | Se recupera la clave en minutos con herramientas públicas |
| WPA (TKIP) | RC4 con mezcla de claves | Obsoleto | Parche transitorio para el hardware de WEP |
| WPA2-Personal (PSK) | AES-CCMP | Vigente y el más extendido | Una clave compartida; vulnerable a ataques de diccionario offline si la clave es débil |
| WPA2/WPA3-Enterprise | AES; autenticación 802.1X con usuario y certificado | Vigente en empresas | Credenciales individuales; requiere un servidor RADIUS |
| WPA3-Personal (SAE) | AES-CCMP o GCMP | Actual | Intercambio de claves resistente al ataque de diccionario offline; protege las tramas de gestión |
En WPA2-Personal la clave de la red no se usa directamente. Con la frase de acceso (8 a 63 caracteres) y el SSID se calcula una clave maestra de 256 bits con la función PBKDF2: PMK = PBKDF2-HMAC-SHA1(frase, SSID, 4096 vueltas, 256 bits). Dos consecuencias:
- El SSID es la «sal»: la misma frase en dos redes con nombres distintos produce claves maestras distintas (el modelo de Python lo muestra con el vector de prueba del estándar). Y por eso las tablas precalculadas se hacen por nombre de red, lo que vuelve peligrosos los SSID comunes como «linksys» o «default».
- El ataque de diccionario es posible fuera de línea. Quien capture el handshake de cuatro vías (basta con estar cerca cuando un dispositivo se conecta) puede probar frases en su propia computadora, sin tocar la red. Las 4096 vueltas lo frenan, pero con 8 letras minúsculas hay 268 ≈ 2,1 × 1011 combinaciones, y a un millón de pruebas por segundo se agotan en unos 2,4 días; con 12 letras al azar harían falta unos 3000 años. La longitud y el azar de la clave son la defensa.
El handshake de cuatro vías no envía la clave: cada lado manda un número aleatorio (nonce), los dos calculan la clave de sesión (PTK) a partir de la clave maestra, los nonces y las direcciones MAC, y se demuestran mutuamente que la tienen. La clave de sesión es distinta para cada estación y cada conexión.
WPA3-SAE (Simultaneous Authentication of Equals) reemplaza el handshake de claves previamente compartidas por un intercambio de tipo Diffie-Hellman con contraseña: el atacante que captura el diálogo ya no puede probar frases fuera de línea (cada intento exige hablar con la red), y las claves pasadas no se pueden descifrar aunque más tarde se filtre la contraseña. Las versiones recientes del firmware del ESP32 lo soportan, y muchas redes domésticas funcionan en modo mixto WPA2/WPA3. El tema 36 retoma las buenas prácticas del lado del dispositivo y el tema 49 trata el cifrado de extremo a extremo con TLS, que sigue siendo necesario porque el cifrado de Wi-Fi solo protege el tramo del aire, no el viaje hasta el servidor.
07 · Modos de trabajo
El ESP32 como estación y como punto de acceso
La biblioteca WiFi del ESP32 maneja tres modos:
| Modo | Qué hace | Cuándo se usa |
|---|---|---|
WIFI_STA | Se conecta a un punto de acceso existente y obtiene una IP por DHCP | El caso normal: un dispositivo en la red de la casa o la planta |
WIFI_AP | Crea su propia red; otros equipos se asocian a él y reciben una IP de su DHCP | Configurar el dispositivo desde el teléfono, control directo sin router, sitios sin infraestructura |
WIFI_AP_STA | Las dos cosas a la vez, en el mismo canal | Repetidores sencillos, aprovisionamiento mientras sigue conectado |
WIFI_OFF | Radio apagada | Ahorro de energía |
En modo estación, el ESP32 es un cliente más. Las funciones útiles son:
| Función | Para qué sirve |
|---|---|
WiFi.mode(WIFI_STA) | Elige el modo de la radio |
WiFi.begin(ssid, clave) | Inicia la conexión; devuelve enseguida y sigue en segundo plano |
WiFi.begin(ssid, clave, canal, bssid) | Conexión rápida: salta el escaneo |
WiFi.status() | Estado: WL_CONNECTED, WL_NO_SSID_AVAIL, WL_CONNECT_FAILED, WL_DISCONNECTED… |
WiFi.localIP(), subnetMask(), gatewayIP(), dnsIP() | Los datos que entregó el DHCP |
WiFi.config(ip, puerta, máscara, dns) | IP estática (antes de begin) |
WiFi.RSSI(), WiFi.channel(), WiFi.BSSIDstr() | Señal, canal y punto de acceso actuales |
WiFi.macAddress() | Dirección MAC de la estación |
WiFi.setHostname(nombre) | Nombre que ve el router (antes de begin) |
WiFi.onEvent(función) | Aviso de eventos: asociado, IP obtenida, desconectado y su motivo |
WiFi.disconnect(true) | Se desconecta (y borra la configuración guardada) |
WiFi.setTxPower(…), WiFi.setSleep(…) | Potencia de salida (hasta ≈ 19,5 dBm) y ahorro de energía |
Importante: WiFi.begin() no espera. Retorna enseguida y el trabajo ocurre en una tarea del sistema; el programa tiene que mirar el estado (o recibir los eventos) para saber cuándo está listo, con un tiempo límite para no esperar para siempre. Lo mismo vale para la IP: la asociación termina antes de que llegue la respuesta del DHCP, y por eso WL_CONNECTED se informa cuando ya hay dirección.
En modo punto de acceso, el ESP32 anuncia un SSID, acepta hasta 10 clientes (4 por omisión) y les entrega direcciones de la red 192.168.4.0/24, quedándose él con la 192.168.4.1. No hace de router: no da acceso a Internet por sí mismo, solo una red local. La MAC del punto de acceso es distinta de la de la estación (suele diferir en el último byte). Es el mecanismo de los productos que se configuran desde el teléfono: la primera vez el dispositivo levanta su propia red, el usuario se conecta, entra a una página web, escribe el SSID y la clave de su casa, y el dispositivo los guarda y pasa a modo estación. Ese esquema se llama aprovisionamiento, y combinado con un portal cautivo (que redirige cualquier dirección a la página de configuración) es una experiencia de usuario muy cómoda.
08 · Cuando no conecta
Diagnóstico de conexiones
Una conexión que falla casi nunca es «un problema de Wi-Fi» en general: es una falla en una de las etapas de la sección 5, y el motivo se puede leer. En el ESP32, el evento de desconexión trae un código de motivo (info.wifi_sta_disconnected.reason en el sketch):
| Código | Nombre | Causas habituales |
|---|---|---|
| 201 | NO_AP_FOUND | El SSID está mal escrito (se distinguen mayúsculas, espacios finales), está fuera de alcance, solo se emite en 5 GHz, o el tipo de seguridad exigido no coincide |
| 202 | AUTH_FAIL | Clave incorrecta (con WPA3), o modo de seguridad no soportado |
| 15 y 204 | 4WAY_HANDSHAKE_TIMEOUT y HANDSHAKE_TIMEOUT | El handshake no termina: casi siempre es una clave WPA2 incorrecta; o señal muy débil |
| 203 | ASSOC_FAIL | El punto de acceso rechaza la asociación: lista de MAC permitidas, tabla de clientes llena, ancho de canal o estándar no soportado |
| 200 | BEACON_TIMEOUT | Se dejaron de oír balizas: el punto de acceso se apagó o la señal desapareció |
| 8 | ASSOC_LEAVE | El otro lado desasoció a la estación (el router la expulsó, o se reinició) |
| 2 | AUTH_EXPIRE | La autenticación venció: típicamente, señal pobre |
Otros problemas que no se ven como una desconexión sino como «conectado, pero no anda»:
- Sin IP o con una IP rara. El DHCP no responde (rango agotado, servidor caído) y el equipo queda con 0.0.0.0, o se usó una IP estática fuera de la subred o repetida (tema 30).
- Portal cautivo. Una red de hotel o de invitados exige aceptar condiciones en una página web: un dispositivo sin pantalla nunca llega a Internet.
- Aislamiento de clientes. Hay Internet pero los dispositivos de la misma red no se ven entre sí.
- Señal débil o ruido. Conecta, pero con muchas retransmisiones: la latencia sube y las conexiones TCP se cortan. Mirar RSSI (por debajo de −75 dBm empiezan los problemas) y probar otro canal.
Las herramientas del sistema muestran lo que ve la radio: en Windows, netsh wlan show networks mode=bssid lista las redes con sus canales y BSSID, y netsh wlan show interfaces da la señal y la velocidad del enlace actual; en Linux, nmcli dev wifi o iw dev wlan0 scan; en el teléfono, las aplicaciones de analizador de Wi-Fi dibujan los canales como en el diagrama de arriba. El escáner del ESP32 del tema 34 hace lo mismo desde el propio dispositivo. Para ver las tramas, Wireshark con una tarjeta en modo monitor captura balizas, sondeos, asociaciones y el handshake.
09 · Con el microcontrolador
Estación y punto de acceso con ESP32
Dos sketches cortos, uno para cada modo. Se compilan con el paquete de placas ESP32 de Arduino (núcleo 2.x o 3.x).
Modo estación: conectarse a la red
Se conecta con un tiempo límite, informa los eventos con el motivo de cada desconexión y, una vez conectado, muestra toda la configuración que entregó el DHCP:
#include <WiFi.h>
// ---------- Configuración ----------
const char SSID[] = "MiRed"; // distingue mayúsculas y minúsculas
const char CLAVE[] = "mi-clave-larga";
const unsigned long TIEMPO_LIMITE = 15000; // ms para conectar antes de rendirse
const char *textoEstado(wl_status_t estado) {
switch (estado) {
case WL_IDLE_STATUS: return "en reposo";
case WL_NO_SSID_AVAIL: return "no se encuentra la red";
case WL_SCAN_COMPLETED: return "escaneo terminado";
case WL_CONNECTED: return "conectado";
case WL_CONNECT_FAILED: return "falló (¿clave incorrecta?)";
case WL_CONNECTION_LOST: return "conexión perdida";
case WL_DISCONNECTED: return "desconectado";
default: return "desconocido";
}
}
void alEvento(WiFiEvent_t evento, WiFiEventInfo_t info) { // se invoca desde la tarea de Wi-Fi, no desde loop()
switch (evento) {
case ARDUINO_EVENT_WIFI_STA_CONNECTED:
Serial.println("[evento] asociado al punto de acceso");
break;
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
Serial.print("[evento] IP obtenida: "); Serial.println(WiFi.localIP());
break;
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
Serial.printf("[evento] desconectado, motivo %d\n", info.wifi_sta_disconnected.reason);
break;
default:
break;
}
}
void setup() {
Serial.begin(115200);
WiFi.onEvent(alEvento);
WiFi.mode(WIFI_STA); // modo estación: se conecta a un punto de acceso existente
WiFi.setHostname("sensor-wifi"); // antes de begin(): es el nombre que verá el router
Serial.print("MAC de la estación: "); Serial.println(WiFi.macAddress());
unsigned long t0 = millis();
WiFi.begin(SSID, CLAVE); // escanea, se asocia, negocia las claves y pide la IP
while (WiFi.status() != WL_CONNECTED && millis() - t0 < TIEMPO_LIMITE) delay(250); // aceptable en setup()
if (WiFi.status() != WL_CONNECTED) {
Serial.printf("Sin conexión tras %lu ms: %s\n", millis() - t0, textoEstado(WiFi.status()));
return; // la reconexión automática se ve en el tema 36
}
Serial.printf("Conectado en %lu ms\n", millis() - t0);
Serial.printf("Red: %s BSSID: %s canal %d RSSI %d dBm\n", WiFi.SSID().c_str(), WiFi.BSSIDstr().c_str(), WiFi.channel(), WiFi.RSSI());
Serial.print("IP: "); Serial.println(WiFi.localIP());
Serial.print("Máscara: "); Serial.println(WiFi.subnetMask());
Serial.print("Puerta: "); Serial.println(WiFi.gatewayIP());
Serial.print("DNS: "); Serial.println(WiFi.dnsIP());
}
void loop() {
static unsigned long ultimo = 0;
if (millis() - ultimo >= 5000) {
ultimo = millis();
Serial.printf("Estado: %s", textoEstado(WiFi.status()));
if (WiFi.status() == WL_CONNECTED) Serial.printf(" RSSI %d dBm", WiFi.RSSI());
Serial.println();
}
}
Detalles que conviene notar. WiFi.onEvent corre en la tarea de Wi-Fi, no en loop(): debe ser breve y no debería usar funciones lentas ni modificar estructuras de datos sin cuidado (una bandera volatile es la forma segura de avisar al programa principal). setHostname va antes de begin; si no, el router ve un nombre genérico como «espressif». El delay(250) de setup() es aceptable porque no hay nada más que atender; en un nodo que ya publica por MQTT, la espera sería un estado más del bucle, como en el tema 33. Y si el estado sale WL_NO_SSID_AVAIL o WL_CONNECT_FAILED, el evento ya imprimió el código de motivo de la tabla anterior.
Modo punto de acceso: crear una red
#include <WiFi.h>
// ---------- Configuración del punto de acceso ----------
const char SSID_AP[] = "Nodo-ESP32"; // hasta 32 bytes
const char CLAVE_AP[] = "clave-de-8-o-mas"; // de 8 a 63 caracteres; "" crearía una red abierta
const int CANAL = 6; // 1, 6 u 11 evitan solapes
const int MAX_CLIENTES = 4; // el ESP32 admite hasta 10
void alEvento(WiFiEvent_t evento, WiFiEventInfo_t info) {
switch (evento) {
case ARDUINO_EVENT_WIFI_AP_STACONNECTED:
Serial.println("[evento] un cliente se asoció");
break;
case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED:
Serial.println("[evento] un cliente se fue");
break;
default:
break;
}
}
void setup() {
Serial.begin(115200);
WiFi.onEvent(alEvento);
WiFi.mode(WIFI_AP); // modo punto de acceso: el ESP32 crea la red
bool ok = WiFi.softAP(SSID_AP, CLAVE_AP, CANAL, 0, MAX_CLIENTES); // el 0 es «SSID visible»
if (!ok) {
Serial.println("No se pudo crear el punto de acceso (revisá el SSID y la clave)");
return;
}
Serial.print("Red: "); Serial.println(SSID_AP);
Serial.print("IP del AP: "); Serial.println(WiFi.softAPIP()); // 192.168.4.1 por omisión
Serial.print("MAC del AP: "); Serial.println(WiFi.softAPmacAddress()); // distinta de la de la estación
}
void loop() {
static unsigned long ultimo = 0;
if (millis() - ultimo >= 5000) {
ultimo = millis();
Serial.printf("Clientes conectados: %d de %d\n", WiFi.softAPgetStationNum(), MAX_CLIENTES);
}
}
Al ejecutarlo, el teléfono ve la red «Nodo-ESP32»; al conectarse, recibe una dirección como 192.168.4.2 y puede hacer ping 192.168.4.1 o abrir un servidor web en el ESP32 con la biblioteca WebServer (tema 36). softAP() devuelve false si algún dato es inválido: el SSID de 0 o más de 32 bytes, una clave de menos de 8 o más de 63 caracteres, un canal fuera de 1 a 13 o una cantidad máxima de clientes mayor que 10. La herramienta 5 del laboratorio valida los mismos datos.
10 · Analogía con programación
Wi-Fi en Python
Casi todo lo que se decide en una red Wi-Fi es aritmética: los centros de los canales, el solape, la velocidad según el MCS, la modulación que sostiene una señal, el tiempo de una conexión y los datos válidos de un punto de acceso. El modelo siguiente los reproduce y calcula, además, la clave maestra WPA2 con la misma función que usa el estándar.
Python en tu navegador. Los bloques son editables: cambiá los valores y presioná «Ejecutar Python». La primera vez tarda unos segundos en cargar.
import hashlib
ANCHO_SD = {20: 52, 40: 108} # subportadoras de datos en HT20 y HT40
MCS = [("BPSK 1/2", 0.5), ("QPSK 1/2", 1.0), ("QPSK 3/4", 1.5), ("16-QAM 1/2", 2.0),
("16-QAM 3/4", 3.0), ("64-QAM 2/3", 4.0), ("64-QAM 3/4", 4.5), ("64-QAM 5/6", 5.0)] # bits útiles por subportadora
SENS_20 = [-82, -79, -77, -74, -70, -66, -65, -64] # sensibilidad mínima de la norma 802.11n, 20 MHz
def canal_a_mhz(n):
return 2407 + 5 * n
def solape(a, b, ancho=20):
separacion = 5 * abs(a - b) # los centros están a 5 MHz de distancia
return max(0.0, (ancho - separacion) / ancho)
def tasa_phy(mcs, flujos=1, ancho=20, gi_ns=800):
simbolo_us = 4.0 if gi_ns == 800 else 3.6 # duración del símbolo OFDM con GI largo o corto
return ANCHO_SD[ancho] * MCS[mcs][1] * flujos / simbolo_us
def mejor_mcs(rssi, ancho=20, margen=5):
mejor = None
for i, sens in enumerate(SENS_20):
if rssi >= sens + (3 if ancho == 40 else 0) + margen:
mejor = i
return mejor
def tiempo_conexion(canales=13, ms_canal=120, ms_asoc=40, ms_handshake=100, ms_dhcp=500, escanear=True):
return ((canales * ms_canal if escanear else 0) + ms_asoc + ms_handshake + ms_dhcp) / 1000
def carga_mah(segundos, ma):
return ma * segundos / 3600
def clave_psk(clave, ssid): # PBKDF2-HMAC-SHA1, 4096 vueltas: el SSID hace de sal
return hashlib.pbkdf2_hmac("sha1", clave.encode(), ssid.encode(), 4096, 32).hex()
def validar_ap(ssid, clave):
if not 1 <= len(ssid.encode("utf-8")) <= 32:
return "SSID inválido (1 a 32 bytes)"
if clave == "":
return "red abierta: sin cifrado"
if not 8 <= len(clave) <= 63:
return "clave inválida (8 a 63 caracteres)"
return "WPA2-PSK"
for a, b, ancho in ((1, 1, 20), (1, 2, 20), (1, 3, 20), (1, 5, 20), (1, 6, 22), (6, 11, 20)):
print(f"canal {a:>2} y {b:>2} ({ancho} MHz): centros {canal_a_mhz(a)} y {canal_a_mhz(b)} MHz, solape {solape(a, b, ancho) * 100:.0f} %")
for mcs in range(8):
print(f"MCS {mcs} {MCS[mcs][0]:>10}: {tasa_phy(mcs):6.1f} Mbit/s (20 MHz), {tasa_phy(mcs, 1, 40, 400):6.1f} (40 MHz, GI corto)")
print("máximo de 4 flujos, 40 MHz, GI corto:", tasa_phy(7, 4, 40, 400), "Mbit/s")
for rssi in (-50, -67, -75, -85):
m = mejor_mcs(rssi)
print(f"RSSI {rssi} dBm -> MCS {m}" + ("" if m is None else f" ({MCS[m][0]}, {tasa_phy(m):.1f} Mbit/s, unos {tasa_phy(m) * 0.6:.1f} reales)"))
normal, rapida = tiempo_conexion(), tiempo_conexion(escanear=False)
print(f"conexión completa {normal:.2f} s ({carga_mah(normal, 100):.4f} mAh); con canal conocido {rapida:.2f} s ({carga_mah(rapida, 100):.4f} mAh)")
print("PSK password/IEEE:", clave_psk("password", "IEEE"))
print("PSK password/IEEF:", clave_psk("password", "IEEF"))
for ssid, clave in (("Nodo-ESP32", "clave-de-8-o-mas"), ("Nodo", "1234"), ("Nodo", ""), ("", "clave-larga-1"), ("ñ" * 17, "clave-larga-1")):
print(f"{ssid!r:>14}, {clave!r}: {validar_ap(ssid, clave)}")
Resultado: los canales 1 y 1 se solapan el 100 %, 1 y 2 el 75 %, 1 y 3 el 50 %, y los pares 1 y 5 (20 MHz), 1 y 6 (22 MHz) y 6 y 11 no se solapan nada. Las velocidades de 802.11n con un flujo van de 6,5 Mbit/s (MCS 0) a 65 Mbit/s (MCS 7) en 20 MHz, y de 15 a 150 Mbit/s en 40 MHz con intervalo corto; con cuatro flujos se llega a 600 Mbit/s. Con −50 dBm el modelo elige el MCS 7 (65 Mbit/s, unos 39 reales); con −67 dBm, el MCS 3 (26 y unos 15,6); con −75 dBm, el MCS 0 (6,5 y unos 3,9); y con −85 dBm no hay enlace. Una conexión completa tarda 2,20 s y gasta 0,0611 mAh a 100 mA; con canal conocido, 0,64 s y 0,0178 mAh. La clave maestra de «password» con el SSID «IEEE» es f42c6fc5…a12e, el valor del vector de prueba del estándar, y con el SSID «IEEF» sale una totalmente distinta (7155709b…3332). Por último, «Nodo-ESP32» con una clave de 16 caracteres es WPA2-PSK; la clave «1234» es inválida; la clave vacía da una red abierta; un SSID vacío o de 17 «ñ» (34 bytes) es inválido.
Esta forma de trabajar, con un modelo que se puede ejecutar y modificar antes de tocar una placa, evita muchos errores: por ejemplo, el de contar caracteres en lugar de bytes en el SSID, o el de pensar que una frase corta «alcanza» sin calcular cuánto tardaría en romperse.
11 · Exploración interactiva
Laboratorio: canales, velocidad, señal, conexión y punto de acceso
El laboratorio tiene cinco herramientas. La primera calcula el solape entre dos canales de 2,4 GHz. La segunda calcula la velocidad de enlace de 802.11n a partir del MCS, los flujos, el ancho y el intervalo de guarda. La tercera dice qué modulación y velocidad sostiene una señal dada. La cuarta estima el tiempo y la energía de una conexión. La quinta valida los datos de un punto de acceso del ESP32.
1. Solape de canales de 2,4 GHz
Elegí dos canales.
2. Velocidad de enlace 802.11n
Elegí los parámetros del enlace.
3. Qué velocidad sostiene la señal
Escribí la señal recibida.
4. Tiempo y energía de la conexión
Completá los tiempos de cada etapa.
5. Punto de acceso del ESP32
Escribí los datos de la red.
En la herramienta 1, el solape es la fracción del ancho de la señal que comparte con la otra y no considera la potencia relativa. En la 2 se aplica la fórmula del 802.11n (subportadoras de datos × bits útiles × flujos / duración del símbolo); el 60 % de eficiencia es un valor típico, y puede ser menor con muchas redes en el canal. En la 3 se usan las sensibilidades mínimas de la norma y se pide un margen; los equipos reales adaptan el MCS según las tramas que se pierden. En la 4 los tiempos son valores representativos: medí los de tu red. En la 5, los límites son los de softAP() del ESP32.
Recorrido guiado
- En la herramienta 1, con los canales 1 y 3 de 20 MHz: 10 MHz entre centros y 50 % de solape: «Evitar». Con 1 y 2 el solape es del 75 %; con 1 y 1, 100 %, pero es un co-canal y se coordina con CSMA/CA. Con 1 y 6 a 22 MHz: separación de 25 MHz, 0 % y tres canales posibles (1, 6, 11). Con 20 MHz hay cuatro (1, 5, 9, 13) y con 40 MHz solo dos.
- En la herramienta 2, con los valores iniciales (MCS 7, un flujo, 20 MHz, 800 ns): 65 Mbit/s de la capa física, 39 Mbit/s reales (60 %) y 0,21 s por megabyte: es lo que un ESP32 puede ofrecer en teoría. Poné 40 MHz y 400 ns: 150 Mbit/s, el máximo del ESP32 (con la advertencia de ocupar media banda). Con MCS 0: 6,5 Mbit/s y 2 s por megabyte. Con 4 flujos, 40 MHz y 400 ns: 600 Mbit/s, el máximo de 802.11n, solo para un router o una PC.
- En la herramienta 3, con −67 dBm (20 MHz, un flujo, margen 5 dB): MCS 3, 16-QAM 1/2, 26 Mbit/s y unos 15,6 reales; la señal es «buena». Con −50 dBm: MCS 7, 65 Mbit/s. Con −75 dBm: MCS 0, 6,5 Mbit/s («justa»). Con −85 dBm: sin enlace utilizable. Con −50 dBm y 40 MHz: 135 Mbit/s con 800 ns.
- Subí el margen a 15 dB con −67 dBm: el enlace baja al MCS 0 (necesita −67 dBm exactos): un margen mayor da una conexión más estable y más lenta.
- En la herramienta 4, con los valores iniciales: escaneo de 1560 ms, conexión completa de 2,20 s, rápida de 0,64 s, 0,0611 mAh y 0,0178 mAh por conexión. Con 24 conexiones por día: 1,47 mAh frente a 0,43 mAh, y una reducción del 71 %. Poné DHCP en 0 (IP estática): la conexión completa baja a 1,70 s y la rápida a solo 0,14 s: un ahorro del 92 %.
- En la herramienta 5, con los valores iniciales: SSID de 10 bytes, WPA2-PSK, canal 6 (2437 MHz), 4 clientes, 192.168.4.1; softAP() devolvería true. Con la contraseña 1234: inválida (4 caracteres). Con la contraseña vacía: funciona, pero es una red abierta. Con un SSID de 17 «ñ»: 34 bytes, excede los 32. Con el canal 14 o 11 clientes: inválido.
Desafío: la red que el ESP32 no encuentra
Un cliente instala un nodo ESP32 en su casa. Con el celular ve la red «Casa», pero el nodo imprime el motivo 201 (NO_AP_FOUND) en cada intento. ¿Qué causas revisarías, en orden? Primero, la ortografía del SSID y de las mayúsculas, y los espacios finales (la herramienta 5 muestra cuántos bytes tiene). Segundo, la banda: si el router emite «Casa» solo en 5 GHz, o «Casa» en las dos bandas con «band steering» que oculta la de 2,4 GHz, el ESP32 no la ve. Tercero, la seguridad: una red solo WPA3 puede no ser compatible con un firmware antiguo, y una red en modo WEP/TKIP, rechazada por seguridad. Cuarto, el canal: algunos routers eligen canales 12 o 13, que el firmware regional del ESP32 puede no escanear si está configurado para América. Quinto, la señal: si el nodo está en un sótano, el escáner del tema 34 con un RSSI inferior a −80 dBm lo confirmaría. Con la herramienta 3, un RSSI de −85 dBm no sostiene ni el MCS 0.
12 · Comprensión
Confusiones frecuentes
«Wi-Fi es Internet»
Wi-Fi es solo el enlace local, entre el dispositivo y el punto de acceso. Una red Wi-Fi puede no tener Internet (el router desconectado) y seguir funcionando entre sus equipos; y un dispositivo puede estar «conectado a Wi-Fi» sin IP, o con IP y sin Internet. Hay que verificar cada etapa.
«Más barras de señal siempre significa más velocidad»
La señal fija la modulación máxima, pero la velocidad real depende también de cuántos equipos comparten el canal, de la interferencia y del ruido. Un enlace con señal excelente en un canal saturado rinde menos que uno de señal media en un canal libre.
«Un canal de 40 MHz duplica la velocidad y no tiene desventajas»
Duplica casi la velocidad de la capa física, pero ocupa el doble de espectro (y en 2,4 GHz, casi la mitad de la banda), sube el ruido recibido (menos sensibilidad) y entra en conflicto con otras redes. En 2,4 GHz y con muchos vecinos, 20 MHz suele rendir mejor.
«Ocultar el SSID protege la red»
El nombre sigue apareciendo en los sondeos y en las tramas de asociación, y se descubre con cualquier analizador. Lo único que se consigue es que los dispositivos tengan que sondear más y que la conexión sea más lenta. La protección real es la clave WPA2 o WPA3.
«Una clave WPA2 de 8 caracteres es suficiente»
Si es una palabra o una fecha, está en cualquier diccionario. Aunque sea al azar, con ocho letras minúsculas se agota en días con una sola GPU. Una frase larga o 12 o más caracteres al azar es lo adecuado, porque el atacante puede probar fuera de línea.
«begin() espera hasta que conecta»
No espera: devuelve enseguida y la conexión sigue en segundo plano. El programa debe consultar WiFi.status() o recibir los eventos, con un tiempo límite, y distinguir «todavía conectando» de «falló».
«Si dos ESP32 están en la misma red, se hablan directamente»
Todo pasa por el punto de acceso. Y puede haber aislamiento de clientes. Para una comunicación directa y rápida entre placas existe ESP-NOW (tema 39), que no necesita router.
«El ESP32 en modo punto de acceso comparte su Internet»
No: crea una red local, pero no reenvía el tráfico hacia otra red por sí solo. Los clientes que se asocian pueden hablar con el ESP32, no con Internet, salvo que se programe un repetidor con NAT.
«Con buena señal, la conexión es instantánea»
El escaneo, el handshake y el DHCP tardan lo mismo con cualquier señal: del orden de uno a tres segundos con la radio encendida. Es lo que pesa en los nodos a baterías.
13 · Práctica guiada
Predecí antes de comprobar
1. Elegir canales
Tres redes vecinas usan los canales 2, 5 y 6. Con señales de 20 MHz, ¿cuánto se solapan 2 y 5, y 2 y 6?
Ver solución
Entre 2 y 5 hay 3 × 5 = 15 MHz, con un solape de (20 − 15) / 20 = 25 %. Entre 2 y 6 hay 20 MHz: 0 %, justo sin solape. Entre 5 y 6, 25 MHz de separación son 5 MHz de diferencia y un solape del 75 %: esas dos se interfieren fuerte.
2. Velocidad del 802.11n
¿Cuál es la velocidad de la capa física con MCS 5 (64-QAM 2/3), un flujo, 40 MHz y 800 ns? ¿Y de datos reales al 50 %?
Ver solución
108 subportadoras × (6 × 2/3 = 4 bits) × 1 flujo / 4 µs = 108 Mbit/s. Con una eficiencia del 50 %, 54 Mbit/s.
3. Dos flujos
Un router tiene dos antenas (2 flujos) y habla con un teléfono en MCS 15, que equivale al MCS 7 con dos flujos, a 20 MHz y 400 ns. ¿A qué velocidad?
Ver solución
52 × 5 × 2 / 3,6 µs = 144,4 Mbit/s, el valor clásico de «144 Mbit/s» de los equipos 2 × 2 de 20 MHz.
4. Señal y modulación
El ESP32 mide −72 dBm contra su punto de acceso (20 MHz, un flujo, margen 5 dB). ¿Qué MCS puede sostener?
Ver solución
Con el margen, el MCS 2 necesita −77 + 5 = −72 dBm: se cumple justo. El MCS 3 necesita −74 + 5 = −69 dBm: no. Entonces MCS 2 (QPSK 3/4), 19,5 Mbit/s de la capa física.
5. Costo de conectar
Un nodo con radio de 120 mA escanea 11 canales a 100 ms, y luego gasta 30 ms en asociarse, 80 ms en el handshake y 400 ms en DHCP. Se conecta cada 10 minutos. ¿Cuánto cuesta por día con conexión completa y con conexión rápida?
Ver solución
Completa: 1100 + 30 + 80 + 400 = 1610 ms; 120 mA × 1,61 s / 3600 = 0,0537 mAh, y 144 conexiones por día dan 7,7 mAh. Rápida: 510 ms, 0,0170 mAh y 2,4 mAh por día: una reducción de unos dos tercios (68 %).
6. Bytes de un SSID
¿Cabe «Sensores-Planta-Alta-ñandú-1» como SSID? ¿Y 17 «ñ» seguidas?
Ver solución
La primera tiene 28 caracteres, pero la «ñ» y la «ú» ocupan dos bytes cada una en UTF-8: 30 bytes, cabe (máximo 32). Las 17 «ñ» son 17 caracteres pero 34 bytes: no caben.
7. Misma clave, otra red
Dos redes, «casa» y «oficina», usan la misma contraseña. ¿Tienen la misma clave maestra? Con 8 letras minúsculas al azar y un atacante que prueba un millón de frases por segundo, ¿cuánto tarda en agotar todas las combinaciones?
Ver solución
No: el SSID entra en el cálculo de PBKDF2 como sal, y las claves maestras son totalmente distintas. Hay 268 = 208 827 064 576 combinaciones; a 106 por segundo son 208 827 s, unos 2,4 días. Con 12 letras (2612 ≈ 9,5 × 1016), ≈ 9,5 × 1010 s: unos 3000 años.
14 · Síntesis
Ideas para recordar
- Wi-Fi es la familia IEEE 802.11: define la capa física y la capa MAC. Por arriba corren IP, TCP, UDP, HTTP y MQTT como en Ethernet; el DHCP se ejecuta después de asociarse.
- Las generaciones suman ancho de banda (20 a 320 MHz), modulaciones más densas (hasta 4096-QAM), más flujos espaciales (MIMO) y mejor reparto del tiempo (OFDMA). El ESP32 clásico hace b/g/n a 2,4 GHz con un flujo (hasta 150 Mbit/s de la capa física, unos 20 Mbit/s reales).
- Una estación se conecta a un punto de acceso. El SSID (hasta 32 bytes) es el nombre; el BSSID, la MAC del punto de acceso; varios BSS con el mismo SSID forman un ESS con roaming. Todo el tráfico pasa por el punto de acceso, que anuncia la red con una baliza cada 102,4 ms.
- En 2,4 GHz hay 13 canales a 5 MHz de distancia y señales de 20 a 22 MHz: casi todos se solapan; usar 1, 6 u 11. Mismo canal se coordina (CSMA/CA); solape parcial es ruido y es peor. El ESP32 tiene una sola radio: en AP+STA ambos modos comparten el canal.
- Conectar es una secuencia: escaneo (sondeo y respuesta o balizas), autenticación abierta, asociación, handshake de cuatro vías y DHCP. Tarda del orden de 2 s y es lo más caro de un nodo que despierta cada poco; el canal y el BSSID guardados y la IP fija recortan el tiempo y la energía.
- La velocidad 802.11n = subportadoras (52 o 108) × bits útiles (MCS) × flujos / 4 µs (o 3,6 µs). La señal fija el MCS máximo: de −82 dBm (BPSK 1/2) a −64 dBm (64-QAM 5/6). Alejarse de un AP no corta el enlace: lo hace más lento.
- WEP está roto; WPA2-PSK usa PBKDF2 con el SSID como sal y el handshake de cuatro vías, y es vulnerable a diccionarios offline: la clave debe ser larga y al azar. WPA3-SAE evita ese ataque y protege las tramas de gestión. El cifrado de Wi-Fi protege solo el tramo del aire.
- ESP32:
WIFI_STApara unirse a un router (begin()no espera: usarstatus()o eventos con un tiempo límite),WIFI_APpara crear una red en 192.168.4.0/24 (SSID de hasta 32 bytes, clave de 8 a 63 caracteres, hasta 10 clientes) yWIFI_AP_STApara ambas. El aprovisionamiento por punto de acceso es el patrón habitual de configuración. - El diagnóstico se apoya en el código de motivo (201 no se encuentra la red, 202 clave o seguridad, 15 y 204 handshake, 200 se perdió la baliza) y en la señal RSSI. Los problemas más comunes son la banda de 5 GHz, los SSID mal escritos, el portal cautivo y el aislamiento de clientes.
¿Listo para el siguiente tema?
Antes de avanzar, explicá por qué los canales 1, 6 y 11 son la elección habitual y por qué un solape parcial es peor que compartir el canal; enumerá, en orden, las etapas de una conexión y cuál se puede evitar con una IP fija y cuál con el canal guardado; y decidí cómo harías que un producto sin pantalla reciba el SSID y la clave de la casa del usuario (aprovisionamiento por punto de acceso). Si podés justificar las tres respuestas, entendés cómo se une un dispositivo a una red Wi-Fi.
En el próximo tema llevamos esto a proyectos reales: cómo mantener la conexión cuando el router se reinicia, cómo servir una página web y usar WebSocket desde el microcontrolador, cuánto cuesta el Wi-Fi en energía y cómo se guarda y se protege la clave con WPA2.