Cómo configurar un ESP8266 para acceder por mDNS


En esta entrada vamos a ver cómo emplear el multicast DNS (mDNS) para acceder a un ESP8266 de nuestra red local por su nombre sin tener que conocer su dirección IP.

Llevamos unas entradas viendo cómo conectar el ESP8266 en modo STA y modo AP. Una vez conectados, normalmente la primera necesidad será encontrar nuestro dispositivo en la red local.

En la entrada anterior vimos cómo resolverlo configurando una IP estática. Otra alternativa es emplear un escáner de red. Sin embargo, también es posible emplear el mDNS para localizar el dispositivo por su nombre.

Los servidores DNS (unicast Domain Name System) contienen tablas que convierten nombres y dominios a una dirección IP. Estamos acostumbrados a su uso en Internet. Aunque es posible configurar un servidor DNS local, muchas redes locales pequeñas no disponen de un servidor DNS, por lo que sólo podemos acceder por su dirección IP.

Anuncio:

Afortunadamente hay otra forma, el protocolo multicast DNS, que resuelve nombres de dominio que emplean '.local' como sufijo. Por ejemplo, http://esp8266.local

mDNS es un servicio Zeroconf que, esencialmente, emplea un funcionamiento similar a las DNS. Este protocolo fue publicado originalmente como RFC 6762, y usa multicast de paquetes UDP.

Los servicios Zeroconf (zero-configuration) son un conjunto de tecnologías que permiten crear una red automáticamente sobre protocolo TCP/IP sin configuración o servidores especiales

Cuando un cliente mDNS necesita resolver un nombre envía un mensaje multicast preguntando a los equipos de la red que se identifiquen. Los dispositivos que soporten mDNS responden con un mensaje que incluye su dirección IP.

Sin embargo, no todo es tan bonito como parece. mDNS no funciona de forma nativa en todos los sistemas operativos.

  • Mac OSX soporta mDNS a través de su servicio Bonjour.
  • Linux también lo soportan de forma nativa en muchas distribuciones.
  • Windows soporta parcialmente mDNS, pero sólo para impresoras. Puede hacerse funcionar instalando el servicio Bonjour de Apple.
  • Android implementa mDNS internamente, pero no resuelve los nombres mDNS de forma nativa.

mDNS en el ESP8266

ESP8266 soporta mDNS a través de la librería 'ESP8266mDNS.h'. Su uso es muy sencillo, podemos configurarlo con la instrucción 'MDNS.begin(...)'. Aquí tenemos un ejemplo.

La implementación de la librería es muy interesante. Echarle un ojo si queréis aprendes más sobre el protocolo mDNS.

Ejemplo resumido

Siguiendo la filosofía que estamos teniendo en estos tutoriales, vamos a simplificar el código dividiéndolo. A los ficheros que ya teníamos, 'config.h' y 'ESP_Utils.hpp', añadimos un nuevo fichero llamado 'ESP_Utils_mDNS.hpp' que contenga.

Con lo que el código queda reducido a,

Así de fácil, podemos acceder a nuestro ESP8266 a través de la URL 'http://esp8266.local'. Por supuesto, podemos cambiar el nombre y la dirección al que nosotros queramos, cambiándolo en la función 'MDNS.begin(...)'.

No obstante, y no es por echar un jarro de agua fría, la resolución de mDNS no es totalmente fiable. Casi seguro que en algún momento os acabará dando dificultades.

Para tener una solución realmente fiable, es mejor configurar una IP estática y, opcionalmente, configurar un DNS en nuestra red local. Sin embargo, el mDNS es una solución cómoda, y una alternativa a considerar.

Hasta aquí, por ahora, las entradas destinadas a configurar la conexión del ESP8266. En la próxima entrada veremos cómo configurar un cliente, y en las siguientes cómo hacer que el ESP8266 actué cómo servidor. ¡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 Medir distancia con Arduino y el sensor GP2Y0E03
Next Protocolos de comunicación para IoT
1000