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.

Anuncio:

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 en un fichero de ‘config.h’

const char* ssid     = "ssid";
const char* password = "password";

Y 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());
}

El código queda reducido a el siguiente snippet, mucho más cómodo, mantenible y reusable.

#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() 
{ 
}

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.

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

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

Si te ha gustado esta entrada y quieres leer más sobre ESP8266 o el ESP32 puedes consultar la sección tutoriales de ESP8266/32
Si te ha gustado esta entrada y quieres leer más sobre ESP8266 puedes consultar la sección
tutoriales de ESP8266
4.8 9 votes
Article Rating

Anuncio:

Previous Vuetify, estética Material Design para tus Apps en VueJS
Next Principales software CAD para impresión 3D
4 Comments
oldest
newest
Inline Feedbacks
View all comments
Albert
3 years ago

Gracias por el artículo ! Genial como siempre. Una duda, cuando dos ESP8266 estan conectados a la misma red, generada por uno de ellos, ¿es posible que intercambien datos por el puerto serie? o de alguna otra manera?
Unsaludo !

jesgon
3 years ago

estupendo!! gracias Luis, quedo atento a la próxima entrega, saludos.

carlos arguello
3 years ago

gracias por tu articulo muy bien explicado y realmente sencillo

Hector
2 years ago

hola Luis me gusto mucho tu tutorial , felicidades! he programado el nodemcu esp8266 para prender el auto atraves del celular usando señal wifi de casa. pero lo voy a instalar en el auto por lo que requerire su propia señal de wifi con tu tutorial y el codigo de programacion que muestas puedo hacer que tenga su propia señal de wifi ? no es necesario que este modulo tenga tarjeta sim? que rango tiene la señal ? podria yo prenderlo desde cualquier lugar ?ojala puedas ayudarme ya que es un proyecto personal que estoy realizando. Saludos Cordiales