Помогите подружить Ethernet shild с хабом D-Link

Тема в разделе "Arduino & Shields", создана пользователем user999, 18 янв 2017.

  1. user999

    user999 Гик

    Добрый день!
    Убил целый вечер на настройку шилда. Оказалось, что он не хочет работать через хаб D-Link DES-1008D.
    Хаб абсолютно рабочитьй, через него подключаются и ноут и малинка без проблем.
    Ардуина при подключении через него пишет:
    .
    Покупать новый хаб желания и средств нет, да и где гарантия, что купишь тот который подойдет к ардуино.

    Что можете посоветовать?
     
  2. rkit

    rkit Гуру

    Если в сети нету DHCP, то надо все настройки сети вручную прописать.
     
  3. user999

    user999 Гик

    Скетч один и тот же. Выдергиваешь провод из хаба и втыкаешь в шилд и все работает. А через хаб выдает ошибку. В скетче проверка стоит после строки
    Код (C++):
     if (Ethernet.begin(mac) == 0) {
    т.е. дело даже не доходит до отправки запроса и информации об ip и настройках сети
     
  4. rkit

    rkit Гуру

    Еще раз: пишете всё вручную. В DHCP, если есть, пишете те же самые настройки для этого мака.
     
  5. ratman

    ratman Нерд

    Максим B нравится это.
  6. user999

    user999 Гик

    да, у меня стоит 511. Но я себе не представляю как я такой маленький компонент смогу перепаять
     
  7. user999

    user999 Гик

    Добавил строкит
    Код (C++):
    byte gateway[] = {192, 168, 1, 1};
    byte subnet[] = {255, 255, 255, 0};
    и изменил строку на
    Код (C++):
    Ethernet.begin(mac, ip, gateway, subnet);
    В итоге скетч выглядит так:
    Код (C++):
    #include <SPI.h>
    #include <Dhcp.h>
    #include <Dns.h>
    #include <Ethernet.h>
    #include <EthernetClient.h>
    #include <EthernetServer.h>
    #include <EthernetUdp.h>

    byte mac[] = {
      0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    IPAddress ip(192, 168, 1, 201);
    byte gateway[] = {192, 168, 1, 1};
    byte subnet[] = {255, 255, 255, 0};
    char server[] = "www.google.com";    // название сервера Google (с DNS)

    // Создаем клиента, который будет подключаться
    // к необходимым для нас IP-адресу и порту
    // (портом по умолчанию для HTTP является 80):
    EthernetClient client;
    void setup() {
    // Инициализируем последовательную передачу данных и ждем открытия порта:
      Serial.begin(9600);
       while (!Serial) {
        ; // ждем подключения последовательного порта (нужно только для Leonardo)
      }
      // Запускаем Ethernet-соединение:
      if (Ethernet.begin(mac) == 0) {
        Serial.println("Failed to configure Ethernet using DHCP");  //  "Не удалось сконфигурировать Ethernet при помощи DHCP"
        // Продолжать дальше смысла нет, поэтому вместо DHCP
        // попытаемся сделать это при помощи IP-адреса:
        Ethernet.begin(mac, ip, gateway, subnet);
      }
      // Даем Ethernet Shield секунду на инициализацию:
      delay(1000);
      Serial.println("connecting...");  //  "Подключение..."
      // Если подключение установлено, сообщаем об этом на Serial Monitor:
      if (client.connect(server, 80)) {
        Serial.println("connected");  //  "Подключение установлено"
        // Делаем HTTP-Запрос:
        client.println("GET /search?q=arduino HTTP/1.1");
        client.println("Host: www.google.com");
        client.println("Connection: close");
        client.println();
      }
      else {
        // Если соединения с сервером нет, пишем об этом на Serial Monitor:
        Serial.println("connection failed");  //  "Подключиться не удалось"
      }
    }
    void loop()
    {
      // Если от сервера есть какие-нибудь байты,
      // считываем их и выводим на Serial Monitor:
      if (client.available()) {
        char c = client.read();
        Serial.print(c);
      }
      // Если сервер отключился, останавливаем работу клиента:
      if (!client.connected()) {
        Serial.println();
        Serial.println("disconnecting.");  //  "Отключение..."
        client.stop();
        // Ничего не делаем:
        while(true);
      }
    }
    Но все равно не работает
     
  8. rkit

    rkit Гуру

    Ничего не заменили
     
  9. user999

    user999 Гик

    Эти строки можно закомментировать
    Код (C++):
    if (Ethernet.begin(mac) == 0) {
        Serial.println("Failed to configure Ethernet using DHCP");  //  "Не удалось сконфигурировать Ethernet при помощи DHCP"
    все равно результат
     
  10. user999

    user999 Гик

    А как резистор может повлиять на работу с хабом. Ведь при подключении к роутеру (он тоже своеобразный управляемый хаб) работает, а при подключении через дополнительный хаб - нет.
    Такой микрокомпанент перепаять будет не просто
     
  11. mcureenab

    mcureenab Гуру

    Ну и не парьтесь больше. Это аппартный баг, программно не решается. Отнесите шилд в ремонт ПК. Думаю там вам заменят эту деталь.
     
  12. mcureenab

    mcureenab Гуру

    Это терминирующий резистор линии связи. Без него нарушается распространение высокочастотного сигнала по проводу. Вопрос работоспособности при таком раскладе - дело случая.
     
    arkadyf нравится это.
  13. user999

    user999 Гик

    Спасибо за совет, Схожу в мастерскую. Правда думаю ремонт будет стоить не меньше цены самого шилда
     
  14. ratman

    ratman Нерд

    http://selectelement.ru/basic-concepts/electric-operation.php
     
  15. mcureenab

    mcureenab Гуру