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:



