Ethernet shield W5200
- Войдите на сайт для отправки комментариев
Пт, 05/06/2015 - 13:34
Создаю подключение через интернет между сервером и ethernet shield.
Сервер доступен с компьютера, однако с arduino не получается подключение.
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 10, 0, 0, 177 };
byte server[] = { 64, 233, 187, 99 }; // Google
EthernetClient client;
void setup()
{
Ethernet.begin(mac, ip);
Serial.begin(9600);
delay(1000);
Serial.println("connecting...");
if (client.connect(server, 80)) {
Serial.println("connected");
client.println("СЮДА ПИШУ КОМАНДУ В ФОРМАТЕ XML");
client.println();
} else {
Serial.println("connection failed");
}
}
void loop()
{
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
for(;;)
;
}
}
Вопросы такие:
Некоторые пишут byte server[] = {0,0,0,0};
а некоторые IPAdress server(0,0,0,0);
1) Эти выражения равнозначны ?
2) При подключении к серверу выдает ошибку в Serial о том что connection failed,
пробовал не указывать IP а только MAC
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
а дальше
Ethernet.begin(mac);
В таком случае даже ошибку подключения не выдает ,хотя DHCP работает. проблема в коммутаторе на выходе в интернет ?
1. Без разницы.
2. Если пытаетесь подключиться к внешнему серверу без DHCP и не указываете адрес шлюза, в вашем случае он устанавливается как 10, 0, 0, 1. Такой у вас адрес шлюза? А вот почему у вас не работает DHCP это вопрос.
Указывал настройки моей локальной сети, DHCP работает на всем кроме ethernet shield.
Сервер же находится в интернете и доступен из любой точки. Сегодня вечером попробую подключить шилд напрямую, минуя коммутатор. Думаю проблема может быть в нем он немного геморный (mikrotik).
Ничего удивительного, что у вас ничего не работает, стандартная библиотека Ethernet предназначена для w5100, вам же нужна Ethernet V2.0 Library.
Спасибо, еще в указании MAC адреса пишет ошибку.
префикс 0x ставится перед буквой или перед всем символом?
Например 15; F3; 1C будет записано как 0х15; 0хF3; 0x1C ?? Или по-другому?
Ничего удивительного, что у вас ничего не работает, стандартная библиотека Ethernet предназначена для w5100, вам же нужна Ethernet V2.0 Library.
По поводу библотеки вот что получилось. Я её подгрузил в папку library как и положено но при добавлении образца скетча она не активна и при компиляции выдает ошибку.
Один и тот же пример с библиотеки Ethernet скомпилировался а EthernetV2_0 выдает ошибку.
Сначала думал оттого что папка в директории с русским именем, но перемечение ничего не дало. Вот ошибка:
E:\Arduino\libraries\EthernetV2_0\EthernetV2_0.cpp: In member function 'void EthernetClass::begin(uint8_t*, IPAddress, IPAddress, IPAddress, IPAddress)': E:\Arduino\libraries\EthernetV2_0\EthernetV2_0.cpp:64:39: error: no matching function for call to 'W5100Class::setIPAddress(IPAddress::<anonymous union>&)' W5100.setIPAddress(local_ip._address); ^ E:\Arduino\libraries\EthernetV2_0\EthernetV2_0.cpp:64:39: note: candidate is: In file included from E:\Arduino\libraries\EthernetV2_0\EthernetV2_0.cpp:1:0: E:\Arduino\libraries\EthernetV2_0\utility/w5200.h:410:6: note: void W5100Class::setIPAddress(uint8_t*) void W5100Class::setIPAddress(uint8_t *_addr) { ^ E:\Arduino\libraries\EthernetV2_0\utility/w5200.h:410:6: note: no known conversion for argument 1 from 'IPAddress::<anonymous union>' to 'uint8_t* {aka unsigned char*}' E:\Arduino\libraries\EthernetV2_0\EthernetV2_0.cpp:65:38: error: no matching function for call to 'W5100Class::setGatewayIp(IPAddress::<anonymous union>&)' W5100.setGatewayIp(gateway._address); ^ E:\Arduino\libraries\EthernetV2_0\EthernetV2_0.cpp:65:38: note: candidate is: In file included from E:\Arduino\libraries\EthernetV2_0\EthernetV2_0.cpp:1:0: E:\Arduino\libraries\EthernetV2_0\utility/w5200.h:386:6: note: void W5100Class::setGatewayIp(uint8_t*) void W5100Class::setGatewayIp(uint8_t *_addr) { ^ E:\Arduino\libraries\EthernetV2_0\utility/w5200.h:386:6: note: no known conversion for argument 1 from 'IPAddress::<anonymous union>' to 'uint8_t* {aka unsigned char*}' E:\Arduino\libraries\EthernetV2_0\EthernetV2_0.cpp:66:38: error: no matching function for call to 'W5100Class::setSubnetMask(IPAddress::<anonymous union>&)' W5100.setSubnetMask(subnet._address); ^ E:\Arduino\libraries\EthernetV2_0\EthernetV2_0.cpp:66:38: note: candidate is: In file included from E:\Arduino\libraries\EthernetV2_0\EthernetV2_0.cpp:1:0: E:\Arduino\libraries\EthernetV2_0\utility/w5200.h:394:6: note: void W5100Class::setSubnetMask(uint8_t*) void W5100Class::setSubnetMask(uint8_t *_addr) { ^ E:\Arduino\libraries\EthernetV2_0\utility/w5200.h:394:6: note: no known conversion for argument 1 from 'IPAddress::<anonymous union>' to 'uint8_t* {aka unsigned char*}' Ошибка компиляции.Гениально, столько мароки из-за такой х***и .
Ошибка появляется из-за того что версия IDE слишком новая ^^
http://forum.amperka.ru/threads/arduino-%D0%B8-ethernet-shield.4548/
Нужен IDE 1.0.6
Иными словами, ставим старый IDE, ставим библиотеку для 2й версии и только потом можно работать.