модуль 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 следующего кода помогает решить проблему -