модуль Enc28j60 не пингует стороннее железо, если статический Ip
- Войдите на сайт для отправки комментариев
Пт, 13/11/2015 - 11:19
Братишки!!! я вам покушать принёс)))))))))))
Имею селдующее железо: 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 адреса, всё работает норм, когда меняю на статику, компьютер пользователя почему то не пингуется((( подскажите пожалуйста, что я упустил?
Может данный ip роутер блокирует?
У меня тоже самое работает только через динамический IP. Статику роутер в сеть не пускает. Почему? Не разбирался...
Нет, в коде где то ошибка, либо я чего то там пропустил. Ибо по дхцп присваевается адрес 192.168.3.38, всё работет норм. Переключаюсь на ввод адреса вручную, ввожу для примера тот же самый 192.168.3.38, и нихрена не работает(
2-6, 8 - static не нужно. Они и так не изменятся.
10 - const нужно
59 - больше скобок для бога скобок
47 - а вот тут скобок точно надо больше
MAC из головы брал или скопировал где?
Мак брал из готового примера, по идее мак и при дхцп остаётся тот же. но вот при дхцп всё работает, а при статике нет(
Проблемма заключается в том, что если назначаю динамическое присвоение Ip адреса, всё работает норм, когда меняю на статику, компьютер пользователя почему то не пингуется((( подскажите пожалуйста, что я упустил?
Вставка в setup следующего кода помогает решить проблему -