Cómo conectar un ESP8266 a una red WiFi (modo STA)


Empezamos con las entradas dedicadas a programar el ESP8266. Como no podía ser de otra forma empezamos por el caso más sencillo, cómo conectar el ESP8266 a una red WiFi existente.

En entradas anteriores hemos visto cómo programar el ESP8266 con el entorno de Arduino, y la guía de programación del ESP8266, haciendo hincapié a las diferencias entre programar un Arduino y un ESP8266.

También hemos visto dos de las placas de desarrollo más populares basadas en el ESP8266, la NodeMCU y la Wemos D1 Mini. Quedan muchas más por ver, pero de momento es más que suficiente para meternos en harina en la programación.

Así que (por fin!) podemos empezar a jugar con este divertidísimo dispositivo, conectando nuestro ESP8266 a una WiFi. En este caso el ESP8266 actuará en modo estación (STA, Station), es decir, como un dispositivo que se conecta a un punto de acceso (AP, Access Point). En la próxima entrada veremos cómo hacer que el propio ESP8266 genere su propia WiFI actuando como AP.

Anuncio:

Conectar a red WiFi

Conectarse a una red Wifi con el ESP8266 es muy sencillo gracias a las funciones de la librería ESP8266WiFi, que forma parte de la definición del ESP8266 que descargamos con el gestor de placas al configurar el IDE de Arduino.

Para conectarnos simplemente usamos el método ‘Wifi.begin(…)’, que tiene la siguiente definición,

Siendo:

  • ssid, nombre de la red WiFi a la que nos queremos conectar (max 32 char)
  • password, opcional, contraseña (mínimo 8 char y máximo 64)
  • channel, opcional, el canal de WiFi a emplear
  • bssid, opcional, dirección MAC del punto de acceso
  • connect, indica si queremos conectar inmediatamente (si es false, sólo guarda los parámetros)

Un ejemplo de código para conectarnos a una red WiFi existente con el ESP8266 tendría la siguiente forma.

La función WiFi.begin(…) del ESP8266 guarda los credenciales indicados en la memoria flash no volátil (que se mantiene incluso aunque carguemos otro programa). Ante un fallo de conexión, el ESP8266 se conectará automáticamente al último punto de acceso cuando esté disponible. Además, una vez configurado una vez, podemos volver a conectarnos llamando a la sobrecarga sin parámetros.

Las funciones WiFi.begin(…) devuelven el estado del ESP8266 para determinar cuándo hemos establecido la conexión con la red. También podemos obtenerlo en otro momento a lo largo de nuestro programa con la función WiFi.status(). Esta variable de estado del ESP8266 puede ser:

WL_CONNECTEDConexión establecida
WL_NO_SSID_AVAILEl SSID no se encuentra
WL_CONNECT_FAILEDContraseña incorrecta
WL_IDLE_STATUSWi-Fi está cambiando entre estados
WL_DISCONNECTEDEl ESP8266 no está configurado en modo STA

La función WiFi.mode(WIFI_STA) es opcional en este ejemplo. Sirve para dejar únicamente el modo STA y desactivar el AP en caso de que lo hubiéramos configurado previamente ya que, como decíamos, el ESP8266 guarda la configuración del WiFi aunque lo reprogramemos. Las opciones de modos son:

WIFI_OFFApagado
WIFI_STAEstacion
WIFI_APAccess point
WIFI_AP_STAStation+Acces Point
Veremos los dos últimos en la próxima entrada cuando veamos cómo generar nuestra propia WiFi con el ESP8266.

Ejemplo resumido

El código de conexión puede parecer un poco largo, pero si limpiamos y organizamos el código, y creamos un fichero de configuración llamado ‘config.h’ que contenga la contraseña y el password.

Y un fichero adicional que llamaremos ‘ESP8266_Utils.hpp’ que contenga las funciones habituales.

El código queda reducido a unas pocas líneas para conectarnos a una red WiFI.

Organizar de esta forma nuestros proyectos es una buena costumbre, que permite tener un código más limpio, mantenible, y reutilizable.

Conectar a red WiFi Múltiple

Existe otra forma de conectarse a una red WiFi, o mejor dicho, a la que tenga mejor señal de entre red WiFi disponibles. Para ello usaremos la librería ‘ESP8266WiFiMulti’.

En la configuración usaremos wifiMulti.addAP(…) para agregar varias redes WiFI proporcionando sus respectivas SSID y su contraseña. Al arrancar, el ESP8266 se conectará a la red que tenga mejor recepción.

Este modo es menos habitual que el anterior, ya que normalmente no vamos a tener varias WiFi disponibles (es más frecuente tener varios AP con el mismo SSID y contraseña). Pero resulta interesante en algunos proyectos de redes malladas, sniffers, etc.

Sin embargo, gestionar un WiFi múltiple también supone una sobrecarga de trabaja adicional para el ESP8266, aunque no demasiado grande. Por lo que usar esta función únicamente cuando realmente sea necesaria y no os acostumbréis a usarla «porque sí».

Otras funciones WiFI del ESP8266

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

¡Así de sencillo! ¿A que es impresionante lo que puede hacer este pequeño dispositivo? En la próxima entrada veremos algo aún más impresionante, como configurar el ESP8266 para actuar como un AP, es decir, generar su propia WiFi a la que se conecten otros dispositivos. ¡Hasta pronto!

Descarga el código

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

Si te ha gustado esta entrada y quieres leer más sobre ESP8266 puedes consultar la sección
tutoriales de ESP8266

Anuncio:

Previous Librería Arduino Parser
Next Cómo crear y gestionar proyectos con Vue CLI UI 3.0
1000
5 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
6 Comment authors
newest oldest
jesus

Muchisimas gracias por el tutorial, realmente práctico sencillo de entender y muy descriptivo, quedo a la espera de las próximas entregas.

Javier Silva

Buenos días. Me interesa desarrollar un pulsador que se conecte por wifi, un solo botón y leerlo desde pc. Me puedes colaborar por favor?

Edgardo

Excelentes los dos artículos, muy claros

Manolo

Luis, a estos modulos se les podrían adaptar para una conexión vía «PLC WIFI» ?
Le ves sentido o no aportaria ninguna mejora?

cARLOS

Haciendo copypaste del código y subiendo a un nodemecu 12E al hacer el serialprint me salen caracteres raros tipo ?[]?[][]? Alguna idea?

ACTUALIZACIÓN: Era por los baudios configurados en el puerto serial, solucionado. Muchas gracias!