El modo AP permite que un ESP32 o ESP8266 genere su propia WiFi para que otros dispositivos se conecten directamente a él.
Cuando usamos el modo punto de acceso (Access Point, AP), la placa deja de ser un cliente de una red existente y pasa a crear una red propia. Esto es útil para configuración inicial, redes aisladas, dispositivos portátiles o proyectos que no dependen de un router externo.
En cierta forma la placa va a actuar “como el router de tu casa”, salvo que el router de tu casa comparte una conexión (ADSL, fibra…) con los dispositivos conectados. Sin embargo, nuestro ESP32 no va a compartir “nada”, únicamente es un AP para dispositivos. Este modo se denomina “SoftAP”.
El ejemplo está orientado a ESP32. En muchos casos también puede adaptarse a ESP8266 cambiando librerías y algunos detalles de pines.
Crear una red WiFi
Usar el modo AP para crear una red WiFi es igual de sencillo que usar el modo STA para conectarnos a una WiFI existente, gracias a la misma librería WiFi.
Para generar la red WiFi empleamos la función WiFi.softAP(…), que devuelve true si la red WiFi se ha creado correctamente y false en caso contrario.
WiFi.softAP(ssid, passphrase = NULL, channel = 1, ssid_hidden = 0, max_connection = 4)
- ssid, nombre de la red WiFi que vamos a generar (entre 32 char)
- password, opcional, contraseña de la WiFi (mín 8 y máx 63 char)
- channel, opcional, el canal de WiFi a emplear (del 1 al 13)
- hidden, opcional, si es true no se mostrará el SSID
- max_connection, opcional, número máximo de conexiones (máx 8)
Por lo que un ejemplo para crear una red WiFI con el ESP32 en el modo AP sería el siguiente
#include <WiFi.h> // Include the Wi-Fi library
// Configuración de la WiFi generada
const char *ssid = "ssid";
const char *password = "password";
void setup() {
Serial.begin(115200);
delay(10);
WiFi.mode(WIFI_AP);
while(!WiFi.softAP(ssid, password))
{
Serial.println(".");
delay(100);
}
Serial.print("Iniciado AP ");
Serial.println(ssid);
Serial.print("IP address:\t");
Serial.println(WiFi.softAPIP());
}
void loop() { }
Por defecto se pueden conectar 4 dispositivos a la red generada, aunque puede cambiarse el número máximo de estaciones que pueden conectarse de forma simultánea entre 0 a 8. Una vez que el número máximo se ha alcanzado, cualquier otra estación que quiera conectarse se verá forzada a esperar hasta que alguna estación conectada se desconecte.
Por su parte, la función WiFi.mode(…) establece el modo de funcionamiento de la WiFi, pudiendo ser:
| WIFI_OFF | Apagado |
|---|---|
| WIFI_STA | Estacion |
| WIFI_AP | Access point |
| WIFI_AP_STA | Station+Acces Point |
Igual que en el caso STA, las credenciales de la red se guardan en memoria, que se mantiene incluso aunque reprogramemos la placa. Por lo que, si queremos desactivar el modo AP deberemos hacerlo explícitamente llamando a la función WiFi.mode(…). De lo contrario, el dispositivo generará su propia WiFi incluso después de reprogramarlo, aunque no hayamos usado la función WiFi.softAP(…) en el nuevo programa.
Ejemplo resumido
Si dividimos nuestro código para que sea más sencillo y reutilizable,
#include <WiFi.h>
#include "config.h" // Sustituir con datos de vuestra red
#include "ESP32_Utils.hpp"
void setup()
{
Serial.begin(115200);
ConnectWiFi_AP();
}
void loop()
{
}
Un fichero adicional que llamaremos ‘ESP32_Utils.hpp’ que contenga las funciones de conexión.
void ConnectWiFi_AP()
{
Serial.println("");
WiFi.mode(WIFI_AP);
while(!WiFi.softAP(ssid, password))
{
Serial.println(".");
delay(100);
}
Serial.println("");
Serial.print("Iniciado AP:\t");
Serial.println(ssid);
Serial.print("IP address:\t");
Serial.println(WiFi.softAPIP());
}
Un fichero de ‘config.h’ con los datos de nuestra WiFi
const char* ssid = "ssid";
const char* password = "password";
¿Sencillo verdad? Conectar un ESP8266 tanto a una red WiFi existente como generar su propia WiFI es realmente fácil gracias a la librería ESP8266 WiFi.
Con esto ya podemos usar el ESP32 como punto de acceso. Es una configuración muy práctica para asistentes de configuración, redes locales temporales o dispositivos que tienen que funcionar sin depender de un router externo.
Descarga el código
Todo el código de esta entrada está disponible para su descarga en Github.
Versión para el ESP8266: https://github.com/luisllamasbinaburo/ESP8266-Examples
Versión para el ESP32: https://github.com/luisllamasbinaburo/ESP32-Examples

