Introducción a la librería WIFIMANAGER.

PARA LA FAMILIA ESP.

INTRODUCCIÓN.

En el mundo del IoT que utiliza los populares ESP8266 disponen de WiFi y debe saber que, para conectar una placa como ESP8266 o NodeMCU a una red WiFi, tenemos que empezar por configurar en el programa o código, un cierto nivel de seguridad los parámetros de red SSID y el Password de la red a la que conectarnos. En otros palabras, en el setup(), configuramos el ESP8266 como cliente WiFi en modo estación (STA), iniciando la conexión a la que le pasamos el nombre de nuestra red y la contraseña, veamos.

Verificamos y cargamos el programa en el ESP, y si todo es correcto el proyecto queda en funcionamiento. Este proceso a la larga presenta un inconveniente ¿qué sucede si uno de estos dos parámetros cambia? o sea, si nos vamos a otro lugar con otra red WiFi. En cualquiera de estos casos nos saltará un error que nos impide la normal conexión.

Entonces, tenemos que modificar y cargar de nuevo el programa, cada vez que cambiamos de red WiFi a la que se ha de conectar, repetiremos la operación, no es que sea un problema insalvable. Aunque sería más práctico no tener que cambiar el programa y volverlo a cargar.

También yo he realizado algunas pruebas conectando el ESP8266 a una red local utilizando credenciales codificadas con métodos que almacenan el SSID y el Password de una red, pero no es muy conveniente ni práctico para los proyectos acabados. Sería mejor poder elegir la red a usar en tiempo de ejecución. Eso es exactamente lo que nos aporta la librería WifiManager y otras similares que por el momento no veremos aquí.

Alguien dijo: Por lo general, uno debe programar la lógica de su sistema, implementar la comunicación, implementar el control y crear la infraestructura para ejecutar todo esto. Aunque hay sistemas que resuelven algunos de estos problemas, ya sea de código abierto o comercial, son complejos de programar.

En todas las compañías que ofertan estas posibilidades, usted siempre tiene que registrarse, para lo cual tiene que ingresar datos relevantes sobre usted. Hay una opción que no necesita depender de estas empresas, con crear un AP (Punto de Acceso) y así poder conectarse a la red.

Esta es una razón más que interesante para utilizar la librería WifiManager.

LIBRERÍA WIFIMANAGER.

Efectivamente, ese mismo problema lo había padecido entre otros, un tal Tzapu, al que se le ocurrió crear una librería que sirve precisamente para resolver el problema, se trata de una librería que nos permite dotar a los dispositivos del IoT de algo más de libertad, las pruebas de Tzapu ya eran registradas en 2015.

La librería WiFiManager es una librería de código abierto que permite configurar los parámetros de una red WiFi desde un móvil en un ESP8266, de forma rápida sin cargar un nuevo código y además tiene otras funcionalidades. Esta librería, no necesitamos descargarla ya viene integrada en el Gestor de bibliotecas de Arduino.

Fig. 1 Gestor de librerías WiFiManager.

Como de costumbre, analicemos un caso. Cuando nos llevamos el proyecto basado en el ESP8266 a otro sitio donde hay otra red WiFi, como se ha dicho, tenemos que editar el código y modificar el SSID y el Password de la nueva red WiFi. En esta ocasión considero que usted tiene conocimientos suficientes de los entornos Arduino y ESP8266. Si lo cree necesario puede leer el contenido de la documentación de ESP8266 Arduino Core, para salir de dudas.

Fig. 2 Pinout del nodeMCU-ESP12

Librerías que se debe incluir en el boceto:

EL CÓDIGO

La autoría del código pertenece a Fernando Koyanagi, al que saludo y agradezco su trabajo desde esta página.

Abra el monitor serial y debe obtener un resultado similar al mostrado en la figura.

Fig. 3 Monitor AutoConnect

Cuando se realiza una conexión exitosa, el ESP8266 recuerda las credenciales e intenta conectarse a la misma red la próxima vez. Si no puede conectarse, usa el modo AP para mostrar la página de conexión nuevamente.

WifiManager usa el modo de punto de acceso y el modo de estación juntos. Utiliza el modo AP para la página de conexión que está disponible bajo la red propia del ESP8266 y en una dirección IP conocida (192.168.4.1) y luego usa el modo STA para conectarse a la red local.

Cuando está conectado a Internet y cuando está conectado a la red del dispositivo ESP, cualquier solicitud a cualquier nombre de dominio se redirige a este nombre de dominio en el dispositivo. La dirección IP 192.168.1.4 también funciona pero no existe en Internet.

La librería WiFiManager permite que el ESP8266 se conecte a la red local WiFi preconfigurada. En el caso de que no pueda realizar la conexión guardada previamente, pasa al modo de punto de acceso (AP), activa un portal cautivo, un servidor DNS y un servidor web (IP predeterminado 192.168.4.1). Entonces, desde cualquier dispositivo con WiFi, se conecta a ese punto de acceso. La siguiente es una vista desde un móvil.

Fig. 4 Portal cautivo.

Así, mediante el portal cautivo y el servidor DNS, se obtendrá un tipo de ventana emergente como la mostrada, que nos permite elegir y configurar una red. Pulse sobre el botón Configure WiFi , se mostrarán las redes a su alcance, elija una e ingrese la contraseña de la red elegida y haga clic en guardar, sin necesidad de editar una sola línea de código. Si tiene éxito, le devuelve el control a su aplicación, si no, vuelva a conectarse a AP y reconfigure.

Fig. 5 Listado de redes.

Para volver a conectarse, tiene la opción de conectar un pulsador con una resistencia como se muestra en la figura 3, al pulsar vuelve a iniciarse en modo AP. Esta es una de las utilidades de esta librería, si prevemos que nuestro proyecto puede utilizar diferentes redes WiFi.

Fig. 6 Reconectar a AP.

Recapitulando: Con nuestro ESP8266 WiFi usando la librería WiFiManager, se crea un punto de acceso (AP), después mediante el portal cautivo y el servidor DNS, a través del IP predeterminado 192.168.4.1 nos mostrará una ventana emergente AutoConnectAP, así, obtenemos las redes locales accesibles, seleccionamos una y una vez configurada la guardamos, para en otra ocasión poder conectarnos a ella.

A continuación el ESP8266 se reiniciará e intentará conectarse a la red, funcionando en modo STA como estación y ya no como AP punto de acceso. Para volver iniciar en modo AP sólo, a través del botón de la figura anterior.

El ESP se inicia e intenta conectarse a un Punto de acceso guardado previamente, si esto no tiene éxito (o si no se guardó ninguna red anterior), el ESP pasa al modo de Punto de acceso y hace funcionar un DNS y un Servidor web (ip predeterminado 192.168.4.1). Ahora, utilizando cualquier dispositivo (computadora, teléfono, tableta) habilitado para WiFi con un navegador, conéctese al punto de acceso recién creado. Mediante el portal cautivo y al servidor DNS, obtendrá una ventana emergente u obtendrá cualquier dominio al que intente acceder redirigido al portal de configuración.

Observese que los ESP8266 y su familia no disponen de un hardware de seguridad que encripte la comunicación, sin embargo la librería WIFI incluye funciones de encriptación por software, por lo tanto podemos acceder de forma similar a los sitios HTTPS, con el inconveniente de ocupar sobre 20kB de memoria, lo que debe tenerse en cuenta.

FILTRO DE REDES.

Puede filtrar redes según la calidad de la señal y mostrar/ocultar redes duplicadas. Para filtrar redes de baja calidad de señal, puede indicar a WiFiManager que no muestre redes por debajo de un % de calidad arbitrario;

Con lo que no mostrará redes con un 10% de calidad de señal.

Además, puede eliminar o mostrar redes duplicadas (la opción predeterminada es eliminar). Utilice esta función para mostrar (u ocultar) todas las redes.

Cuando se realiza una conexión exitosa, el ESP8266 recuerda las credenciales e intenta conectarse a la misma red la próxima vez. Si no puede conectarse, usa el modo AP para mostrar la página de conexión nuevamente.

WifiManager usa el modo de punto de acceso y el modo de estación juntos. Utiliza el modo AP para la página de conexión que está disponible bajo la red propia del ESP8266 y en una dirección IP conocida (192.168.4.1) y luego usa el modo STA para conectarse a la red local.

SOLUCIÓN DE ALGUNOS PROBLEMAS.

Ante errores de compilación, la mayoría de las veces, es posible que deba instalar una versión más reciente o anterior del núcleo ESP8266 para Arduino, en mi experiencia desinstalé la versión 2.5.0 beta y volví a instalar la versión 2.4.1 y pude compilar sin problemas.

Si se conecta al punto de acceso de configuración creado pero el portal de configuración no se muestra, simplemente abra un navegador y escriba la IP del portal web, de forma predeterminada 192.168.4.1.

Personalmente he utilizado el siguiente código y se que funciona bien. Pruebe usted si consigue poner en servicio esta librería. Copie y guarde este código con un nombre, compile y suba a su ESP y compruebe su funcionalidad.

Si su boceto no se compila y devuelve un error similar a este:

Lo más probable es que esté utilizando Firmware Beta 2.5.0 para el ESP8266. Esta actualización rompe la compatibilidad con ArduinoHttpClient(que es utilizada por Adafruit IO, actualmente no es compatible con este firmware beta).

Para que funcione, bajaremos el firmware del ESP8266 a una versión estable, vaya a: Herramientas/ Tarjetas/ Administrador de tarjetas y seleccione la versión 2.4.2 de ESP8266 by ESP8266 Community, esto es así, en estos momentos.

Esto es todo, por este simple tutorial.

REFERENCIAS.
  • http://pdacontroles.com/introduccion-libreria-wifimanager/
  • https://www.youtube.com/watch?v=8_R7nzvuVZI
  • https://texolab.net/2018/10/24/wifi-manager-para-esp8266/
  • https://programarfacil.com/esp8266/wifimanager-configura-wifi-esp8266/

14 comentarios sobre «Introducción a la librería WIFIMANAGER.»

  1. Buen dia,estoy utilizando el ESP 8266 0.9 (LOLIN) y al cortarse la alimentacion y volver quedan todas las salidas en estado alto,dejando todas las lamparas encendidas,cual seria la solucion ,gracias

    1. Hola victor luis quintili.
      Supongo ya que no lo especificas que estás utilizando relés para encender las lamparas.
      Aunque no conozco exactamente el ESP8266 0.9 (LOLIN), creo recordar que las salidas se ponen en estado de alta impedancia, es decir, no tienen establecido un valor digital, por lo tanto cada fabricante de la placa en concreto realiza un software según su idea de usabilidad en su dispositivo. Tengo entendido que no todas las salidas son a Alto, ya que los GPIOs se utilizan según el fabricante.
      Motivo por el cual no tengo capacidad de respuesta. Si la salida por defecto es Alta, prueba a activar las pull-down para que en cualquier caso sus salidas sean a Bajo, que es lo que te interesa.

      También, puedes probar a utilizar una salida del relé inversa, me explico, si utilizas un contacto NO (normalmente abierto) al iniciarse el ESP, lo cambias por un contacto NC (normalmente cerrado).

      Espero te sirva lo descrito.

      Saludos.

      P.D. 07.04.2019
      Hola victor, he encontrado una referencias a un hecho similar al que tu indicas, no se si te sirve, lo puedes encontrar en este enlace: https://community.openhab.org/t/power-cut-recovery/71568
      Espero te sirva de orientación.

  2. buen día, saludos desde México, antes que nada gracias por la aportación, tengo una pregunta, también servirá este sistema para configurara el wifi en el modulo esp32?

  3. Hola , se tendría que guardar las credenciales del wifi en eeprom y al apagarse la nodemcu se tendría de conectar de nuevo correcto?? porque no pasa asi conmigo.

    que podría ser?

    1. Hola Fer.

      Entiendo tu frustración, el problema es bastante recurrente y tendrás que acudir a preguntas frecuentes de la librería WiFi al parecer tenían que actualizar dicha librería y daban cierta información para superar el problema. Lamento no disponer en estos momentos de más información al respecto.

      Saludos.

  4. Estimado, estoy con una ESP32 y usando la libreria AsyncWiFiManager, se pone en AP, luego elijo la red WiFi que deseo usar y va perfecto. El tema es cuando quiero cambiar de red WiFi, no se como resetear o borrar las credenciales de la red WiFi que estaba configurada anteriormente( Aclaro, tengo 2 redes Wifi en mi casa, y quiero alternar de vez en cuando el uso de las mismas con la ESP), y no quiero apagar el Router para que se ponga la ESP32 en modo AP, quiero ponerla manualmente o por software en modo AP. Use wifiManager.resetSettings(); pero no pasa nada, al reiniciar la ESP32 vuelve a conectarse al wifi guardado, agradezco cualquier ayuda

    1. Hola Waldo.
      De lo que me indicas deduzco que deberías añadir una opción en el código que elimine el contenido de parte de la memoria en la que se queda al momento de hacer el cambio, no se si me he explicado.
      Es lo primero que se me ha ocurrido. No he tenido la ocasión de probarlo, pues estoy en otra etapa y no tengo tiempo para probar esto.

      Espero haber aclarado mi intuición. Ya me dices que tal te parece.

      Saludos

  5. Saludos cordiales, una consulta los datos de la configuración de la red a la que te unes, se guarda en spiffs o la eeprom?. gracias de antemano por la respuesta.

    Adicionalmente se que es un poco tardía la respuesta a la pregunta anterior de Waldo, hay una opción para que mediante un pulsador puedes poner en modo AP, ya esta implementada en uno de los ejemplos. Coloco la respuesta por si alguien mas lo necesita.

    1. Hola Eduardo
      Si no se dice lo contrario, un programa guarda la información en la propia EEPROM. Para guardar información en el SPIFFS, se ha de llamar expresamente a SPIFFS, que es una parte de la EEPROM reservada para casos muy concretos.

      Saludos y cuídate.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.