como-generar-una-red-wifi-con-el-esp8266-modo-ap

Cómo generar una red WiFi con el ESP8266 o ESP32 (modo AP)

Continuamos con la programación del ESP8266 y el ESP32. En esta ocasión nos toca ver cómo hacer que el ESP8266 actué como un punto de acceso (AP) generando su propia WiFi.

En la entrada anterior vimos cómo conectarnos a una red WiFi existente, actuando en modo ‘station’ (STA). Ahora usaremos el modo punto de acceso (access point, AP), es decir, haremos que el ESP8266 genera su propia red WiFi al que se conectan el resto de dispositivos.

En cierta forma el ESP8266 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 ESP8266 no va a compartir “nada”, únicamente es un AP para dispositivos. Este modo se denomina “SoftAP”.

Haremos referencia al ESP8266, pero el mismo código es compatible para el ESP32, ajustando el nombre de las librerías. Al final tenéis el código tanto para el ESP8266 como para el ESP32.

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 ESP8266WiFi.

En el caso del ESP32 la libreriá se llama simplemente ‘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)

Siendo:

  • 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 ESP8266 en el modo AP sería el siguiente

#include <ESP8266WiFi.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 por el ESP8266, 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 del ESP8266, pudiendo ser:

WIFI_OFFApagado
WIFI_STAEstacion
WIFI_APAccess point
WIFI_AP_STAStation+Acces Point

Igual que en el caso STA, las credenciales de la red se guardan en la memoria del ESP8266, que se mantiene incluso aunque reprogramemos el ESP8266. Por lo que, si queremos desactivar el modo AP deberemos hacerlo explícitamente llamando a la función WiFi.mode(…). De lo contrario, el ESP8266 generara su propia WiFi incluso después de reprogramarlo, aunque no hayamos usado la función WiFi.SoftAP(…) en el nuevo programa.

Ejemplo resumido

Si hacemos como en la entrada anterior, y dividimos nuestro código para que sea más sencillo y reutilizable,

#include <ESP8266WiFi.h>
 
#include "config.h"  // Sustituir con datos de vuestra red
#include "ESP8266_Utils.hpp"
 
void setup() 
{
  Serial.begin(115200);
  
  ConnectWiFi_AP();
}
 
void loop() 
{ 
}

Un fichero adicional que llamaremos ‘ESP8266_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";

Otras funciones AP del ESP8266

Aquí tenemos un resumen de algunas de las funciones adicionales disponibles en ESP8266 AP. Los nombres son autodescriptivos de su función pero, sí tenéis dudas, podéis consultar la documentación del ESP8266.

// configurar el WiFi generado
bool WiFi.softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet);

// desconectar el AP
bool WiFi.softAPdisconnect(bool wifioff = false);
    
//devuelve la direccion IP del ESP8266
IPAddress WiFi.softAPIP()

//devuelven la direccion MAC del ESP8266
String WiFi.softAPmacAddress(void);
uint8_t* WiFi.softAPmacAddress(uint8_t* mac);

¿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.

En las próximas entradas comenzaremos a trabajar con el ESP8266 para actuar tanto como cliente como servidor, algo que podemos hacer tanto en modo STA como en modo AP ¡Hasta la próxima!

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github.

github-full

Versión para el ESP8266: https://github.com/luisllamasbinaburo/ESP8266-Examples

Versión para el ESP32: https://github.com/luisllamasbinaburo/ESP32-Examples