这个问题我已经找了几天了,但还是没有找到答案。
我正在尝试基于arduino IDE提供的示例代码与Arduino shield建立一个简单的Webclient连接。下面是我正在尝试执行的代码的简化版本:
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte server[] = { 173 ,194, 46, 34 }; // Google
EthernetClient client;
void setup()
{
Ethernet.begin(mac);
Serial.begin(9600);
delay(1000);
Serial.println(Ethernet.localIP());
Serial.println("connecting...");
if (client.connect(server, 80)) {
Serial.println("connected");
client.println("GET /search?q=arduino HTTP/1.0");
client.println();
} else {
Serial.println("connection failed");
}
}
void loop()
{
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
for(;;)
;
}
}并且总是得到答案:
192.168.0.103
connecting...
connection failed
disconnecting.这意味着client.connect(服务器,80)出现故障。我已经尝试了几个IP地址,结果是一样的。屏蔽工作正常,就像我尝试过的WebServer示例一样,似乎工作得无懈可击。
关于硬件:我使用的是基于W5100的Arduino UNO R3和以太网屏
有什么建议吗?
发布于 2015-08-05 04:35:28
我查看了以太网库的source code,假设您有一个最新版本的库。在我看来,Arduino EthernetClient connect()函数需要一个IPAddress对象或一个带有远程主机名称的字符串(char *)。您正在向它传递一个字节数组,我猜测它可能会将其解释为一个字符串。尝试按如下方式声明server全局变量:
IPAddress server(173 ,194, 46, 34);如果它工作正常,则表明您可能从中获取代码的official documentation已过时。
此外,您可以尝试将所有其他参数作为IPAddress对象提供给DHCP函数,这样就不会使用DHCP,并且可以排除自动配置问题。原型是:
void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server, IPAddress gateway, IPAddress subnet);发布于 2017-03-09 15:07:59
抱歉,回复晚了。
只需在调用client.connect()之前添加6秒的延迟
所以初始化以太网屏需要时间....-by体验
发布于 2014-01-28 06:36:02
我设法找到了一种变通方法。似乎只有在第一次调用client.connect时才会失败。因此,我在1秒延迟后添加了一个虚拟呼叫(在进行真正的呼叫之前)。
这不能回答问题,但它确实解决了问题。欢迎任何关于为什么会发生这种情况的反馈。
delay(1000);
client.connect(server, 80); // Dummy callhttps://stackoverflow.com/questions/21387597
复制相似问题