arduino mega+ethernet shield w5100 - не пингуется
- Войдите на сайт для отправки комментариев
Пт, 04/04/2014 - 08:22
Привет всем!
наконец-то приехал шилд, "работающий" на ардуино мега)
установил, залил программку:
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte gateway[] = { 192, 168, 2, 1 };
byte subnet[] = { 255, 255, 255, 0 };
//IPAddress ip(192, 168, 2, 245); // IP по которому мы будем обращаться к этой странице
byte ip[]={192, 168, 2, 245}; // IP по которому мы будем обращаться к этой странице
EthernetServer server(80); // порт 80
void setup() {
//Ethernet.begin(mac, ip); // запускаем Ethernet шилд
Ethernet.begin(mac, ip, gateway, subnet);
server.begin(); // запуск web сервера
Serial.begin(9600);
Serial.println("Programm RUN!");
}
// the loop routine runs over and over again forever:
void loop() {
Serial.println("test");
EthernetClient client = server.available(); // опрашиваем канал в поисках клиента
////////////////////////
if (client) { // если клиент найден
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // если клиент доступен для чтения
Serial.println("client connected...");
char c = client.read(); // читаем 1 бит полученный от клиента
Serial.println(c);
// <span style="font-size: 9pt; font-family: Consolas;">последняя строка запроса является пустой и заканчивается </span> \n
// реагировать на клиента только после полного прочтения
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
// send web page
client.println("<!DOCTYPE html>");
client.println("<html>");
client.println("<head>");
client.println("<title>Arduino Web Page</title>");
client.println("</head>");
client.println("<body>");
client.println("<h1>Привет от Arduino!</h1>");
client.println("<p>Эта страница с WEB сервера Arduino </p>");
client.println("</body>");
client.println("</html>");
break;
}
//каждая строка полученная от клиента заканчивается \r\n
if (c == '\n') {
// последний символ принятого запроса
// начало новой строки для чтения
currentLineIsBlank = true;
}
else if (c != '\r') {
// получение текстового символа от клиента
currentLineIsBlank = false;
}
} // end if (client.available())
} // end while (client.connected())
delay(1); // даем время для браузера получить данные
client.stop(); // закрываем соединение
}
////////////////////////
delay(30000); // delay in between reads for stability
}
но не могу пингануть плату.
нахожусь с ней в одной подсети. вообще у меня dhcp поднят, назначил свободный IP.
C:\Users\bdm>ipconfig
Настройка протокола IP для Windows
Ethernet adapter Подключение по локальной сети 2:
DNS-суффикс подключения . . . . . :
IPv4-адрес. . . . . . . . . . . . : 192.168.2.237
Маска подсети . . . . . . . . . . : 255.255.255.0
Основной шлюз. . . . . . . . . : 192.168.2.4
Туннельный адаптер isatap.{7B8719DF-7827-4877-8548-36E60704651C}:
Состояние среды. . . . . . . . : Среда передачи недоступна.
DNS-суффикс подключения . . . . . :
C:\Users\bdm>ping 192.168.2.245
Обмен пакетами с 192.168.2.245 по с 32 байтами данных:
Ответ от 192.168.2.237: Заданный узел недоступен.
Ответ от 192.168.2.237: Заданный узел недоступен.
Ответ от 192.168.2.237: Заданный узел недоступен.
Ответ от 192.168.2.237: Заданный узел недоступен.
Статистика Ping для 192.168.2.245:
Пакетов: отправлено = 4, получено = 4, потеряно = 0
bytegateway[] = { 192, 168, 2, 1 };поставил
bytegateway[] = { 192, 168, 2, 4 };тоже самое...на Шилде мигает красным LINK, RX горит красным, иногда мигает красным TXшилд подключил обычным пачкордом (бо о бз с бс з бк к), др конец в свиче.
Если подключаю этот пачкорд в системник - пингую его (второй комп).
плата не висит - выдает периодически TEST в монитор порта. Питание пока берез по USB.
ваш скетч это вебсервер? Работает как вебсервер? Вероятно, он не обязан (не запрограммирован) отвечать на пинги.
я ещё посмотрите на "бренндмауэр виндовс". Может он режет.
не даст вам пинговать его. Потому что когда вы пингуете яндекс и у вас 80мс - это плохо, а у вас вообще 30000мс.
А в самой библиотеке есть обработка пингов - происходит во время обработки наличия подключения - "server.available();".
Плата у вас висит! - но когда отвисае выдает тест - но похоже время отвисания с приходом пинга не пересекается)))
что-то мне не нравится, как вы рассуждаете)))
если у устройства есть ip-адрес и он в сети, он должен быть доступен и пинговаться, не факт, что будет все отрабатывать из скейтча, но железо отвечать должно)
Уберите delay(30000);
поставил delay(10);
пинга нет)
на Шилде мигает красным LINK, RX горит красным, иногда мигает красным TX
зеленый ON и 100М зеленый)
Тут delay вообще не должно быть -оно тормозит веб сервер .Поищите более нормальные примеры для данной библиотеке
Попробовал стандартн пример. залил, эффект тот же. попробовал др IP ) пинга нет. delay нет) /* Web Server A simple web server that shows the value of the analog input pins. using an Arduino Wiznet Ethernet shield. Circuit: * Ethernet shield attached to pins 10, 11, 12, 13 * Analog inputs attached to pins A0 through A5 (optional) created 18 Dec 2009 by David A. Mellis modified 9 Apr 2012 by Tom Igoe */ #include <SPI.h> #include <Ethernet.h> // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,2,50); // Initialize the Ethernet server library // with the IP address and port you want to use // (port 80 is default for HTTP): EthernetServer server(80); void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } // start the Ethernet connection and the server: Ethernet.begin(mac, ip); server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP()); } void loop() { // listen for incoming clients EthernetClient client = server.available(); if (client) { Serial.println("new client"); // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); // if you've gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so you can send a reply if (c == '\n' && currentLineIsBlank) { // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); // the connection will be closed after completion of the response client.println("Refresh: 5"); // refresh the page automatically every 5 sec client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); // output the value of each analog input pin for (int analogChannel = 0; analogChannel < 6; analogChannel++) { int sensorReading = analogRead(analogChannel); client.print("analog input "); client.print(analogChannel); client.print(" is "); client.print(sensorReading); client.println("<br />"); } client.println("</html>"); break; } if (c == '\n') { // you're starting a new line currentLineIsBlank = true; } else if (c != '\r') { // you've gotten a character on the current line currentLineIsBlank = false; } } } // give the web browser time to receive the data delay(1); // close the connection: client.stop(); Serial.println("client disonnected"); } }Значит у вас проблемы не с програмной частью.
не с аппаратной?
при заливке скетча ошибок не вываливается.
Я далеко не гуру, но обработки пинга не вижу... через веб заходить пробовали с последним скетчем?
%) а что такое пинг по-вашему?
как же я зайду по вэбу, если узел IP недоступен?)
Я занимаюсь схожей ерундой, только с ENC28J60. И именно так, что у меня девайс НЕ пингуется, но при этом через браузер страница открывается.
Если обычной PCI-сетевой карте подать питание - она не будет отвечать на пинги. Этим занимается софтовая часть - всякие ОС и бут-ромы
спасибо за инф)
попробую черех хаб в сетевуху, без участия домена)
%) а что такое пинг по-вашему?
А по вашему? Вы хотя-бы в википедию загляните ping — Википедия.
А вообще со всеми этими шилдами в перваую очередь нужно проверять тестером питание.
Потом проверяете IP-шники. Вот это "192, 168, 2, 1" - вы откудато-то скопировали или сознательно написали?
Далее, проверяете подключение шилда. Открою вам тайну: ЛЮБОЙ шилд является "работающим с мегой" (из тех что работают с Uno/Nano и т.п.). Разница может быть только в том "можно просто нахлобучить" или "нужно подключать проводками".
Поэтому заверения продавца, особенно китайских, "совместимо с Mega" - не означает ничего. Это может означать как и "его просто нахлобучивать", так и "в принципе можно подключить". Так что берите схематику своего шилда и смотрите какие пины он использует де факто. Особенно если не видите у него снизу "мамы" для ICSP разъема у него на брюхе. Если "мамы нет" и при этом шилд короче самой меги - 99% что его нужно проводками подключать.
Так же, убедитесь, что пока шилд не заработал у вас к меге не подключено больше НИЧЕГО. Только шилд и сама мега. Ни единого лишнего проводка, резистора, модуля экрана, температурного датчика и т.д. и т.п.
P.S. А еще, рекомендую когда мучаетесь с какой-то железкой давать на нее ссылку. Особенно если "железка", не является официальным оригиналом от arduino.cc
я сознательно ввел)
у нас dhcp, dns на 192,168,2,1.
http://www.aliexpress.com/snapshot/6025022992.html
вот само устройства с описанием продавца
Ну вроде с подключением там проблемм быть не должно. На блюхе, хоть и плохо, он просматривается "мама". Хотя - учитывая что "это китайцы", было-бы неплохо прозвонить, Убедится что этот разъем разведен на пины 10,11,12,13 . А то ж китайцы могли поставить разъем и никуда его не развести :(
Больше ничего не подключено?
В роутере никаких фильтраций по маку не включено?
В админке самого роутера видно клиента с маком 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED ? (не во всех, но в некоторых видно)
На роутере загорается лампочка порта куда шилд подключаете?
Сам роутер, с компа пингуется?
C пачкордом тоже может быть проблема. Они бывают двух типов. У одного RX<--->RX, TX<--->TX, а у второго типа RX<-->TX, TX<--->RX В пачкорде RX,TX как-то по другому называются, но суть такова. Один типа "прямой", второй "накрест". Один предназначен для "соединять компы напрямую", второй для "комп к роутеру". В принципе почти все современные роутеры детектят такую ситуацию и даже с "неправильным кабелем" работают. Меняют у себя "что считать RX, что TX". Но в каких-то "старо-тупых" - может из-за этого быть проблема.
а при старте в терминал выдает
server is at ?и какойatпоказывает?0.0.0.0
почему=то.
завтра попробую без участия домена и хабов-подключенных к локалке, хаб напрямую со своим компом и ардуиной соединю в др подсети. мож че получится
достал из-за пазухи новый хаб d-link dgs-1008p, воткнул у него сетевуху компа и ардуину свою с шилдом)
присвоил сетевухе своей 192.168.1.55 , ардуине дал из последнего примера 192.168.1.50.
Пинг идет! как веб-браузер работает!!!))
на 0 порт для теста повесил датчик освещенности...
/* Web Server A simple web server that shows the value of the analog input pins. using an Arduino Wiznet Ethernet shield. Circuit: * Ethernet shield attached to pins 10, 11, 12, 13 * Analog inputs attached to pins A0 through A5 (optional) created 18 Dec 2009 by David A. Mellis modified 9 Apr 2012 by Tom Igoe */ #include <SPI.h> #include <Ethernet.h> // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,1,50); // Initialize the Ethernet server library // with the IP address and port you want to use // (port 80 is default for HTTP): EthernetServer server(80); void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } // start the Ethernet connection and the server: Ethernet.begin(mac, ip); server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP()); } void loop() { // listen for incoming clients EthernetClient client = server.available(); if (client) { Serial.println("new client"); // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); // if you've gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so you can send a reply if (c == '\n' && currentLineIsBlank) { // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); // the connection will be closed after completion of the response client.println("Refresh: 10"); // refresh the page automatically every 5 sec client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); /* // output the value of each analog input pin for (int analogChannel = 0; analogChannel < 6; analogChannel++) { int sensorReading = analogRead(analogChannel); client.print("analog input "); client.print(analogChannel); client.print(" is "); client.print(sensorReading); client.println("<br />"); } */ client.print("analogread in 0 port = "); client.println( analogRead(0) ); client.println("<br />"); client.println("</html>"); break; } if (c == '\n') { // you're starting a new line currentLineIsBlank = true; } else if (c != '\r') { // you've gotten a character on the current line currentLineIsBlank = false; } } } // give the web browser time to receive the data delay(1); // close the connection: client.stop(); Serial.println("client disonnected"); } }мониторинг порта:
и отображается страница с кодом:
т.е. проблема была в сети=подсети=маршрутизаторах и хз чем еще...
Я тоже пару дней проковырялся с этой чертовщиной, в моем случае оказалось что при использовании патч-корда с 4мя жилами ардуинка не пинговалась, заметил это в самый последний момент. Поставил нормальный 8ми жильный патч-корд и вуаля.
Пару раз забывал отключать на роутере фильтрацию по мас адресам. Похожий эффект.