Обнаружение ESP8266 в сети

Я подключаю ESP8266 к домашней сети (WiFi). После успешного подключения ему присваивается IP. Я отправляю команды на ESP8266 из приложения Android.

Что я могу сделать, чтобы найти ESP8266 в любой сети, к которой также подключено мое приложение для Android? Я спрашиваю об этом, потому что всякий раз, когда я меняю сеть, ESP8266 назначается новый IP-адрес, и мне приходится вручную менять IP-адрес в приложении Android.

Мне просто нужно найти ESP8266 в сети, получить его IP-адрес и отправить ему команды.

Заранее спасибо.

, 👍1

Обсуждение

На этот вопрос может быть полезен ответ: https://arduinoprosto.ru/q/38092/how-do-i-know-ip-of-assigned-ip-address-to-esp8266., @TomG

Для этого и нужен mDNS. API ESP866 содержит примеры, показывающие, как его использовать., @Majenko

@Majko: mDNS полезная штука, но у меня много проблем с его использованием в моем продукте. Я попробую опубликовать новый выпуск по этому поводу. Кстати, спасибо за ответ, я очень ценю помощь каждый раз, когда вы вносите свой вклад., @KarmaCoding

я использую сокет для связи с esp8266. следовательно, нужен IP-адрес., @KarmaCoding

@Majko: я пробовал использовать mDNS, но он не работает, когда esp находится в режиме STA., @KarmaCoding

Вы нашли какое-либо решение этой проблемы?, @Arslan


2 ответа


Лучший ответ:

2

Лучший способ сделать это, если вы делаете это для продукта, — использовать протокол SSDP. Это простой протокол обнаружения служб, который позволяет вам искать устройство в сети. Сейчас он реализован во многих интеллектуальных устройствах с помощью dlna или upnp.

Реализовать SSDP-сервер на esp8266 и Внедрите клиент SSDP на устройстве Android.

При таком подходе вы можете найти множество устройств. Использование простого фильтра для получения конкретной информации, которую вы хотите, из пакета SSDP может позволить вам получать только нужные устройства из сети.

Вся документация по SSDP представлена на странице Arduino esp8266 GitHub.

Вы можете транслировать свой IP-адрес в пакете SSDP, а затем использовать его в своем приложении. Но самая важная проблема с динамическим IP-адресом остается нерешенной, поскольку ваш IP-адрес всегда будет меняться, а использование IP-адреса для доступа к оборудованию, такому как домашняя автоматизация, не является правильный путь.

Вы можете использовать любой из них. 1) Статический IP-адрес, если вам нужен автономный доступ или 2) Используйте облачные решения, такие как mqtt, для доступа к устройству где угодно, не беспокоясь о NAT, IP или чем-то еще.

Но второй вариант скорее коммерческий, для его реализации потребуется несколько ресурсов.

,

@KarmaCoding Если вы думаете, что я ответил на ваш вопрос, то хорошей идеей будет проголосовать за него или отметить его как принятый ответ. Если хотите, я могу добавить к нему дополнительную информацию., @Rajendra


3

Некоторые решения, которые мне помогли:

  1. Зарезервированный IP — используйте резервирование DHCP маршрутизатора, чтобы каждый раз предоставлять одному и тому же ESP один и тот же IP-адрес.

  2. Статический IP. Настройте ESP на использование одного и того же IP каждый раз, полностью игнорируя функцию DHCP. Это также загружает ESP немного быстрее. WiFi.config(ip, шлюз, подсеть);

  3. Сохраните IP-адрес в Serial при загрузке, чтобы можно было хотя бы увидеть, что назначено: Serial.println(WiFi.localIP());

  4. Присвойте STA уникальное имя, которое можно найти на странице клиентов DCHP маршрутизатора: WiFi.hostname("look_here");

  5. используйте mDNS, чтобы назначить устройству локальный URL-адрес типа домена: MDNS.begin("esp8266");// по умолчанию установлено значение "http://esp8266. местный/"

,

тоже полезный ответ. но я нахожу что-то, что можно реализовать на уровне продукта с различными настраиваемыми рабочими протоколами для нескольких устройств для поиска их в сети, где будут указаны только мои устройства, и это, должно быть, самый быстрый способ. я использую сокет для связи с esp8266. следовательно, нужен IP-адрес., @KarmaCoding