Quando desenvolvemos aplicações com microcontroladores conectados à rede, como o ESP32, uma das primeiras dificuldades práticas aparece logo após o dispositivo entrar no Wi-Fi: como o usuário, o aplicativo ou outro equipamento da rede vai descobrir o endereço IP desse ESP32?
Em uma rede doméstica, escolar, industrial ou de laboratório, o endereço IP quase sempre é atribuído automaticamente por DHCP, ou seja, pelo roteador. Hoje o ESP32 pode receber 192.168.0.34; amanhã, depois de reiniciar o roteador, pode receber 192.168.0.51. Isso cria um problema simples, mas muito comum: se eu hospedo uma página web, uma API REST, um painel de configuração ou um serviço TCP dentro do ESP32, como acesso esse serviço sem ficar procurando o IP no monitor serial ou na lista de clientes do roteador?
É aqui que entra o mDNS, sigla para Multicast DNS. Ele permite que dispositivos em uma rede local sejam encontrados por nome, sem depender de um servidor DNS tradicional. Em vez de acessar:
http://192.168.0.34
podemos acessar algo como:
http://esp32-sensor.local
A documentação oficial da Espressif descreve o mDNS como um serviço UDP multicast usado para descoberta de hosts e serviços na rede local. Ela também destaca que, em versões atuais do ESP-IDF, o componente mDNS foi movido para um repositório separado e pode ser adicionado ao projeto com idf.py add-dependency espressif/mdns. (Espressif Systems)
No contexto de sistemas embarcados, isso é extremamente útil porque evita que o dispositivo precise ter uma interface complexa apenas para informar seu endereço IP. Um sensor ambiental, um controlador de relé, um gateway Modbus, um nó MQTT local ou um pequeno servidor HTTP embarcado podem ser encontrados diretamente por nome. Isso reduz atrito na instalação, melhora a experiência do usuário e facilita testes em bancada.
Em termos de arquitetura embarcada, o mDNS se encaixa como uma camada de descoberta de serviço dentro da comunicação do sistema. Ele não substitui TCP, UDP, HTTP, MQTT ou WebSocket; ele apenas ajuda os outros dispositivos a descobrirem onde determinado serviço está rodando. Essa separação é importante: o mDNS resolve o problema de localização local, enquanto o protocolo da aplicação resolve o problema de troca de dados.
Essa abordagem também conversa bem com boas práticas de projeto embarcado. Em sistemas com poucos recursos, como microcontroladores, normalmente buscamos reduzir dependências manuais, simplificar configuração e tornar o sistema mais robusto em campo. Bruce Powel Douglass destaca que sistemas embarcados costumam operar sob restrições severas de memória, processamento, custo, energia e confiabilidade, o que torna importante escolher soluções arquiteturais que otimizem o sistema sem adicionar complexidade desnecessária.
No caso do ESP32, o uso do mDNS é especialmente interessante porque esse microcontrolador já possui conectividade Wi-Fi integrada e é muito usado em projetos IoT. Em vez de exigir que o usuário descubra o IP do dispositivo, podemos registrar um nome como meu-dispositivo.local e, opcionalmente, anunciar serviços como _http._tcp, _mqtt._tcp ou outro serviço local. Assim, um computador, celular ou outro nó da rede pode encontrar o dispositivo de maneira mais natural.
Portanto, o mDNS não é apenas uma “comodidade”. Ele melhora a implantação, facilita manutenção, reduz erros humanos e torna o produto mais amigável. Em protótipos, ele acelera testes. Em produtos, ele reduz suporte técnico. Em laboratórios, ele permite trabalhar com vários dispositivos sem decorar IPs. Em sistemas distribuídos, ele pode ajudar os nós a se descobrirem localmente sem depender da internet.