Neste tutorial vamos aprender como usar o mDNS para resolver o endereço de um servidor web HTTP hospedado pelo ESP32. Para acessar o servidor ESP32, precisamos saber seu endereço IP e, na maioria dos exemplos que abordamos até agora, imprimimos esse endereço no console e o usamos em nosso navegador.
No entanto, em cenários mais realistas, imprimir o endereço IP pode não ser uma opção. Assim, o mDNS é um protocolo que permite fazer a resolução de nomes definidos localmente para IPs sem a necessidade de infraestruturas dedicadas (como um servidor DNS) [1]. Você pode ler a especificação do protocolo aqui .
Em outras palavras, podemos usar um nome em vez de um IP na URL para acessar o navegador, e o mDNS permitirá resolver esse nome em um endereço IP.
Este protocolo opera sobre multicast UDP [2]. Observe que o “m†de mDNS significa “multicast†[1].
É importante levar em consideração que o dispositivo que está chegando ao servidor também precisa de mDNS. Já testei com uma máquina Windows 10 e ela consegue realizar a resolução do endereço. Em sistemas operacionais mais antigos, talvez seja necessário instalar software adicional para poder fazer a resolução.
Código completo:
#include <ESPmDNS.h> #include <WiFi.h> #include <ESPAsyncWebServer.h> const char* ssid = "SSID"; const char* password = "SENHA"; AsyncWebServer server(80); void setup(){ Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi.."); } if(!MDNS.begin("esp32")) { Serial.println("Error starting mDNS"); return; } Serial.println(WiFi.localIP()); server.on("/hello", HTTP_GET, [](AsyncWebServerRequest *request){ request->send(200, "text/plain", "Hello World"); }); server.begin(); } void loop(){}
Testando o código
Em seguida, abra um navegador da Web de sua escolha e digite o seguinte na barra de endereço:
http://esp32.local/hello
Após acessar a URL anterior, o navegador deve chegar ao servidor e receber como saÃda a mensagem “Hello World†que definimos no código. Você pode conferir o resultado esperado: