Частые причины
-
🌐
mDNS не поддерживается сетью
Некоторые роутеры или сетевые среды блокируют или не пересылают multicast DNS пакеты, предотвращая разрешение имён
.local. -
🔧
mDNS не запущен в коде
Если
MDNS.begin("esp32")отсутствует или расположен до подключения к Wi-Fi, служба не будет объявлена в сети. -
🧯
Файрвол или антивирус блокирует mDNS
Хост-системы вроде Windows или macOS могут иметь правила файрвола, блокирующие входящие ответы mDNS на порту 5353.
-
📱
Ограничения мобильной точки доступа или гостевой сети
Некоторые режимы точек доступа, хотспоты или гостевые Wi-Fi сети изолируют клиентов и блокируют multicast-трафик, включая mDNS.
Симптомы
esp32.local не найден в браузере или при пинге
Попытка открыть http://esp32.local/ завершается ошибкой, хотя ESP32 находится в той же сети.
IP-адрес работает, но имя хоста — нет
ESP32 доступен по IP-адресу, но имя .local не разрешается.
Работает на одном компьютере, но не на другом
Некоторые системы корректно разрешают mDNS, а другие нет — часто из-за различий на уровне ОС или отсутствия служб обнаружения.
Bonjour или Avahi не запущены
На системах без встроенной поддержки mDNS (Linux, Windows) необходимые фоновые службы могут отсутствовать или быть остановлены.
Решения
Убедитесь, что MDNS.begin() вызывается после подключения к Wi-Fi
Инициализируйте mDNS после успешного подключения, разместив MDNS.begin("esp32") внутри обработчика события подключения к Wi-Fi.
Установите Bonjour (Windows) или Avahi (Linux)
Добавьте или включите инструменты клиента mDNS на вашем компьютере для поддержки разрешения .local на разных платформах.
Используйте IP-адрес как запасной вариант
Если mDNS ненадёжен, используйте WiFi.localIP() для получения IP-адреса устройства и прямого подключения.
Избегайте гостевых сетей и хотспотов
Используйте обычную локальную сеть, где клиенты могут обнаруживать друг друга через multicast; избегайте функций изоляции гостей или разделения клиентов.
Подробнее
mDNS не работает на ESP32
Вы пытаетесь открыть ESP32 по адресу http://esp32.local, но браузер сообщает «сервер не найден» или пинг не проходит. При этом, когда вы вводите IP-адрес напрямую (например, http://192.168.1.104), всё работает.
Это признак того, что multicast DNS (mDNS) — система, которая делает имена .local рабочими — не функционирует корректно в вашей сети или на устройстве. Это руководство поможет вам понять, как работает mDNS на ESP32 и что делать, когда он не работает.
Что такое mDNS?
Multicast DNS позволяет устройствам в локальной сети разрешать имена вроде esp32.local без центрального DNS-сервера. Он использует multicast-трафик на порту 5353 и часто применяется в локальных сетях для обнаружения IoT-устройств, принтеров и т.д.
ESP32 поддерживает mDNS через библиотеку ESPmDNS. В коде:
#include <ESPmDNS.h>
if (!MDNS.begin("esp32")) {
Serial.println("Ошибка запуска mDNS");
}
Это должно сделать esp32.local доступным — но только если сеть и ваша хост-система это позволяют.
Распространённые симптомы неработающего mDNS
esp32.local не разрешается
Вы можете пинговать IP-адрес ESP32 напрямую, но:
ping esp32.local
возвращает Host not found (Хост не найден).
Работает только на некоторых устройствах
mDNS может работать на одном ноутбуке (например, MacBook), но не на другом (например, ПК с Windows), что указывает на различия на уровне ОС или служб.
Работает по IP-адресу, не работает по имени хоста
Все функции через IP (HTTP, OTA и т.д.) работают идеально, но .local никогда не разрешается. Это часто встречается на Windows, если Bonjour не установлен.
Основные причины и исправления
🧯 mDNS неправильно инициализирован
MDNS.begin() должен вызываться после подключения ESP32 к Wi-Fi:
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
MDNS.begin("esp32");
Если он выполняется слишком рано (до инициализации сетевого стека), он тихо завершится неудачей.
🔒 Bonjour или Avahi не установлены
На Windows mDNS требует Apple Bonjour (поставляется с iTunes или доступен отдельно).
На Linux установите avahi-daemon и nss-mdns:
sudo apt install avahi-daemon libnss-mdns
macOS имеет встроенную поддержку mDNS через Bonjour.
🌐 Сеть не поддерживает multicast
Многие гостевые Wi-Fi сети или мобильные хотспоты блокируют трафик между клиентами или multicast-пакеты.
Исправления:
- Используйте домашний роутер, а не телефонный хотспот
- Отключите «Изоляцию AP» (AP Isolation) в настройках роутера
- Убедитесь, что все устройства находятся в одной подсети
🛡 Файрвол блокирует порт 5353
На некоторых системах файрволы блокируют входящие или исходящие UDP-пакеты на порту 5353. Проверьте правила файрвола или попробуйте временно отключить его для теста.
Полный пример с mDNS и HTTP-сервером
#include <WiFi.h>
#include <ESPmDNS.h>
#include <WebServer.h>
const char* ssid = "ВашаСеть";
const char* password = "ВашПароль";
WebServer server(80);
void handleRoot() {
server.send(200, "text/html", "<h1>ESP32 mDNS работает!</h1>");
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi подключён");
Serial.print("IP-адрес: ");
Serial.println(WiFi.localIP());
// Запуск mDNS ПОСЛЕ подключения к Wi-Fi
if (MDNS.begin("esp32")) {
Serial.println("mDNS запущен: http://esp32.local");
MDNS.addService("http", "tcp", 80);
} else {
Serial.println("Ошибка запуска mDNS!");
}
server.on("/", handleRoot);
server.begin();
Serial.println("HTTP-сервер запущен");
}
void loop() {
server.handleClient();
}
После загрузки этого кода ESP32 будет доступен по адресу http://esp32.local (при условии, что ваша система поддерживает mDNS).
Обходные решения и альтернативы
- Выведите IP в Serial Monitor и используйте его:
Serial.println(WiFi.localIP());
-
Используйте Captive Portal или MQTT-брокер с фиксированным IP вместо mDNS.
-
Для продакшена рассмотрите использование статического IP или обнаружение через DHCP по известной конечной точке.
-
Если вы используете несколько ESP32, давайте каждому уникальное имя:
MDNS.begin("esp32-kitchen"); // http://esp32-kitchen.local
MDNS.begin("esp32-garage"); // http://esp32-garage.local
Заключение
mDNS на ESP32 — мощная функция, но она зависит от:
- Правильного времени вызова в прошивке
- Поддержки хост-ОС (Bonjour, Avahi)
- Сетевых политик, разрешающих multicast
Если esp32.local не работает, проверьте основы:
- Вызывается ли
MDNS.begin()после подключения к Wi-Fi? - Поддерживает ли ваша ОС mDNS?
- Находитесь ли вы в сети, разрешающей локальное обнаружение?
С правильной настройкой mDNS может сделать ваш ESP32 мгновенно обнаруживаемым в любой локальной сети — без необходимости запоминать IP-адреса.
Быстрая навигация
Дополнительные ресурсы
Всё ещё есть проблема с ESP32? Давайте решим её вместе.
Наш интерактивный мастер устранения неполадок проведёт вас через распространённые проблемы ESP32 и их решения шаг за шагом.
Регистрация не требуется. Начните решать проблемы прямо сейчас!