2

我正在尝试使用Arduino 和 Ethernet shield访问我的服务器中的PHP文件。此文件捕获 URL 参数“传感器”和“值”并将读取的数据存储到数据库中。

这是我的代码:

#include <SPI.h>
#include <Ethernet.h>

EthernetClient client;

byte MACaddress[] = {0xDE,0xAD,0xBE,0xEF,0xFE,0xED};
byte IPaddress[] = {10,0,0,178};
byte DNSserverIPaddress[] = {4,4,4,4};
byte gatewayIPaddress[] = { 10, 0, 0, 100 };
byte subnetMask[] = { 255, 255, 255, 0 };
char serverName[] = "log.server.com";


void setup() {
    Serial.begin(9600);
    Ethernet.begin(MACaddress, IPaddress, DNSserverIPaddress, gatewayIPaddress, subnetMask);
}


void loop()
{
    delay (5000);

    Serial.println("connecting to server...");
    client.connect(serverName, 80);
    Serial.println("making HTTP request...");
    client.println("GET /logger.php?sensor=temp&value=19 HTTP/1.1");
    client.println("HOST: log.server.com");
    client.println();
}

将此代码上传到我的Arduino Mega + Ethernet shield 后,我的数据库中没有任何变化......

怎么了?

4

1 回答 1

1

好吧,首先你应该添加一个条件检查来了解 Arduino 是否认为它有效:

if (client.connect(...)) { 
    /* Stuff you do on success */
} 
else { 
    Serial.println("failure! :-(") 
}
  • 如果确实打印了,failure!那么您在 Arduino 端遇到了网络配置问题。如果它确实有效,那么问题就出在 Arduino 之后。

然后尝试打开服务器并在 Arduino草图nc -kl 42000中更改您连接的端口,以确保网络连接是否有效。42000

  • 如果它确实有效,那么您的主机端(网络服务器)有问题,如果没有,您可能在 Arduino 和主机之间的网络上有问题。

然后,您应该尝试连接到服务器的IP 地址,而不是完全限定的域名(FQDN)。如果可行,则可能是无法访问的 DNS 服务器,您应该尝试8.8.8.8改用(或您本地网络的 DNS 服务器)。

还要检查您正在使用的 IP 地址是否确实是免费使用的(不是由DHCP 分配或由另一台计算机使用),以及MAC 地址是否真的未被使用......(像这样的地址{0xDE,0xAD,0xBE,0xEF,0xFE,0xED}往往被大量使用在黑客...)。

我的观点是,您的错误是无法访问的 DNS 服务器,因为在4.4.4.4.

于 2013-07-02T12:01:05.000 回答