[英]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.