Можно ли получить IP-адрес клиента из библиотеки Arduino Ethernet2 для W5500 во время вызова client.connected()?
Я нашел сообщения, объясняющие, как получить IP-адрес клиента, изменив библиотеку Ethernet W5100 и библиотеку Adafruit CC3000, но не библиотеку Ethernet2 для чипа W5500, которая настолько отличается, что мод W5100 не будет работать. Я подозреваю, что структура TCP Socket будет содержать его, но нигде не смог найти его объявление, чтобы подтвердить это, поэтому я могу изменить библиотеку, чтобы сделать ее доступной.
@Mr. Mxyxptlik, 👍1
Обсуждение2 ответа
Используйте новое обновление "старой" библиотеки 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
Это решение работает: 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
- Arduino Ethernet Shield часто теряет свой IP-адрес
- Как настроить пул DHCP для ESP-WIFI-MESH?
- Как объявить массив переменного размера (глобально)
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- Можно ли сделать несколько функций loop() с помощью Arduino Uno?
в библиотеке Ethernet 2.00 (это не Ethernet2), EthernetClient имеет remoteIP(), @Juraj