Arduino Mega 2560 and ENC28J60

stigmat4j
Offline
Зарегистрирован: 26.09.2013

Всем привет. В моем арсенале мега + ethernet шилд ENC28J60 + библиотека https://github.com/jcw/ethercard

Суть проблемы в том, что не могу достучаться до ардуинки с браузера. Брал тестовый скетч backSoon (внизу поста код). Залил в ардуину и захожу с браузера по прописанному адресу, из данного скетча это 192.168.1.199 и вижу долгое зависание страницы и в конце концов браузер выдает ошибку о том, что страница не доступна. 

Вся соль в том, что на работе сегодня проверял и с первого тыка все прошло удачно. Только залил скетч и в браузере смог увидеть ответ в виде хтмл странички. Посмотреть настройки маршрутизатора не могу на работе.

 

Грешу в порт форвардинге, но тут я слаб.  

Выручайте, товарищи ардуинщики.

 

// Present a "Will be back soon web page", as stand-in webserver.
// 2011-01-30 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php
 
#include <EtherCard.h>

#define STATIC 0  // set to 1 to disable DHCP (adjust myip/gwip values below)

#if STATIC
// ethernet interface ip address
static byte myip[] = { 192,168,1,199 };
// gateway ip address
static byte gwip[] = { 0,0,0,0 };
#endif

// ethernet mac address - must be unique on your network
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[500]; // tcp/ip send and receive buffer

const char page[] PROGMEM =
"HTTP/1.0 503 Service Unavailable\r\n"
"Content-Type: text/html\r\n"
"Retry-After: 600\r\n"
"\r\n"
"<html>"
  "<head><title>"
    "Service Temporarily Unavailable"
  "</title></head>"
  "<body>"
    "<h3>This service is currently unavailable</h3>"
    "<p><em>"
      "The main server is currently off-line.<br />"
      "Please try again later."
    "</em></p>"
  "</body>"
"</html>"
;

void setup(){
    ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);  
  ether.printIp("DNS: ", ether.dnsip); 
  Serial.begin(57600);
  Serial.println("\n[backSoon]");
  
  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) 
    Serial.println( "Failed to access Ethernet controller");
#if STATIC
  ether.staticSetup(myip, gwip);
#else
  if (!ether.dhcpSetup())
    Serial.println("DHCP failed");
#endif

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);  
  ether.printIp("DNS: ", ether.dnsip);  
}

void loop(){
  // wait for an incoming TCP packet, but ignore its contents
  if (ether.packetLoop(ether.packetReceive())) {
    memcpy_P(ether.tcpOffset(), page, sizeof page);
    ether.httpServerReply(sizeof page - 1);
  }
}

 

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Дома подсеть какая?

stigmat4j
Offline
Зарегистрирован: 26.09.2013

LAN

MAC Address:
B0-48-7A-DC-7B-36
IP Address:
192.168.1.1
Subnet Mask:
255.255.255.0
WAN
MAC Address: B0-48-7A-DC-7B-37
IP Address: 10.192.64.61 PPPoE
Subnet Mask: 255.255.255.0  
Default Gateway: 10.192.64.61  
DNS Server: 193.110.112.10 , 193.110.112.9
Online Time: 0 day(s) 00:42:02

Шнурок с интернетом подходит напрямую в маршрутизатор, подключение pppoe, ардуина подключена напрямую в маршрутизатор. 

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

static byte gwip[] = { 0,0,0,0 };

поменяйте на

static byte gwip[] = { 192,168,1,1 };

stigmat4j
Offline
Зарегистрирован: 26.09.2013

Не помогло. 

Смущает еще строка 

#define STATIC 0  // set to 1 to disable DHCP (adjust myip/gwip values below)

 

На маршрутизаторе DHCP включен. 

 

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Попробуйте поставить 1, мало ли чё.

Как вариант еще мак уже такой в сети есть или фильтруется. Он забит с наклейки или от фонаря? Дуню пинговать пробовали?

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

И кстати на маршрутизаторе посмотрите диапазон разрешенных айпишников

stigmat4j
Offline
Зарегистрирован: 26.09.2013

Ставил 1, не помогло. Мак забит с тестового скетча. "дуня" не пингуется.

Сделал сброс маршрутизатора, не думаю что у него из коробки будут фильтры мак адресов.

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Фильтр нет, а вот диапазон разрешенных адресов - запросто. Устройств в сети много? И кстати что Вы видите в консоли?

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Ухожу, поэтому на последок - другой кабель, другой порт :)

stigmat4j
Offline
Зарегистрирован: 26.09.2013

Устройств 3 вместе с ардуиной. 2 компа и ардуинка. Диапазон 192.168.1.100 - 192.168.1.200

В консоли уже интересно

stigmat4j
Offline
Зарегистрирован: 26.09.2013

Уже пробовал, ничего не помогает. 

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Я имел ввиду монитор порта :)

Картинки не читабельны.

stigmat4j
Offline
Зарегистрирован: 26.09.2013

К сожалению сейчас на работе уже и нет возможности проверять. 

Вчера сканировал сеть, при подключении ардуинки появляется еще один айпи в сети под номером, отличным от того, который прописывал в скетче, видать сказывается отключеный параметр DHCP. Вообщем появился айпи 192.168.1.100, пингуется отлично, а в браузере 0 по фазе. Но пока писал, подумал, что нужно пробрасывать порт, а порт узнать в сканере портов.

Сам придумал, сам попробую вечером. Отпишусь. 

serge73
serge73 аватар
Offline
Зарегистрирован: 08.10.2014

Gateway (gwip) он же шлюз, в локальной сети (LAN) не нужен для доступа от компьтера к компьютеру.

Вам нужно убедиться , что компьютер и шилд в оной сети (IP Сети у вас 192.168.1.0)

Устройства в сети должны иметь IP в диапазоне 192.168.1.1 - 192.168.1.254. Диапазон определяется маской подсети 255.255.255.0

В принципе в вашем скетче по-хорошему не зватает маски для полноценной прописки реквизитов сетевого устройства. 

Но это все сработает, если у вас 

#define STATIC 1

т.е.  статический (прописанный руками), а не динамический (получаемый от маршрутизатора).

На работе у вас скорее всего нет ограничений на получение IP от DHCP поэтому вы и зашли, правда я не уверен, что на 192.168.1.199

В домашнем маршрутизаторе, возможно, стоит блокировка на раздачу IP кому попало, например кол-во выдаваемых IP ограниченно и все ip жестко привязаны к MAC адресу. И это правильно, хотя и неудобно. 

В общем нужно посмотреть какой адрес получает шилд и посмотреть устройства, которые появляются на маршрутизаторе, это уже в самом маршрутизаторе.

Еще можно жестко прописать ip на компьютере и соеденить напрямую комп и  шилд. 

Например комп

192.168.1.10 

255.255.255.0

шилд 

192.168.1.199

255.255.255.0

шлюз можно не указывать, это адрес для перенаправления в другие сети, а их у вас не будет.

И еще   порт форвардинг это проброска портов с одного ip (например внешнего) на порты на другом ip (например внутреннего). 

Пробросив порты шилда, вы сможете обращаться к шилду из любой точки мира, даже если шилд находится в локальной сети.

serge73
serge73 аватар
Offline
Зарегистрирован: 08.10.2014

Когда вы пингуете 192,168,1,199, то к сожалению ничего интересного не происходит. Хост недоступен.

Тоже результат вы получите если пинговать соседний несуществующий.

 

Очень интересно, что она вам в Монитор Порта выводит

В сетче есть Serial.println, это вывод в порт USB.

Обратите внимание на скорость порта Serial.begin(57600);

Не плохо бы посмотреть, какие реквизиты выведутся в конце сетапа 

Примерно так, возможно ether.myip придется преобразовать в str

 

Serial.println(ether.myip)
 

Пинги, кстати, могут и не работать, это не обязательная функция для устройств в сети.

Для сканирования устройств в сети установите  Find MAC Address в триальном режиме.

stigmat4j
Offline
Зарегистрирован: 26.09.2013

Спасибо за советы. С работы приду и буду проверять. Хотя, уже немного расстроился и решаюсь взять еще вайфай модуль. Не знаю, почему я сразу кинулся на изернет модуль.

serge73
serge73 аватар
Offline
Зарегистрирован: 08.10.2014

Главное, что он у вас 100%  рабочий, т.к. работает на работе (каламбур получился). 

Проблема с временным отсутствием знаний в вашей голове. Не расстраивайтесь. Хуже когда в принципе не работает, там опять ждать и деньги тратить.