arduino + ENC28j60 в режиме клиента
- Войдите на сайт для отправки комментариев
Пнд, 04/01/2021 - 09:12
Всем привет, не могу разобраться с, казалось бы, простой ситуацией arduino + ENC28j60 в режиме клиента для парсинга сайта. Подключаю все по инструкции и простой скетч из примера у меня не работает
#include <Ethernet.h> #include <SPI.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 10, 0, 0, 177 }; byte server[] = { 64, 233, 187, 99 }; // Google EthernetClient client; void setup() { Ethernet.begin(mac, ip); Serial.begin(9600); delay(1000); Serial.println("connecting..."); if (client.connect(server, 80)) { Serial.println("connected"); client.println("GET /search?q=arduino HTTP/1.0"); } else { Serial.println("connection failed"); } } void loop() { if (client.available()) { char c = client.read(); Serial.print(c); } if (!client.connected()) { Serial.println("disconnecting."); client.stop(); for(;;); } }
Первая мысль - проверить работает ли вообще моя связка, проверил вот на таком скече:
#include <EtherCard.h> static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; byte Ethernet::buffer[700]; void setup () { Serial.begin(57600); Serial.println(F("n[testDHCP]")); Serial.print("MAC: "); for (byte i = 0; i < 6; ++i) { Serial.print(mymac[i], HEX); if (i < 5) Serial.print(':'); } Serial.println(); if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) Serial.println(F("Failed to access Ethernet controller")); Serial.println(F("Setting up DHCP")); if (!ether.dhcpSetup()) Serial.println(F("DHCP failed")); ether.printIp("My IP: ", ether.myip); ether.printIp("Netmask: ", ether.netmask); ether.printIp("GW IP: ", ether.gwip); ether.printIp("DNS IP: ", ether.dnsip); } void loop () {}
на нем ардуинка получает ip, также запускал скеч локального сервера - тоже все работает, а вот достучаться до сервера в интернете никак не могу, видимо я чего-то не понимаю
Gateway IP проверить, фаерволл...
то есть проблема, скорее всего, где-то в роутере?
Скорее всего в коде.
MAC'и в скетчах указаны верно?
Выведите в Serial все LAN-параметры в первом скетче и сравните с параметрами своей подсети.
МАС я пробовал менять, пробовал и из рабочих скечей и ip подставлял свои (тоже брал из рабочего скеча)
По поводу первого скетча, который не работает. Вижу там указан IP клиента при инициализации (Ethernet.begin(mac, ip)), значит предполагается статика? Тогда почему не указаны IP шлюза (GW) и маска подсети (Netmask) ?
"MAC-адрес уникальный идентификатор, присваиваемый каждой единице активного оборудования или некоторым их интерфейсам в компьютерных сетях Ethernet". Надо ставить тот, что есть, а не гадать.
И...:
IP, Gateway, Mask, DNS - должны быть "заточены" под вашу подсеть.
По поводу первого скетча, который не работает. Вижу там указан IP клиента при инициализации (Ethernet.begin(mac, ip)), значит предполагается статика? Тогда почему не указаны IP шлюза (GW) и маска подсети (Netmask) ?
пробовал и так
думал можт уже что с роутером, пробоввал в другом дома и провайдере, та же петрушка - в локальной сети все работает, а сервер в интернете достать не может, и даже более ардуинка не может достать 192.168.1.1.
Если у кого есть такая железка, проверьте вот это последний код, буду благодарен
Это что за библиотека такая для ENC?
Если в локалке все работает, а ко внешним ресурсам не идет то 99% - это неправильно указанный гейтвей.
sadman41
ТС и внутренние ресурсы не видит.
Это что за библиотека такая для ENC?
Если в локалке все работает, а ко внешним ресурсам не идет то 99% - это неправильно указанный гейтвей.
а ничего, что ресурс - https://www.google.com/ ? это вроде 443 порт?
if
(client.connect(server, 80)) {
14
Это что за библиотека такая для ENC?
Если в локалке все работает, а ко внешним ресурсам не идет то 99% - это неправильно указанный гейтвей.
а ничего, что ресурс - https://www.google.com/ ? это вроде 443 порт?
if
(client.connect(server, 80)) {
14
не буду утверждать, но, вроде это для https, но в любом случае я попробовал и 443
в общем, пробую я этот скеч
получаю вот это:
я правильно понимаю что это мои параметры? пробовал их забить - ноль толку, подумываю может попробовать другую железку купить, ну что-то совсем странная у меня проблема, не видел чтобы кто-то с ней сталкивался
Ну, посмотрите, какой IP в первом скетче первопоста и какой по DHCP раздается.
в общем, вроде, я на пути решения - сайт "www.googole.com" ардуинка достает, а вот по ip, почему-то, нет
Ну, не знаю. Не сталкивался с такой фигнёй, когда ENC гонял. Но, вообще, она не для сложных вещей.
На роутере DHCP поднят. А в коде он используется? В коде запрос к DHCP есть? Покажите крайний/сегодняшний вариант кода.
поднят, вот такой вариант работает:
в общем сайт "www.google.com" работает а вот по ip нет
Вы один из этих IP используете? Если да, то я пробовал на ПК и там идет просто переадресация на www.google.com
Великое переполнение millis()
Вы один из этих IP используете? Если да, то я пробовал на ПК и там идет просто переадресация на www.google.com
не, я использую 64, 233, 187, 99 но это, наверно, не так важно, я в режиме клиента даже в локальной сети не могу на страницу роутера постучать, во всей видимости только по DNS
Невероятные истории, ей-богу.
http://arduino.ru/forum/programmirovanie/get-zapros-na-lokalnyi-server-c...
большое спасибо, правда пока не догоню что там надо сделать
Я рекомендую взять эту библиотеку, а примером Webclient из стандартного ардуиновского Ethernet: https://github.com/ntruchsess/arduino_uip/tree/fix_errata12
Только не забывайте в примере #include заменить с ethernet.h на uipethernet.h
большое спасибо, правда пока не догоню что там надо сделать
Ну Вы и капец! Там же пример есть:
Уж куда дальше подсказывать - только самому написать. Это уже в платный раздел.
Ну Вы и капец! Там же пример есть:
я не понял как там "вручную" назначить ether.hisip (который в принципе назначается в результате работы dnslookup), пока не могу нагуглить как это делается
попробовал скачать репозиторий, при компиляции выдает
попробовал установить из встроенного менеджера - так же по ip не достает
Данная ошибка несущественна.
Второй фрагмент кода, закомментированные строки показывают работу с hisip: https://forum.arduino.cc/index.php?topic=617210.0
Если не справитесь, то останется только кому-то стороннему расчехлять свои модули.
я не понял как там "вручную" назначить ether.hisip (который в принципе назначается в результате работы dnslookup), пока не могу нагуглить как это делается
Уж простите, но я перейду на "ты". Ты точно читать умеешь? Со зрением как дела? Все в примере указано (что я дополнительно продублировал)! Вместо тех данных вставляешь свои, удаляешь лишнее и профит.
Я могу казаться грубым, просто маска на плату не легла с первого раза, - повторно переделываю плату. Но делать за вас такие элементарные вещи, которые тут "каждый второй крутой захожий типа программист" делает - увольте. Закажите в платном разделе, рублей за 500 сделают....
удалю этот пост, я ошибся, код не работает
я не понял как там "вручную" назначить ether.hisip (который в принципе назначается в результате работы dnslookup), пока не могу нагуглить как это делается
Уж простите, но я перейду на "ты". Ты точно читать умеешь? Со зрением как дела? Все в примере указано (что я дополнительно продублировал)! Вместо тех данных вставляешь свои, удаляешь лишнее и профит.
Я могу казаться грубым, просто маска на плату не легла с первого раза, - повторно переделываю плату. Но делать за вас такие элементарные вещи, которые тут "каждый второй крутой захожий типа программист" делает - увольте. Закажите в платном разделе, рублей за 500 сделают....
ну, простите, такой вот я, тупой
Любой залитый скетч ардуину "сбрасывает в ноль"
Любой залитый скетч ардуину "сбрасывает в ноль"
благодарю
в общм никак не могу победить этот шилд, вроде уже и нашел скечи которые должны работать, но ни в какую... окроются магазины может взять другой шилд попробовать....
в общем считерил, взял шилд на w5100 и на нем отлично заработал скеч
И так и не понял почему на enc28j60 так и не заработал скеч