Как получить список IP-адресов в локальной сети с помощью NodeMcu?
Я собираюсь создать систему Интернета вещей. Я использую Raspberry Pi в качестве брокера MQTT и веб-сервера. Каждый день Pi получает новый IP-адрес, поэтому мне нужно найти его новый IP-адрес через ESP8266, чтобы использовать эту информацию в своем коде. Я знаю, что могу использовать фиксированный IP-адрес, но не хочу, поэтому лучше, если я смогу найти решение.
@sistemofsis, 👍1
Обсуждение2 ответа
Лучший ответ:
Прежде всего, если ваш 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
Вам следует использовать mDNS. Установите (если это еще не установлено) avahi-daemon
на Raspberry.
Затем ознакомьтесь с библиотекой ESP8266mDNS и имеющимися в ней примерами. Особенно пример mDNS-SD_Extended, который выполняет запрос службы в сети k.
Мне также нужны IP-адреса некоторых других устройств. Вот почему mDNS не работает., @sistemofsis
Тогда заставьте их также использовать mDNS. Либо так, либо переопределите свои ожидания и требования и используйте статический IP-адрес., @Majenko
- Простой запрос GET с ESP8266HTTPClient
- Преобразование byte* в int в Arduino
- NodeMCU ESP8266 отключился от WiFi после нескольких часов работы
- ESP8266 не может подключиться к брокеру MQTT
- Скетч Arduino для NodeMCU v1.0 (ESP8266-12E) не имеет ошибок при компиляции, но не запускается на плате NodeMCU v1.0 (ESP8266-12E)
- Как связать MPU9250 и NodeMcu?
- NodeMCU не может подключиться к мобильной точке доступа, когда я включаю коды для считывания датчика температуры
- Несколько тем MQTT
Какой вопрос вы задаете?, @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