La placa D1 mini, que incorpora el SoC ESP8266, es una de las alternativas mas económicas y simples de utilizar para diseñar nuestros propios dispositivos conectados a Internet. En este artículo veremos las librerías y métodos necesarios para conectarla a una red WiFi empleando el Arduino IDE.
Antes de proceder a programar la D1 mini para acceder a una red WiFi debes tener correctamente configurado el IDE para trabajar con esta placa. Si no lo has hecho antes, te sugiero que leas primero este artículo donde te describo paso a paso el procedimiento necesario.
Si bien hago referencia a la D1 mini en el artículo, el mismo procedimiento es aplicable a cualquier placa que utilice el ESP8266.
Procedimiento
Las funciones necesarias para realizar la conexión a una red WiFi se encuentran en la librería ESP8266WiFi, que incluye varias clases y métodos que permiten muchas otras funcionalidades, como enviar y recibir información a través de redes abiertas o encriptadas o montar un servidor Web, entre otras.
Por lo tanto, lo primero que debemos hacer en nuestro sketch es incluir esta librería:
#include "ESP8266WiFi.h" void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: }
Una vez hecho esto, debemos definir las credenciales que utilizaremos para acceder a la red, esto es, el nombre de la red (SSID) y su contraseña (Password). También lo podemos hacer mas adelante, pero por una cuestión de claridad lo haremos de esta forma:
#include "ESP8266WiFi.h" //Credenciales #define WIFI_SSID "nombre_red" #define WIFI_PASS "contraseña" void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: }
En el código de arriba, reemplaza nombre_red por el SSID de la red WiFi que utilices para hacer estas pruebas y contraseña por la password correspondiente.
Para ir viendo como evoluciona la conexión a la red mostraremos algunos textos y valores por el monitor serie, así que debemos prepararlo en nuestro código:
#include "ESP8266WiFi.h" //Credenciales #define WIFI_SSID "nombre_red" #define WIFI_PASS "contraseña" void setup() { Serial.begin (115200); Serial.println (); } void loop() { // put your main code here, to run repeatedly: }
Llegados a este punto ya podemos intentar conectarnos a la red. Lo haremos empleando el método begin como se puede ver a continuación:
#include "ESP8266WiFi.h" //Credenciales #define WIFI_SSID "nombre_red" #define WIFI_PASS "contraseña" void setup() { Serial.begin (115200); Serial.println (); //Conecta al WiFi WiFi.begin (WIFI_SSID, WIFI_PASS); Serial.print ("Conectando a "); Serial.print (WIFI_SSID); } void loop() { // put your main code here, to run repeatedly: }
En la línea 13 del sketch de arriba intentamos la conexión a la red con las credenciales que se definieron al principio. También se pueden suministrar en esta instrucción, poniendo ambos valores entre los paréntesis.
En las líneas 15 y 16 se muestra a través del monitor serie el nombre de la red donde se intenta la conexión.
A continuación, la librería intentará conectarse a la red. Si la información de las credenciales es correcta y no hay ningún problema, esto puede demorar algunos segundos.
Podemos revisar si la conexión ha sido exitosa empleando el método status, que devuelve distintos valores. Si se hace igual a WL_CONNECTED, significa que la conexión se ha completado.
Esto puede verse en el siguiente código, donde se agrega un while que imprime caracteres “.” hasta que la conexión se complete. Cuando esto ocurre, el programa continúa mostrando la dirección IP que se le asignó dentro de la red.
Este procedimiento es muy simple pero evidentemente tiene el inconveniente de que si hay un problema y la conexión no se completa, el programa no sale nunca del bucle while. En futuros artículos lo iremos perfeccionando.
#include "ESP8266WiFi.h" //Credenciales #define WIFI_SSID "nombre_red" #define WIFI_PASS "contraseña" void setup() { // put your setup code here, to run once: Serial.begin (115200); Serial.println (); //Conecta al WiFi WiFi.begin (WIFI_SSID, WIFI_PASS); Serial.print ("Conectando a "); Serial.print (WIFI_SSID); //Esperar conexión while (WiFi.status () != WL_CONNECTED) { delay (100); Serial.print ("."); } //Conectado Serial.println (); Serial.print ("Conectado a "); Serial.println (WiFi.localIP()); } void loop() { // put your main code here, to run repeatedly: }
Si no hay errores, cuando se completa el código y comienza a ejecutarse la función loop, la placa ya se encuentra conectada a la red.
Si luego de lograda la conexión, esta se pierde por cualquier causa, la librería intentará reconectar de manera automática.
Para probar, incluiremos el código para que se muestre la intensidad de la señal WiFi en dBm a través del método RSSI. Puedes ver cómo varía este valor moviendo la placa o incluso cubriéndola con la mano.
#include "ESP8266WiFi.h" //Credenciales #define WIFI_SSID "nombre_red" #define WIFI_PASS "contraseña" void setup() { // put your setup code here, to run once: Serial.begin (115200); Serial.println (); //Conecta al WiFi WiFi.begin (WIFI_SSID, WIFI_PASS); Serial.print ("Conectando a "); Serial.print (WIFI_SSID); //Esperar conexión while (WiFi.status () != WL_CONNECTED) { delay (100); Serial.print ("."); } //Conectado Serial.println (); Serial.print ("Conectado a "); Serial.println (WiFi.localIP()); } void loop() { //Imprimir la intensidad de la señal long rssi = WiFi.RSSI(); Serial.print("RSSI:"); Serial.println(rssi); delay (1000); }
Conclusión
Vimos el procedimiento básico para conectar la D1 Mini, o cualquier otra placa basada en el ESP8266, a una red WiFi. Este es el primer paso para realizar una conexión a Internet y aprovechar algunas de las innumerables posibilidades que esto nos permite. En sucesivos artículos iremos viendo algunas de ellas, mientras tanto si tienen alguna duda o sugerencia, pueden dejarla mas abajo en la sección de comentarios.
Para aprender más
Documentación de la librería ESP866WiFi en inglés.
Documentación del Core de Arduino para ESP8266 y ESP8266WiFi en español