Неверный 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());
}
@Deekay, 👍0
Обсуждение2 ответа
W5500 отлично работает с диапазонами IP до xxx.127.xxx.xxx. Но со вторым октетом 128 или выше IP становится случайным числом, т.е. искажается. Не удалось решить проблему. Для других диапазонов IP проблем нет
Добро пожаловать в Arduino:SE. Я не уверен, задумано ли это как частичный ответ на вопрос ФП или как новый вопрос?, @sempaiscuba
У меня была та же проблема: отображался странный IP. Также светодиоды подключения Lan странно мигали: зеленый загорался на секунду, затем гас, а затем оранжевый делал то же самое. Решение для меня: внешний источник питания с 7 В на Vin. Видимо, Lan shield потребляет слишком много энергии для источника питания USB...
Также он работает со стандартной библиотекой Ethernet
что-то не так с вашим оборудованием, если USB не обеспечивает достаточного питания для Uno с Ethernet Shield, @Juraj
- Клиент MQTT на Arduino + SIM900
- Удаленная загрузка кода на плату Arduino через интернет
- Отправка данных Arduino через Ethernet на сервер PHP.
- Простая веб-страница с Ethernet-шилдом Arduino на SD-карте
- Есть ли тайм-аут для Ethernet.begin?
- Как создать сервер сокетов Arduino для получения сообщений
- При подключении client.connect() возвращает 0
- Невозможно настроить Ethernet с помощью Arduino Uno R3
Ваша сеть использует 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