Можно ли получить IP-адрес клиента из библиотеки Arduino Ethernet2 для W5500 во время вызова client.connected()?

Я нашел сообщения, объясняющие, как получить IP-адрес клиента, изменив библиотеку Ethernet W5100 и библиотеку Adafruit CC3000, но не библиотеку Ethernet2 для чипа W5500, которая настолько отличается, что мод W5100 не будет работать. Я подозреваю, что структура TCP Socket будет содержать его, но нигде не смог найти его объявление, чтобы подтвердить это, поэтому я могу изменить библиотеку, чтобы сделать ее доступной.

, 👍1

Обсуждение

в библиотеке Ethernet 2.00 (это не Ethernet2), EthernetClient имеет remoteIP(), @Juraj


2 ответа


1

Используйте новое обновление "старой" библиотеки Ethernet. Это версия 2.00, и вы можете установить или обновить ее в диспетчере библиотек в среде IDE. Обратите внимание, это не библиотека Ethernet2. Новая библиотека Ethernet поддерживает W5500 и имеет client.remoteIP().

пример

  if (client.connect(server, 80)) {
    Serial.print("connected to ");
    Serial.println(client.remoteIP());

Новые функции в версии 2.0.0 Автоматическое определение Ethernet-оборудования W5100, W5200 и W5500.

,

Приведенная здесь версия предназначена для чипа W5100 и не будет работать с W5500, как указано на справочной странице Arduino для библиотеки Ethernet: «Библиотека Ethernet (Ethernet.h) управляет чипом W5100, а библиотека Ethernet2 (Ethernet2.h) ) управляет чипом W5500, все функции остаются прежними»., @Mr. Mxyxptlik

https://github.com/arduino-libraries/Ethernet/релизы, @Juraj

Спасибо, ссылка оказалась полезной. Как я и думал, он уже был установлен в моей Arduino IDE. Когда я посмотрел на имена исходных файлов, я увидел W5100.cpp и подумал, что ничего не изменилось. Однако, глядя на код, я вижу дополнения для работы с W5200 и W5500., @Mr. Mxyxptlik


0

Это решение работает: http://forum.arduino.cc/index.php/topic,82416.0. .html, если "W5100.readSnDIPR(_sock, remoteIP);" заменяется на "w5500.readSnDIPR(_sock, remoteIP);" [обратите внимание на строчную букву «w»]. Я так не думал, потому что не могу найти readSnDIPR() в исходном коде библиотеки Ethernet2, но после просмотра спецификации Wiznet 5500 (https://www.mouser.com/pdfdocs/w5500_ds_v100e.PDF) Я понял, что это, вероятно, было чтение регистра "Socket n Destination IP Address" и решил попробовать и посмотреть, связано ли это . Это произошло, и после подключения успешно возвращается удаленный IP-адрес.

,

а почему вы используете устаревшую библиотеку? Ethernet2 устарел, @Juraj

Со справочной страницы Arduino для библиотеки Ethernet: «Библиотека Ethernet (Ethernet.h) управляет чипом W5100, а библиотека Ethernet2 (Ethernet2.h) управляет чипом W5500; все функции остаются прежними». Текущая версия Ethernet2 — это V2, кстати, и в ее клиентском классе нет метода remoteIP., @Mr. Mxyxptlik

новой версии меньше месяца. документы не обновляются, @Juraj

У меня есть последняя версия, доступная через Arduino IDE. Возможно, вам следует разместить здесь ссылку на более позднюю версию для других., @Mr. Mxyxptlik