Невозможно настроить 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, который можно использовать для решения этой проблемы?
@Xinus, 👍0
Обсуждение2 ответа
Я никогда не использовал функцию 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
Я использую более или менее один и тот же код для своих сетевых виджетов, и мой опыт показывает, что он достаточно надежен. Знаете ли вы, есть ли у вас DHCP-сервер в сегменте сети, в котором находится Arduino? Отсутствие сервера или конфигурация, которая не будет реагировать на Arduino, кажутся наиболее вероятным объяснением проблемы, с которой вы столкнулись.
Для решения этой проблемы можно подключить другую машину к тому же сегменту сети и наблюдать за трафиком с помощью tcpdump
, Wireshark или аналогичного инструмента. Если вы работаете на «сторонней» машине (например, не на DHCP-сервере), вы сможете увидеть сторону обмена DHCP на стороне Arduino, но я не уверен, сможете ли вы увидеть сервер (Arduino будет транслировать, так как он не может знать адрес DHCP-сервера, но я думаю, что ответ сервера одноадресный). Если у вас есть Linux или какая-либо другая машина, на которой вы можете войти, где вы можете запустить DHCP-сервер, вы можете наблюдать за обеими сторонами переговоров. Но даже если вы не можете получить доступ к серверу, полезно будет узнать, начинает ли Arduino согласование DHCP.
Если вам нужен фиксированный IP-адрес на Arduino, это можно сделать, настроив DHCP-сервер так, чтобы он зарезервировал адрес для Arduino. Таким образом, вы можете иметь известный адрес на Arduino без необходимости жесткого кодирования IP-адреса (который в конечном итоге вас укусит).
Хороший ответ относительно резервирования IP-адреса на маршрутизаторе/DHCP-сервере., @Greenonline
- Клиент MQTT на Arduino + SIM900
- Удаленная загрузка кода на плату Arduino через интернет
- Отправка данных Arduino через Ethernet на сервер PHP.
- Простая веб-страница с Ethernet-шилдом Arduino на SD-карте
- Есть ли тайм-аут для Ethernet.begin?
- Как создать сервер сокетов Arduino для получения сообщений
- При подключении client.connect() возвращает 0
- Проблемы со сбросом Ethernet shield
К чему 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