Невозможно настроить Ethernet с помощью Arduino Uno R3

Я приобрел плату Arduino Uno R3 и сетевой экран в следующих местах:

  • Arduino UNO R3
  • Защита локальной сети Arduino

Я пытаюсь настроить Ethernet, используя этот скетч:

#include <SPI.h>
#include <Ethernet.h>

// Введите MAC-адрес вашего контроллера ниже.
// Более новые экраны Ethernet имеют MAC-адрес, напечатанный на наклейке на экране.
byte mac[] = {
  0x4,0x2,0x45,0x68,0x5E,0x96,0x56
};

// Инициализируем клиентскую библиотеку Ethernet
// с IP-адресом и портом сервера
// к которому вы хотите подключиться (порт 80 по умолчанию для HTTP):
EthernetClient client;

void setup() {
  // Открытие последовательной связи и ожидание открытия порта:
  Serial.begin(9600);
  delay(5000);
  // эта проверка нужна только для Leonardo:
  while (!Serial) {
    ; // ждем подключения последовательного порта. Нужен только для Леонардо
  }
  // запускаем соединение Ethernet:
  Serial.println("trying to configure ethernet...");
  while(Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP, retrying after 5 sec");
    // нет смысла продолжать, так что ничего не делайте навсегда:
    delay(5000);
    Serial.println("trying to configure ethernet...");
  }
  // напечатать ваш локальный IP-адрес:
  Serial.print("My IP address: ");
  for (byte thisByte = 0; thisByte < 4; thisByte++) {
    // вывести значение каждого байта IP-адреса:
    Serial.print(Ethernet.localIP()[thisByte], DEC);
    Serial.print(".");
  }
  Serial.println();
}

void loop() {
}

Он генерирует этот вывод в Serial Monitor:

trying to configure ethernet...
Failed to configure Ethernet using DHCP, retrying after 5 sec
trying to configure ethernet...
Failed to configure Ethernet using DHCP, retrying after 5 sec
trying to configure ethernet...
Failed to configure Ethernet using DHCP, retrying after 5 sec
trying to configure ethernet...
Failed to configure Ethernet using DHCP, retrying after 5 sec
trying to configure ethernet...
Failed to configure Ethernet using DHCP, retrying after 5 sec
trying to configure ethernet...
Failed to configure Ethernet using DHCP, retrying after 5 sec
trying to configure ethernet...
Failed to configure Ethernet using DHCP, retrying after 5 sec
trying to configure ethernet...

Я снял светодиодные индикаторы на видео на YouTube, оно показывает, что светодиоды Tx и Rx иногда светятся, см. Arduino не обнаруживает Ethernet-соединение.

Похоже, Arduino не может подключиться к Ethernet... Я использую Arduino IDE 1.6.5 в Windows 7.

Есть ли инструмент отладки для Arduino, который можно использовать для решения этой проблемы?

, 👍0

Обсуждение

К чему Arduino подключен через Ethernet? (видео не смотрел)., @fuenfundachtzig

Возможно, потребуется установить контакт включения SD на выход и высокий уровень., @Mikael Patel

MAC-адрес правильный? Есть ли в сети Ethernet, к которой подключен Arduino, маршрутизатор с поддержкой DHCP (другими словами, включен ли DHCP-сервер)?, @Greenonline

Используете ли вы библиотеку версии 1.0 или выше, так как она поддерживает DHCP? см. [Ethernet.begin()](https://www.arduino.cc/en/Reference/EthernetBegin). Более ранние версии (v0.x) видимо не работали., @Greenonline

Просто спрашиваю, не должен ли MAC-адрес иметь 6 байтов, а не 7, как в вашем коде?, @jakic

Я вижу, у вас есть 7 байтов для вашего Mac-адреса. Большинство примеров, которые я видел, имеют только 6 байтов. Вы используете TCPIP v4 или v6? Странный., @rjj100


2 ответа


0

Я никогда не использовал функцию DHCP для назначения IP-адреса для Ethernet-шилда, но где-то там вы должны указать IP-адрес маршрутизатора, который назначает DHCP.

При повседневном использовании экрана вы не хотите, чтобы маршрутизатор назначал IP-адрес вашему устройству, потому что при каждом подключении оно может получать разные IP-адреса. Это означает, что если вы хотите общаться с ним, вам нужно каждый раз узнавать IP-адрес. И связь с ним со стороны WAN через порт, который вы открываете в своем маршрутизаторе, будет невозможна.

Попробуйте один из скетчей фиксированного IP-адреса, но выберите свободный IP-адрес в диапазоне IP-адресов вашего маршрутизатора, который не входит в диапазон IP-адресов DHCP-маршрутизатора (таким образом, фиксированный IP-адрес не будет мешать автоматически выдаваемым IP-адресам).

,

Хороший ответ относительно использования статического адреса (хотя для этого потребуется резервирование на DHCP-сервере, см. [ответ Диу](http://arduinoprosto.ru/q/12814/unable-to-configure-ethernet-using-arduino- uno-r3#answer-18831)) и тестирование платы с использованием эскизов фиксированного IP-адреса, _за исключением_ того, что вам **не** нужно указывать конкретный адрес DHCP-сервера или маршрутизатора. См. [Ethernet.begin()](https://www.arduino.cc/en/Reference/EthernetBegin)., @Greenonline


2

Я использую более или менее один и тот же код для своих сетевых виджетов, и мой опыт показывает, что он достаточно надежен. Знаете ли вы, есть ли у вас DHCP-сервер в сегменте сети, в котором находится Arduino? Отсутствие сервера или конфигурация, которая не будет реагировать на Arduino, кажутся наиболее вероятным объяснением проблемы, с которой вы столкнулись.

Для решения этой проблемы можно подключить другую машину к тому же сегменту сети и наблюдать за трафиком с помощью tcpdump, Wireshark или аналогичного инструмента. Если вы работаете на «сторонней» машине (например, не на DHCP-сервере), вы сможете увидеть сторону обмена DHCP на стороне Arduino, но я не уверен, сможете ли вы увидеть сервер (Arduino будет транслировать, так как он не может знать адрес DHCP-сервера, но я думаю, что ответ сервера одноадресный). Если у вас есть Linux или какая-либо другая машина, на которой вы можете войти, где вы можете запустить DHCP-сервер, вы можете наблюдать за обеими сторонами переговоров. Но даже если вы не можете получить доступ к серверу, полезно будет узнать, начинает ли Arduino согласование DHCP.

Если вам нужен фиксированный IP-адрес на Arduino, это можно сделать, настроив DHCP-сервер так, чтобы он зарезервировал адрес для Arduino. Таким образом, вы можете иметь известный адрес на Arduino без необходимости жесткого кодирования IP-адреса (который в конечном итоге вас укусит).

,

Хороший ответ относительно резервирования IP-адреса на маршрутизаторе/DHCP-сервере., @Greenonline