Как получить список IP-адресов в локальной сети с помощью NodeMcu?

Я собираюсь создать систему Интернета вещей. Я использую Raspberry Pi в качестве брокера MQTT и веб-сервера. Каждый день Pi получает новый IP-адрес, поэтому мне нужно найти его новый IP-адрес через ESP8266, чтобы использовать эту информацию в своем коде. Я знаю, что могу использовать фиксированный IP-адрес, но не хочу, поэтому лучше, если я смогу найти решение.

, 👍1

Обсуждение

Какой вопрос вы задаете?, @MichaelT

Добро пожаловать на обмен стеками Arduino. Обязательно посетите экскурсию, чтобы узнать, как здесь все работает: https://arduino.stackexchange.com/tour, @oh.dae.su

Вы можете использовать mDNS., @Gerben

В библиотеках, которые я пробовал, возникла какая-то проблема, сейчас пытаюсь решить ее с помощью Pinging., @sistemofsis

Как говорит @Gerben, используйте многоадресный DNS, известный как AVAHI, он даже поддерживается по ссылке ESP: https://tttapa.github.io/ESP8266/Chap08%20-%20mDNS.html, @MatsK


2 ответа


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

-1

Прежде всего, если ваш Raspberry Pi действует как веб-сервер и брокер mqtt, на мой взгляд, вам следует назначить фиксированный IP-адрес либо через конфигурацию в точке доступа/маршрутизаторе, либо через статический IP-адрес.

Однако, если вы настаиваете на своем подходе, вы можете использовать практический метод проверки связи всех адресов в вашей подсети LAN и проверки MAC-адресов респондентов.
Если MAC-адрес совпадает с адресом вашего Pi, вы его нашли.

Я сам не проверял, но эта библиотека кажется иметь то, что вам нужно для этой цели.
После обнаружения отвечающего IP-адреса с помощью ping он пытается определить соответствующий MAC-адрес, используя etharp_find_addr.

Это поле структуры является ссылкой на 6-байтовый массив символов, который можно использовать для сравнения с MAC-адресом Raspberry Pi:

response.DestMacAddress->addr

Обновление:
Если вы хотите найти только IP-адрес Raspberry Pi, лучшим выбором будет использование mDNS, предложенное @Majko.
Если вы ищете все устройства в вашей локальной сети, как следует из названия, пинг имеет больше смысла.

,

У меня была проблема с Lib, теперь я ее исправил и очень близок к результату. В цикле я отправляю все IP-адреса, которые мне нужны, и MAC-адреса показаны в pinger.OnEnd([](const PingerResponse& ответ) функция. Я написал функцию для преобразования ответа.DestMacAddress->addr в строку. mac = mac2String(response.DestMacAddress->addr); Я хотел бы включить его в свою функцию настройки для создания списка. Но я не могу. Не могли бы вы мне помочь?, @sistemofsis

Извините, но я не могу понять вашего объяснения. Я думаю, было бы лучше, если бы вы задали отдельный вопрос о переполнении стека по этой проблеме программирования. Затем вы можете разместить весь свой код, результаты/сообщения об ошибках и то, что вы ожидаете от программы. Тогда не стесняйтесь ссылаться на этот вопрос., @oh.dae.su


1

Вам следует использовать mDNS. Установите (если это еще не установлено) avahi-daemon на Raspberry.

Затем ознакомьтесь с библиотекой ESP8266mDNS и имеющимися в ней примерами. Особенно пример mDNS-SD_Extended, который выполняет запрос службы в сети k.

,

Мне также нужны IP-адреса некоторых других устройств. Вот почему mDNS не работает., @sistemofsis

Тогда заставьте их также использовать mDNS. Либо так, либо переопределите свои ожидания и требования и используйте статический IP-адрес., @Majenko