Как настроить mDNS на ESP32


Если в вашей сети есть один ESP32, вы можете подключиться к нему, используя его IP-адрес (например, 192.168.1.128). Но представьте, что у вас несколько ESP32, разбросанных по всему дому. Вы внезапно обнаружите, что вам нужно запомнить несколько IP-адресов. Это ужасно долго и неинтересно. Вот здесь и приходит на помощь mDNS.

Как настроить mDNS на ESP32

mDNS позволяет вам получить доступ к веб-серверу, работающему на вашем ESP32, используя удобное имя хоста, например «esp32.local», вместо того, чтобы возиться с IP-адресом. И вот лучшая часть — даже если IP-адрес вашего ESP32 изменится, mDNS автоматически преобразует новый IP-адрес в то же имя хоста. Это означает, что вы можете продолжать использовать то же имя хоста, не беспокоясь об отслеживании изменений IP-адреса.

Довольно удивительно, не правда ли? В этом уроке вы шаг за шагом узнаете, как настроить mDNS на ESP32. Но сначала давайте поговорим о том, что такое mDNS.

Что такое mDNS?

Тридцать лет назад, когда Интернет был еще в зачаточном состоянии, если вы хотели посетить веб-сайт, вам нужно было знать его IP-адрес. Это потому, что компьютеры могут общаться только с помощью чисел.

Рассмотрим IP-адрес типа 127.33.54.200: он длинный, его трудно запомнить, и он, конечно, неудобен для пользователя. Нам нужен был способ перевести эти машиночитаемые IP-адреса во что-то более понятное.

В начале 1980-х годов Пол Мокапетрис представил революционную систему, которая сопоставляла IP-адреса с более запоминающимися доменными именами, и так родилась система доменных имен (DNS). Эта система остается основой сегодняшнего Интернета.

Когда вы вводите доменное имя, например google.com, в свой браузер, он запрашивает у серверов имен, есть ли у них записи DNS для этого домена. Запись DNS — это просто файл, который говорит, что «этот домен» сопоставляется с «этим IP-адресом», а сервер имен — это специализированный сервер, который хранит такие записи DNS. Например, доменное имя google.com может быть связано с IP-адресом, например, 142.250.189.174.

Система доменных имен является одной из основ работы Интернета; без нее мы не смогли бы с легкостью пользоваться Интернетом.

Но что насчет локальной домашней сети? В такой среде, где устройства часто включаются и выключаются, подключаются и отключаются от сети и часто имеют динамические IP-адреса, эта система становится непрактичной, поскольку развертывание выделенного сервера только для преобразования имен хостов в IP-адреса не является возможным решением. Есть ли более простой способ? Да, действительно — это называется Multicast DNS, сокращенно mDNS.

mDNS — это децентрализованный одноранговый протокол, специально разработанный для небольших сетей. Он позволяет устройствам обнаруживать IP-адреса друг друга. Он работает, позволяя каждому устройству транслировать свое имя и IP-адрес всем остальным устройствам в сети. Очевидно, что этот подход не очень подходит для Интернета в целом, но локальные сети достаточно малы, чтобы накладные расходы не были проблемой.

Основные характеристики и преимущества mDNS:

    • Удобные имена хостов: доступ к устройствам в сети можно осуществлять с помощью легко запоминающихся имен хостов, например «esp32.local», вместо IP-адресов.
    • Динамическая обработка IP-адресов: даже если IP-адрес устройства изменится, mDNS позаботится о разрешении нового IP-адреса с тем же именем хоста.
    • Нулевая настройка: дополнительная настройка DNS не требуется, поскольку mDNS работает автономно в локальных сетях.
    • Независимость от платформы: mDNS можно использовать на различных устройствах и операционных системах, что обеспечивает беспроблемную интеграцию.

Давайте рассмотрим пошагово, как настроить mDNS на ESP32.

Шаг 1. Настройка Arduino IDE

Мы будем использовать Arduino IDE для программирования ESP32, поэтому, прежде чем продолжить, убедитесь, что у вас в данной IDE установлено дополнение для работы с ESP32.

Шаг 2. Подключите ESP32 к компьютеру

Для подключения платы ESP32 к компьютеру используйте кабель micro-USB.

Использование кабеля micro-USB для подключения платы ESP32 к компьютеру

Шаг 3. Настройка сетевых учетных данных

Перед загрузкой скетча ниже вам необходимо внести одно существенное изменение. Обновите следующие две переменные, указав ваш фактический SSID и пароль WiFi.

Шаг 4. Загрузите код

Вот простой скетч, демонстрирующий настройку mDNS на плате ESP32. Этот код подключается к сети Wi-Fi, запускает службу mDNS и создает HTTP-сервер для обслуживания простой веб-страницы. После загрузки вы сможете получить доступ к веб-серверу, перейдя по адресу http://esp32.local/ в веб-браузере.

Шаг 5. Тестирование работы кода

После загрузки кода откройте окно монитора последовательной связи и установите скорость передачи данных 115200. Затем нажмите кнопку EN на ESP32. Подключение к сети может занять несколько минут, после чего появятся сообщения «mDNS responder started» и «HTTP server started».

Сообщения в окне монитора последовательной связи, свидетельствующие о начале работы с mDNS

Далее запустите веб-браузер и перейдите по адресу http://esp32.local/ . ESP32 должен отобразить веб-страницу с приветственным сообщением.

Веб-страница с приветственным сообщением, свидетельствующая об успешной работе mDNS

Пояснение кода

Скетч начинается с включения необходимых библиотек: WiFi.h для подключения к сети WiFi, WebServer.h для настройки HTTP-сервера и ESPmDNS.h для служб mDNS.

Далее определяются две константы ssidи password. Это заполнители для имени вашей сети Wi-Fi (SSID) и пароля.

Следующая строка создает объект веб-сервера, который прослушивает порт 80 (порт HTTP по умолчанию).

В функции setup() мы сначала инициализируем последовательную связь с ПК.

Затем ESP32 пытается подключиться к сети WiFi, используя функцию WiFi.begin(), которая принимает SSID (имя сети) и пароль в качестве аргументов.

Пока ESP32 пытается подключиться к сети, мы можем проверить состояние подключения с помощью функции WiFi.status().

Далее мы просто вызываем метод begin() для внешней переменной с именем MDNS для запуска службы mDNS. Эта MDNS переменная является экземпляром класса MDNSResponder, который предоставляет всю функциональность разрешения адресов.

Вызов ранее упомянутого метода begin() показан ниже. В качестве аргумента метода мы передаем желаемое имя хоста (которое будет использоваться в URL). Важно отметить, что имя хоста не должно быть длиннее 63 символов.

Следующий блок кода просто устанавливает обработчик для корневого URL. Когда кто-то обращается к корневому URL, вызывается handle_OnConnect(). Он также устанавливает обработчик, который вызывается, когда запрошенный URL не найден на сервере.

Наконец, чтобы запустить сервер, мы вызываем метод begin() на объекте сервера.

Функция loop() непрерывно проверяет входящие клиентские запросы и обрабатывает их, вызывая метод handleClient() на объекте сервера.

Это функция handle_OnConnect(), которая отправляет HTML-ответ обратно клиенту при доступе к корневому URL («/»). Она отправляет простую HTML-страницу с приветственным сообщением, используя метод server.send().

Метод server.send()принимает в качестве аргументов код ответа HTTP, тип контента и сам контент. В нашем случае мы отправляем код 200 (один из кодов статуса HTTP), который соответствует ответу OK (указывающему на то, что запрос был успешно обработан). Затем мы указываем тип контента как «text/html». Наконец, у нас есть длинная строка, которая представляет собой не что иное, как HTML-код, который создает простую веб-страницу, которая будет отображать сообщение «Привет!».

Если сервер получает запрос на URL-адрес, которого нет на сервере, функция handle_NotFound()отправляет ответ 404 Not Found.

(Проголосуй первым!)
Загрузка...
41 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *