Arduino Nano + ENC28J60 не задается маска (subnet)

Добрый день.
Использую Arduino Nano на ATmega328P (Old Bootloader) и ENC28J60 Ethernet V1.0.
В скетче использую библиотеку “UIPEthernet”
Но не применяется маска сети (subnet):

***
byte mac[] = { 0x30, 0xAE, 0xA4, 0x07, 0x0D, 0x66 };
byte ip[] = { 10, 0, 0, 10 };
byte subnet[] = {255, 255, 0, 0};
***
void setup() {
Ethernet.begin(mac, ip, subnet);
***

Ардуино пингуется по ip, но с маской 24, а надо именно 16.
Подскажите, пожалуйста, как применить.

как вы это проверили?

Пинговал.

  • Ноут 10.0.0.100/16, арудуино 10.0.0.10/16 - пинги есть
  • Ноут 10.0.10.100/16, арудуино 10.0.0.10/16 - пингов нет
  • Ноут 10.0.10.100/16, арудуино 10.0.10.10/16 - пинги есть
  • Ноут 10.0.10.100/24, арудуино 10.0.10.10/16 - пинги есть

а ноуте какая маска при этом? Физически устройства в одной сети? Все концентраторы и маршрутизаторы в курсе, что это одна сеть?

Через слеш же я маску написал. Сделал сеть из ноута и ардуино, всё соединено через обычный коммутатор (неуправляемый).
16 - 255.255.0.0
24 - 255.255.255.0

А какая причина менять маску? За всю комьютерную жизнь никогда не менял маску. Может есть в смене какой то сокральный смысл? А вы не думали, что производитель контроллера вашего шилда, просто тупо зашил её жестко.

не знаю…
Может библиотека “UIPEthernet” не поддерживает, а может ваш коммутатор.

Я вот не возьмусь сразу сказать, будут ли видеть друг друга в одном сегменте более 255 устройств, если задать маску \16.
А зачем это надо? почему нельзя сделать проще, все кто в одной сети - напрямую, а всех кто в иной - через роутинг?

Ардуино будет использоваться в подсети 255.255.0.0, точнее она даже там используется, но с ip 10.0.0.10, чтоб устройства с ip 10.0.0.Х/16 ее пинговали. Однако возникла необходимость пинговать с устройства 10.0.Х.Х/16 и уже надо именно 16-ую маску.
Я тоже склоняюсь, что она зашита “намертво”. Покупали с Ali 2 штуки ENC28J60 Ethernet V1.0, затем купили у другого продавца еще 2, но из четырех ни у одной не получается сделать 16-ую маску.

Будут)

Вот такая вот задачка поставилась

Я бы для начала, чтобы исключить влияние свича, обжал бы крос и подключил бы напрямую к ПК.

А какую библиотеку посоветуете? Просто в инете много инструкций по ней, по этому выбрал ее

Там разные свичи уже были. Уже год использую я ее для измерения температуры. Кроссом только не соединял))

Возьмите W5500 или на крайняк W5100 уэтих чипов круче возможности. Правда и стоят дороже раза в 2-3

Есть повод )))

Начнем с того, что есть два варианта UIPEthernet и неизвестно, какой использован.

Хотя, как я вижу, в данном случае это наврядли имеет значение, т.к.:

  void begin(const uint8_t* mac, IPAddress ip);
  void begin(const uint8_t* mac, IPAddress ip, IPAddress dns); // <<<<< 
  void begin(const uint8_t* mac, IPAddress ip, IPAddress dns, IPAddress gateway);
  void begin(const uint8_t* mac, IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet);

Конструктор #2, subnet всегда default, т.е. /24.
Конструктор #4, не применен.

1 лайк

Я взял “EtherCard” за место “UIPEthernet” и всё хорошо применилось.

Т.е. нужно было просто поменять библиотеку, а не применить маску сети там, где полагается, вместо того, чтобы совать её в параметр DNS? Штош, запишем в FAQ.

1 лайк

Приму на будущее к сведению как прописывать данные LAN в “UIPEthernet”. Спасибо

Интересно девки пляшут…
а на библиотеке ESP маску можно вводить и это логично, для надёжности сетку для таких девайсов лучше бить по 4 адреса…а нехрен для всех светить