Arduino Nano + W5500

Всем привет.

Пытаюсь запустить веб-сервер или подключиться к сети клиентом, используя связку Arduino Nano + W5500. Код из стандартного Example

Спойлер
#include <SPI.h>

#include <Ethernet.h>




// Enter a MAC address and IP address for your controller below.

// The IP address will be dependent on your local network:

byte mac[] = {

  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED

};

IPAddress ip(192, 168, 1, 177);




// Initialize the Ethernet server library

// with the IP address and port you want to use

// (port 80 is default for HTTP):

EthernetServer server(80);




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

  }

  Serial.println("Ethernet WebServer Example");




  // start the Ethernet connection and the server:

  Ethernet.begin(mac, ip);




  // Check for Ethernet hardware present

  if (Ethernet.hardwareStatus() == EthernetNoHardware) {

    Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");

    while (true) {

      delay(1); // do nothing, no point running without Ethernet hardware

    }

  }

  if (Ethernet.linkStatus() == LinkOFF) {

    Serial.println("Ethernet cable is not connected.");

  }




  // start the server

  server.begin();

  Serial.print("server is at ");

  Serial.println(Ethernet.localIP());

}





void loop() {

  // listen for incoming clients

  EthernetClient client = server.available();

  if (client) {

    Serial.println("new client");

    // an HTTP request ends with a blank line

    bool currentLineIsBlank = true;

    while (client.connected()) {

      if (client.available()) {

        char c = client.read();

        Serial.write(c);

        // if you've gotten to the end of the line (received a newline

        // character) and the line is blank, the HTTP request has ended,

        // so you can send a reply

        if (c == '\n' && currentLineIsBlank) {

          // send a standard HTTP response header

          client.println("HTTP/1.1 200 OK");

          client.println("Content-Type: text/html");

          client.println("Connection: close");  // the connection will be closed after completion of the response

          client.println("Refresh: 5");  // refresh the page automatically every 5 sec

          client.println();

          client.println("<!DOCTYPE HTML>");

          client.println("<html>");

          // output the value of each analog input pin

          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {

            int sensorReading = analogRead(analogChannel);

            client.print("analog input ");

            client.print(analogChannel);

            client.print(" is ");

            client.print(sensorReading);

            client.println("<br />");

          }

          client.println("</html>");

          break;

        }

        if (c == '\n') {

          // you're starting a new line

          currentLineIsBlank = true;

        } else if (c != '\r') {

          // you've gotten a character on the current line

          currentLineIsBlank = false;

        }

      }

    }

    // give the web browser time to receive the data

    delay(1);

    // close the connection:

    client.stop();

    Serial.println("client disconnected");

  }

}

Ардуина видит шилд W5500, (потому как без него выдает в терминал)

"Ethernet shield was not found. Sorry, can’t run without hardware.

но страницу никак не создает. В отладку Arduino IDE прилетает:

Ethernet WebServer Example
server is at 192.168.1.177

но в браузере по адресу 192.168.1.177 страница не грузится, а на ipconfig сомандная строка выдает вообще такие адреса (по которым в браузере тоже ничего не грузится):

Собственно, товарищи, что может быть “не так” или почему страница не создается?

Права на пользование Ардуино отзованы на 3 месяца.
Возврат только после пересдачи теста “Адресация и маршрутизация в сетях IP”
:rofl:

1 лайк

Что где нужно подправить?

Подсеть в ардуино на 8ю смени.

1 лайк

Вот даже интересно стало для саморазвития - а если маску сменить на 255.255.0.0 ?

Её менять на обоих устройствах нужно будет. Проще в ардуино подсеть поменять.

Спасибо!

Это да. Я ж говорю - для понимания. Если маску задать другую, по сути же должно работать ? Или роутер не даст возможности видеть им друг друга ? Хотя вроде “сетевой мост” заявлен.

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

1 лайк

Ардуино то тут причем?
Человек сетей не знает.

Интересно, кто ему в Винде восьмую сеть настроил? Явно не он сам.
Кирилл, у вас есть старший брат, админ?

Для того, чтобы они увидели друг друга нужно, чтобы прошел ARP запрос по broadcast. А поскольку при маске 255.255.0.0 bradcast на другом адресе, то в ARP табличку ничего не попадет.

Задача после которой вы поймете многое.

Есть 2 ethernet интерфейса. У одного выставлено 192.168.0.1 netmask 255.255.255.255, у второго 192.168.0.2 netmask 255.255.255.255 .

Что надо сделать, чтобы через них начался обмен?

Что ?
Вы сами-то понимаете, что означает эта маска?

Сети 192.168.1.х и 192.168.8.х обе соответствуют маске 255.255.0.0

Даже при такой маске можно их соединить.

не надо переобуваться

на каком “другом адресе” ?

Я никоим образом не переобуваюсь.

Есть характерная задачка. Вы все сидите на одном роутере 192.168.0.1 netmask 255.255.255.0 и один поставил себе адрес 192.168.0.1 netmask 255.255.255.0 . Как сделать у себя, чтобы злоумышленник не мешал вам?

О! Сэр не знает broadcast адреса?

если у злоумышленника адрес совпадает с адресом роутера, то внешняя маршрутизация один хер работать не будет, что ни ставь :slight_smile:
Внутри сети от него можно отгородится, но смысл :slight_smile: Отгородившись от него - отгородишься и от роутера.
Проще найти придурка и отпи..ть

А я думаю что тут кто-то другой не знает.

Еще раз цитата:

Так вот, повторяю - для сетей 192.168.1.х и 192.168.8.х маска 255.255.0.0 - правильная. И броадкаст, вычисленный по этой маске, будет такой что сети должны видеть друг друга.

Другой вопрос, что много какие приложения не умеют маршрутизацию сетей старше С, какие маски не ставь

Садись 2.

Подсказка
ARP, Request who-has 192.168.113.212 (2b:0d:04:01:09:01) tell 192.168.113.240, length 46