Arduino+ethernetshield не получает IP по dhcp

Hi all,

пытаюсь включить Arduino в домашнюю LAN, но вызов Ethernet.begin(mac) возвращает 0 …

В чем может быть причина ?

DHCP на маршрутизаторе работает.

А код где?

код стандартный из демо к библиотеке ethernet

‘‘‘

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

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {  
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {
  // start the serial library:
  Serial.begin(9600);
  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }
  // print your local IP address:
  Serial.println(Ethernet.localIP());

}

void loop() {

}

‘‘‘

Что-то у меня в Ардуино ИДЕ другой пример по DHCP:

/*
  DHCP-based IP printer

  This sketch uses the DHCP extensions to the Ethernet library
  to get an IP address via DHCP and print the address obtained.
  using an Arduino Wiznet Ethernet shield.

  Circuit:
   Ethernet shield attached to pins 10, 11, 12, 13

  created 12 April 2011
  modified 9 Apr 2012
  by Tom Igoe
  modified 02 Sept 2015
  by Arturo Guadalupi

 */

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

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
};

void setup() {
  // You can use Ethernet.init(pin) to configure the CS pin
  //Ethernet.init(10);  // Most Arduino shields
  //Ethernet.init(5);   // MKR ETH shield
  //Ethernet.init(0);   // Teensy 2.0
  //Ethernet.init(20);  // Teensy++ 2.0
  //Ethernet.init(15);  // ESP8266 with Adafruit Featherwing Ethernet
  //Ethernet.init(33);  // ESP32 with Adafruit Featherwing Ethernet

  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // start the Ethernet connection:
  Serial.println("Initialize Ethernet with DHCP:");
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    if (Ethernet.hardwareStatus() == EthernetNoHardware) {
      Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    } else if (Ethernet.linkStatus() == LinkOFF) {
      Serial.println("Ethernet cable is not connected.");
    }
    // no point in carrying on, so do nothing forevermore:
    while (true) {
      delay(1);
    }
  }
  // print your local IP address:
  Serial.print("My IP address: ");
  Serial.println(Ethernet.localIP());
}

void loop() {
  switch (Ethernet.maintain()) {
    case 1:
      //renewed fail
      Serial.println("Error: renewed fail");
      break;

    case 2:
      //renewed success
      Serial.println("Renewed success");
      //print your local IP address:
      Serial.print("My IP address: ");
      Serial.println(Ethernet.localIP());
      break;

    case 3:
      //rebind fail
      Serial.println("Error: rebind fail");
      break;

    case 4:
      //rebind success
      Serial.println("Rebind success");
      //print your local IP address:
      Serial.print("My IP address: ");
      Serial.println(Ethernet.localIP());
      break;

    default:
      //nothing happened
      break;
  }
}

возможно, но это никак не решает проблему ;(

Так что пишет то (с кодом из #5)?

И еще не плохо было бы ссылку на шилд с LAN приложить…

Как раз второй код помогает решить проблему в отличие от вашего. У вас просто пишет что адрес не получит, а тот пишет почему может быть не получен.

Если по прежнему получаете только одну строку в логах, то вам нужен wireshark на сервере - смотреть есть ли запрос адреса и дальше уже отлаживать где проблема.

Хотя бы указали какой там секретный шилд пользуете, их целое море разных и управление у каждого свое.

1 лайк
Initialize Ethernet with DHCP:

Failed to configure Ethernet using DHCP

более ничего.

Следующий код вернул мне “W5100 Ethernet controller detected.”

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

byte mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168,3, 177);

void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}

Ethernet.begin(mac, ip);

if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println(“Ethernet shield was not found.”);
}
else if (Ethernet.hardwareStatus() == EthernetW5100) {
Serial.println(“W5100 Ethernet controller detected.”);
}
else if (Ethernet.hardwareStatus() == EthernetW5200) {
Serial.println(“W5200 Ethernet controller detected.”);
}
else if (Ethernet.hardwareStatus() == EthernetW5500) {
Serial.println(“W5500 Ethernet controller detected.”);
}
}

void loop () {}

ссылка на шилд

Это хорошая информация.
Значит шилд библиотека видет и линк есть.

есть и еще, тоже наверное, хорошая информация -

собака порылась, как выяснилось в том, что ардуино с шилдом у меня была подключена не непосредственно к маршрутизатору, через который я к провайдеру подключен, а с помощью коммутатора — ну мне так удобней,ибо router от компьютера далеко, а usb-шнур, коим ардуино к компу подключается, короткий. Вот и пришлось и комп и ардуино к коммутатору присоединить.
Проясните, в чем проблема ? — Почему комп получает IP от router’а несмотря на подключение через коммутатор, а ардуино — нет ?

И кстати, IP ардуино все равно по DHCP не получает.
Все, что мне удалось — это задать ей IP вручную и получить от нее ответ на ping с моего компа при подключении ардуино непосредственно к маршрутизатору.

Какой коммутатор? Модель.

1 лайк

древний asus gigaX1008/G

Разве теперь это имеет какое-то значение ? - Она же и без него не получает IP от DHCP, а только вручную в скетче

А коммутатор запрос от ардуины видит вообще? Что в arp-таблице? Есть её мак?

Конечно имеет.
Вы же сами только-что сообщили, что

Я правильно понимаю, что с коммутатором не работает ни один вариант?
Ни DHCP, ни статика. Так?
Уточните ещё два момента:

  1. при подключении ethernet шилда к коммутатору, на последнем порт “поднимается”?
    Светодиод порта светится?
  2. Каким кабелем подключаете шилд к коммутатору? Двухпаркой, или 4-х?
    Ваш коммутатор с гигабитными портами, которые не на всех моделях поддерживают работу с двухпарным кабелем.

P.S. Ваш шилд имеет на борту 100Мб ethernet адаптер, а подключаете его вы в гигабитный порт.
Не исключено, что эти два устройства не могут “договориться” - согласовать скорость подключения в 100Мб.

Ишь чего вы захотели от этой железяки! :slightly_smiling_face:

Он таких умных слов не знает.

да

Светодиоды светятся. Кабель заводской, шедший вместе с маршрутизатором в коробке. Думаю, 4 пары.

Ну однако ж именно

10Мб/с // 100Мб/с

это ответ не коммутатора, но маршрутизатора

C:\Users\maxye>arp -a

Интерфейс: 192.168.56.1 — 0x3
адрес в Интернете Физический адрес Тип
192.168.56.255 ff-ff-ff-ff-ff-ff статический
224.0.0.22 01-00-5e-00-00-16 статический
224.0.0.251 01-00-5e-00-00-fb статический
224.0.0.252 01-00-5e-00-00-fc статический
239.255.255.250 01-00-5e-7f-ff-fa статический
255.255.255.255 ff-ff-ff-ff-ff-ff статический

Интерфейс: 192.168.3.3 — 0x10
адрес в Интернете Физический адрес Тип
192.168.3.1 54-55-d5-e3-8d-d4 динамический
192.168.3.7 10-08-c1-be-81-60 динамический
192.168.3.177 00-aa-bb-cc-de-02 динамический
192.168.3.255 ff-ff-ff-ff-ff-ff статический
224.0.0.22 01-00-5e-00-00-16 статический
224.0.0.251 01-00-5e-00-00-fb статический
224.0.0.252 01-00-5e-00-00-fc статический
239.255.255.250 01-00-5e-7f-ff-fa статический
255.255.255.255 ff-ff-ff-ff-ff-ff статически

здесь “192.168.3.177 00-aa-bb-cc-de-02 динамический” - ардуино

Кстати, почему в таблице не присутствует 192.168.3.3 ?

Это мой комп, теперь подключенный к router’у

А компьютер через коммутатор получает ip по dhcp?

Далеко не факт. В дешманских SOHO маршрутизаторах, со 100Мб. портами очень часто идёт именно двухпарка.
Посчитайте кол-во проводов в разъёме кабеля.

Ваша инструкция на другую модель. Без буковки “G”.
Этот да, 100Мб.

Ну это ваш маршрутизатор выдаёт шилду IP, а вот “слышит” ли его шилд, не известно..