Ethernet shield W5200

Ramzay
Offline
Зарегистрирован: 16.05.2013

Создаю подключение через интернет между сервером и 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 работает. проблема в коммутаторе на выходе  в интернет ?

maksim
Offline
Зарегистрирован: 12.02.2012

1. Без разницы.

2. Если пытаетесь подключиться к внешнему серверу без DHCP и не указываете адрес шлюза, в вашем случае он устанавливается как 10, 0, 0, 1. Такой у вас адрес шлюза? А вот почему у вас не работает DHCP это вопрос.

Ramzay
Offline
Зарегистрирован: 16.05.2013

Указывал настройки моей локальной сети, DHCP работает на всем кроме ethernet shield.

Сервер же находится в интернете и доступен из любой точки. Сегодня вечером попробую подключить шилд напрямую, минуя коммутатор. Думаю проблема может быть в нем он немного геморный (mikrotik).

maksim
Offline
Зарегистрирован: 12.02.2012

Ничего удивительного, что у вас ничего не работает, стандартная библиотека Ethernet предназначена для w5100, вам же нужна Ethernet V2.0 Library.

Ramzay
Offline
Зарегистрирован: 16.05.2013

Спасибо, еще в указании MAC адреса пишет ошибку.

префикс 0x ставится перед буквой или перед всем символом?

Например 15; F3; 1C   будет записано как 15; 0хF3; 0x1C ?? Или по-другому?

Ramzay
Offline
Зарегистрирован: 16.05.2013

maksim пишет:

Ничего удивительного, что у вас ничего не работает, стандартная библиотека 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*}'
Ошибка компиляции.

 

Ramzay
Offline
Зарегистрирован: 16.05.2013

Гениально, столько мароки из-за такой х***и .

Ошибка появляется из-за того что версия IDE слишком новая ^^

http://forum.amperka.ru/threads/arduino-%D0%B8-ethernet-shield.4548/

Нужен IDE 1.0.6

Иными словами, ставим старый IDE, ставим библиотеку для 2й версии и только потом можно работать.