Добрый день! Подскажите, пожалуйста. Есть Arduino UNO + Ethernet-Shield W5100, раньше эта связка нормально функционировала и как сервер и как клиент, подключение к сети было Онлайм через роутер D-link. Потом я перехал в другую квартиру, также Онлайм, только вот роутер Ростелекомовский свой какой-то поставили. Есть точно рабочий код (возьмём за основу встроенные в IDE примеры Ethernet: WebServer и WebClient), подключаю по точно работающему кабелю к роутеру, все лампочки загораются вроде как обычно, но Ардуино не пингуется! Пробовал и в режиме DHCP получать адрес и прописывать в коде. Также пробовал разные айпи и MAC адреса - всё одно. Зайти на сервер Ардуины не получается, отправить пакет с Ардуины (GET-запрос) на свой локальный сервер не получается. При этом, когда я начинаю Ping-сканирование (и конкретно прописанный в скетче айпи-адрес, а также и сразу весь диапазон локальной сети), то видно, что Ардуино принимает от роутера широковещательные пакеты на себя (лампочка на шилде реагирует). Но вот в обратку не шлёт ничего и не обнаружается. В настройках роутера проверил и отключил MAC-фильтрование и прочие фильтры (даже от DOS атак отключал защиту), в Виндовсе отключал полностью межсетевой экран и Defender`а, пробовал отключать в роутере режим DHCP, пробовал в роутере добавить MAC-адреса компьютера и Ардуины в список разрешенных - картина таже: не пингуется, но на широковещ. пакеты реагирует. Айпи адрес роутера - 192.168.0.1, маска 255.255.255.0, айпи адрес Ардуины ставил разные в диапазоне от 192.168.0.2 до 192.168.0.200, Mac адреса также разные пробовал. Повторюсь, что в другом месте с другим роутером всё нормально работало , а теперь - нет. Народ, подскажите, пожалуйста, что можно еще попробовать предпринять, чтобы как-то прояснить ситуацию??
Для начала я бы проверил подключается ли допустим ноут через данный Ethernet кабель. Далее посмотрел бы какой IP реально поднимается на ардуине. Например так: Код (C++): Serial.println(Ethernet.localIP()); и удостоверился что это действительно 192.168.0.2, а не 0.0.0.0.
Да, ноутбук подключается через этот кабель, проверял, и другой кабель проверял - тоже самое. Данный участок кода: Код (C++): Serial.println(Ethernet.localIP()); как раз есть в скетче-примере WebClient, в монитор com-порта в этом участке кода выводится тот адрес, который и прописан в программе, но вот на пинг не реагирует.
Нашёл сейчас на другом сайте, человек пишет, что "..создал в библиотеке ESP8266WiFi.cpp метод forceARP() (см. ниже) и дергаю его каждые две секунды. Он рассылает по всем сетевым интерфейсам gratuitous ARP анонс со своими MAC/IP, так что больше никто модуль не теряет в сети." Правда проблема немножко другая, у него шилд Wi-Fi и изначльно пингуется, но потом через время теряется связь. Код (C++): extern "C" { #include "lwip/netif.h" err_t etharp_request(struct netif *netif, ip_addr_t *ipaddr)ICACHE_FLASH_ATTR; } void ESP8266WiFiClass::forceARP() { struct netif *netif = netif_list; while (netif) { etharp_request((netif), &(netif)->ip_addr); netif = netif->next; } } Подскажите, кто знает, как на Ethernet-Shield создать нечто подобное, чтобы сама Ардуина рассылала gratuitous ARP анонс со своими MAC/IP? А потом попробовать бы в сниффере на компьютере посмотреть какой MAC/IP берёт на себя Ардуино (хотя может в моём случае Ардуино вообще ничего отсылать не может).
Вобщем поставил другой роутер (D-Link) и на нём всё заработало, так что знайте народ, если у вас роутер от Ростелекома, то он может быть причиной не обнаружающегося Ethernet-Shield`a! Либо его не корректная настройка, но я почти всё перепробовал - не получилось.