модуль Enc28j60 не пингует стороннее железо, если статический Ip

marmalenok
Offline
Зарегистрирован: 08.09.2015

Братишки!!! я вам покушать принёс)))))))))))

Имею селдующее железо: Arduino Uno и модуль Enc28j60 http://ru.aliexpress.com/item/ENC28J60-Ethernet-LAN-Network-Module-Schematic-For-Arduino-51-AVR-LPC-SD-Card-Module-Slot-Socket/1028081540.html?spm=2114.03020208.3.2.wvKujT&ws_ab_test=201407_2,201444_5,201409_2, использую библиотеку EtherCard https://github.com/jcw/ethercard 

Написал следующий говнокод, который должен в зависимости от доступности компьютера в сети, вкл/выключать реле:

#include <EtherCard.h>
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte myip[] = { 192, 168, 3, 203 };
static byte gwip[] = { 192, 168, 3, 1 };
static byte dnsip[] = { 8,8,8,8 };
static byte netmask[] = { 255,255,255,0 };
byte Ethernet::buffer[700];
static uint32_t timer;
boolean pingSent;
int Relay = 4;
static void gotPinged (byte* ptr)
{
  ether.printIp(">>> ping from: ", ptr);
}
void setup () {
  Serial.begin(57600);
  Serial.println("\n[pings]");
  timer = -9999999; // start timing out right away
  pinMode(Relay, OUTPUT);
  pingSent = false;

 if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
     Serial.println(F("Failed to access Ethernet controller"));



//ether.dhcpSetup();                             ///////////// Статический IP /////////////////////////////////////
ether.staticSetup(myip, gwip, dnsip, netmask);    /////////// Динамичкский IP /////////////////////////////////////



    ether.parseIp(ether.hisip, "192.168.3.200");
    ether.printIp("IP:  ", ether.myip);
    ether.printIp("Mask: ", ether.netmask);
    ether.printIp("GW:  ", ether.gwip);
    ether.printIp("DNS IP: ", ether.dnsip);
    ether.printIp("SRV: ", ether.hisip);
    ether.registerPingCallback(gotPinged);
    pingSent = false;
    Serial.println();
    }
void loop () 
{

  word len = ether.packetReceive();
  word pos = ether.packetLoop(len); 
  if (len > 0 && ether.packetLoopIcmpCheckReply(ether.hisip)) {
    Serial.print("  ");
    Serial.print((micros() - timer) * 0.001, 3);
    Serial.println(" ms");
    pingSent = false;
  }
  if (micros() - timer >= 5000000) {
    ether.printIp("Pinging: ", ether.hisip);
    timer = micros();
    ether.clientIcmpRequest(ether.hisip);
    pingSent = true;
  }
  if ((pingSent) == true)
  {
    digitalWrite(Relay, LOW);
  }
  else
  {
    digitalWrite(Relay, HIGH);
  }
}

 

Проблемма заключается в том, что если назначаю динамическое присвоение Ip адреса, всё работает норм, когда меняю на статику, компьютер пользователя почему то не пингуется((( подскажите пожалуйста, что я упустил?

Seth
Offline
Зарегистрирован: 01.02.2014

Может данный ip роутер блокирует?

У меня тоже самое работает только через динамический IP. Статику роутер в сеть не пускает. Почему? Не разбирался...

marmalenok
Offline
Зарегистрирован: 08.09.2015

Нет, в коде где то ошибка, либо я чего то там пропустил. Ибо по дхцп присваевается адрес 192.168.3.38, всё работет норм. Переключаюсь на ввод адреса вручную, ввожу для примера тот же самый 192.168.3.38, и нихрена не работает( 

Radjah
Offline
Зарегистрирован: 06.08.2014

2-6, 8 - static не нужно. Они и так не изменятся.

10 - const нужно

59 - больше скобок для бога скобок

47 - а вот тут скобок точно надо больше

MAC из головы брал или скопировал где?

marmalenok
Offline
Зарегистрирован: 08.09.2015

Мак брал из готового примера, по идее мак и при дхцп остаётся тот же. но вот при дхцп всё работает, а при статике нет(

 

JasKo
Offline
Зарегистрирован: 21.11.2015

marmalenok пишет:

Проблемма заключается в том, что если назначаю динамическое присвоение Ip адреса, всё работает норм, когда меняю на статику, компьютер пользователя почему то не пингуется((( подскажите пожалуйста, что я упустил?

Вставка в setup следующего кода помогает решить проблему -

 ether.parseIp(ether.netmask, "255.255.255.0");