简体   繁体   English

在 Arduino Uno R3 和以太网屏蔽上运行 web 服务器时出现问题

[英]Problem running the web server on Arduino Uno R3 and Ethernet shield

I'm trying to run the WebServer example below from the Arduino IDE using an Ethernet shield (Wiznet W5100) that is stacked on top of an Arduino Uno R3.我正在尝试使用堆叠在 Arduino Uno R3 顶部的以太网屏蔽(Wiznet W5100)从 Arduino IDE 运行下面的 WebServer 示例。 The Ethernet shield is connected using an RJ45 cable to an Internet router.以太网屏蔽使用 RJ45 电缆连接到 Internet 路由器。 After uploading the code to the board, I see that the requested IP address (192.168.1.177) is printed to the console.将代码上传到板子后,我看到请求的 IP 地址(192.168.1.177)打印到控制台。 The strange behavior that I'm facing here is that when I ping the IP address, I get a response indicating that the IP is reachable from my laptop.我在这里遇到的奇怪行为是,当我 ping IP 地址时,我收到一个响应,表明 IP 可以从我的笔记本电脑访问。 Also, I see the Tx, Rx LED lights blinking thereby indicating that the board is receiving the ping msgs and replying to them.此外,我看到 Tx、Rx LED 灯闪烁,从而表明开发板正在接收 ping 消息并回复它们。 This means that the board successfully received an IP address and is now connected to the LAN.这意味着板子成功收到了一个 IP 地址,现在已经连接到 LAN。 However, when I try to access the same IP from the browser to receive the HTML page, no response is returned and the browser takes around 30 seconds displaying loading before returning site not reachable message.但是,当我尝试从浏览器访问相同的 IP 以接收 HTML 页面时,没有返回任何响应,并且浏览器在返回站点无法访问消息之前需要大约 30 秒显示加载。 I tried different browsers from both the laptop and an iPhone connected to the same LAN with no luck in receiving the web page.我从连接到同一 LAN 的笔记本电脑和 iPhone 上尝试了不同的浏览器,但没有收到 web 页面。 Any hint as to what the problem could be is highly appreciated.任何关于问题可能是什么的提示都非常感谢。

See below the code and a picture for the Ethernet shield during the experiment.在实验过程中,请参见下面的代码和以太网屏蔽的图片。

        /*
      Web Server

     A simple web server that shows the value of the analog input pins.
     using an Arduino Wiznet Ethernet shield.

     Circuit:
     * Ethernet shield attached to pins 10, 11, 12, 13
     * Analog inputs attached to pins A0 through A5 (optional)

     created 18 Dec 2009
     by David A. Mellis
     modified 9 Apr 2012
     by Tom Igoe
     modified 02 Sept 2015
     by Arturo Guadalupi

     */

    #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() {
      // 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 and the server:
      Ethernet.begin(mac, ip);
      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
        boolean 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");
      }
    }

在此处输入图像描述

To those who come later here for the same problem, it appeared that there was an issue with the DHCP of the Internet router.对于后来遇到同样问题的人来说,互联网路由器的 DHCP 似乎存在问题。 It seems like my router's DHCP was not stable when providing IP addresses for devices connected through the Ethernet ports.为通过以太网端口连接的设备提供 IP 地址时,我的路由器的 DHCP 似乎不稳定。 I replaced the router and the problem went away.我更换了路由器,问题就消失了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM