Неверный IP-адрес при использовании библиотеки Ethernet с модулем Ethernet Arduino Uno и WizNet 5500.

Я пытаюсь подключить модуль Ethernet с чипсетом W5500 к моей сети на Arduino Uno, но что бы я ни делал, я всегда получаю неверный IP-адрес.

Модуль подключен как SPI по умолчанию, с контактом CS на контакте 10.

Изначально я использовал не те библиотеки (предназначенные для ENC28J60), пока Юрай не указал мне, что у меня чипсет W5500.. р>

Поэтому я загрузил пример скетча веб-сервера Ethernet в свою среду разработки Arduino (1.8.13), изменил значение IP, скомпилировал его и попытался запустить. В моем коде я установил IP-адрес 192.168.123.225, но последовательный монитор показал мне IP 192.80.239.132.

После некоторого поиска в Google я нашел сообщение под названием Библиотека Ethernet неправильно инициализирует IP, а также несколько других страниц, на каждой из которых указано, что для набора микросхем W5500 вместо Ethernet следует использовать библиотеку Ethernet2.

Я попробовал установить библиотеку Ethernet2 из Arduino IDE, результат тот же. Я загрузил пример скетча этой библиотеки, результат тот же. После загрузки библиотеки с GitHub (как показано на другой странице с описанием той же проблемы) , я получил несколько ошибок и закомментировал некоторые разделы, как показано в моем коде ниже, но результат остался тот же.

В коде с комментариями вы также можете видеть, что я добавил проверку, действительно ли мой модуль распознан как W5500, и это так...

Итак, мой вопрос, хотя и сложный, но очень простой: как мне правильно установить IP на модуле чипсета W5500, подключенном к Arduino Uno?

Вот мой код (очевидно, я пропустил цикл):

#include <SPI.h>
#include <Ethernet2.h>

// Введите ниже MAC-адрес и IP-адрес вашего контроллера.
// IP-адрес будет зависеть от вашей локальной сети:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 123, 225);

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

void setup()
{
  // Вы можете использовать Ethernet.init(pin) для настройки вывода CS
  Ethernet.init(10);  // Большинство шилдов Arduino

  // Открытие последовательной связи и ожидание открытия порта:
  Serial.begin(9600);
  while (!Serial)
  {
    ; // ждем подключения последовательного порта. Требуется только для собственного порта USB
  }
  Serial.println("Ethernet WebServer Example");

  // запускаем Ethernet-соединение и сервер:
  Ethernet.begin(mac, ip);

  // Проверка наличия оборудования Ethernet
  /*
  if (Ethernet.hardwareStatus() == EthernetNoHardware)
  {
    Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    while (true)
    {
      delay(1); // ничего не делать, нет смысла работать без оборудования Ethernet
    }
  }
  else
  {
    if (Ethernet.hardwareStatus() == EthernetW5500)
    {
      Serial.println("Ethernet shield is a W5500");
    }    
  }

  if (Ethernet.linkStatus() == LinkOFF)
  {
    Serial.println("Ethernet cable is not connected.");
  }
  */

  // запускаем сервер
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

, 👍0

Обсуждение

Ваша сеть использует DHCP? Возможно, сеть пытается присвоить вашему устройству «нужный» IP-адрес. Есть ли тестовый скетч с библиотекой W5500, использующей DHCP для подключения к сети? Возможно, этот эскиз поможет сузить проблему... https://github.com/RoboCore/Ethernet_W5500/blob/master/examples/DhcpAddressPrinter/DhcpAddressPrinter.ino, @VE7JRO

попробуйте пример WebClient библиотеки Ethernet версии 2.0.0+. у него расширенная диагностика (не комментируйте), @Juraj

@VE7JRO Да, моя сеть использует DHCP, но если бы адрес был адресом DHCP, он был бы в диапазоне 192.168.123.x . Я попробую упомянутый вами эскиз, чтобы выяснить, какой IP-адрес я получаю при использовании DHCP. Мне интересно узнать, работает ли DHCP., @Deekay

@Juraj Спасибо за подсказку, я попробую и обновлю соответственно. И нет, диагностику комментировать не буду ;), @Deekay

@VE7JRO Ну, я скачал библиотеку Ethernet_W5500 по вашей ссылке, заменил все файлы в разделе «Ethernet» этими файлами и снова попробовал пример клиента WebServer, проверив в исходном коде, что W5500 активен, но, к сожалению, я все еще получаю неправильный IP-адрес. адрес (192.80.239.132)., @Deekay

@Juraj Я проверил и (до тестирования ответа VE7JRO) у меня была версия библиотеки Ethernet 2.0.2. Я загрузил пример WebClient, но так и не получил DHCP-адрес (я изменил MAC-адрес в коде на тот, который разрешен в моей сети). Я отказался от DHCP и установил статический IP-адрес (так же, как указано выше), но, как и код, на который указывал VE7JRO, я получил тот же ошибочный IP-адрес..., @Deekay

проверь проводку, @Juraj

@Juraj Насколько я могу судить, проводка правильная. Vcc к 3,3 В (от отдельного источника), земля в сочетании с Arduino, SCK к контакту 13 Arduino, Mi (miso) к 12, Mo (mosi) к 11, SC (ss) к 10 (как указано в код, единственный переменный вывод). Вывод Int не подключен, вывод Reset не подключен (они никогда не упоминаются в найденных мной статьях)., @Deekay

должен ли модуль питаться напряжением 3,3 В? некоторые модули Ethernet имеют преобразователь с 5 В на 3,3 В для W5500, поскольку некоторые Arduino не могут обеспечить достаточный ток на выводе 3,3 В., @Juraj

@Juraj Да, именно этот модуль должен питаться от напряжения 3,3 В. Кроме того, я питаю модуль не от Arduino, а от отдельного (лабораторного) источника питания, и да, оба заземления (Arduino и лабораторный источник питания) подключены., @Deekay

если begin зависает, это проблема со связью с модулем, @Juraj

@Juraj Begin не зависает, вся настройка выполняется, и окончательный файл Serial.println печатает неправильный IP-адрес., @Deekay

Я имел в виду «начать» использовать DHCP. начать со статического IP-адреса никогда не дает сбоя, но если это не сработало, повторное чтение IP-адреса дает вам случайное значение., @Juraj

@Юрай, боюсь, я немного запутался, я не использую DHCP. Или вы предлагаете мне начать с использования DHCP в качестве теста? Поскольку я уже тестировал использование DHCP и никогда не получал IP-адрес, независимо от того, разрешен ли назначенный мной MAC-адрес явно в моей сети., @Deekay

Я все еще рассматриваю пример WebClient библиотеки Ethernet как базового инструмента устранения неполадок., @Juraj

@Juraj Это эскиз, который я пробовал 29 марта, но так и не получил адрес DHCP. Вот почему я перешел на использование статического IP-адреса. Есть идеи, как выяснить, почему начало DHCP зависает?, @Deekay

W5500 отлично работает с диапазонами IP до xxx.127.xxx.xxx. Но со вторым октетом 128 или выше IP становится случайным числом, т.е. искажается. Не удалось решить проблему. Для других диапазонов IP проблем нет., @M.A. Salim


1 ответ


0

W5500 отлично работает с диапазонами IP до xxx.127.xxx.xxx. Но со вторым октетом 128 или выше IP становится случайным числом, т.е. искажается. Не удалось решить проблему. Для других диапазонов IP проблем нет

,

Добро пожаловать в Arduino:SE. Я не уверен, задумано ли это как частичный ответ на вопрос ФП или как новый вопрос?, @sempaiscuba