首页 文章

使用Arduino Ehernet shield访问URL

提问于
浏览
2

我试图使用Arduino和以太网shield访问我的服务器中的PHP文件 . 此文件捕获URL参数"Sensor"和"Value",并将读取的数据存储到数据库中 .

这是我的代码:

#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以太网屏蔽后,我的数据库中没有任何变化......

怎么了?

1 回答

  • 1

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

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

    然后尝试使用 nc -kl 42000 打开服务器并在Arduino sketch中更改 42000 上连接的端口,以确保网络连接是否正常工作 .

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

    然后,您应该尝试连接到服务器的IP address而不是fully qualified domain name(FQDN) . 如果可行,则可能是DNS服务器无法访问,您应该尝试使用 8.8.8.8 (或您的本地网络的DNS服务器) .

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

    我的意见是,你的错误是无法访问的DNS服务器,因为在 4.4.4.4 上没有打开DNS解析器 .

相关问题