2

Arduino とイーサネットシールドを使用して、サーバー内の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 + Ethernetシールドにアップロードした後、データベースに何も変化がありません...

なにが問題ですか?

4

1 に答える 1

1

まず、条件チェックを追加して、Arduino が機能したかどうかを確認する必要があります。

if (client.connect(...)) { 
    /* Stuff you do on success */
} 
else { 
    Serial.println("failure! :-(") 
}
  • 表示される場合はfailure!、Arduino 側でネットワーク構成に問題があります。それが機能する場合、問題は Arduino の後です。

次に、 でサーバーを開き、nc -kl 42000接続先のポートを42000Arduino sketchで変更して、ネットワーク接続が機能するかどうかを確認します。

  • 動作する場合は、ホスト側 (Web サーバー) に問題があります。動作しない場合は、Arduino とホストの間のネットワークに問題がある可能性があります。

次に、完全修飾ドメイン名(FQDN)ではなく、サーバーのIP アドレスへの接続を試みる必要があります。それが機能する場合、到達できないのは DNS サーバーである可能性があり、代わりに (またはローカル ネットワークの DNS サーバー) を使用してみてください。8.8.8.8

また、使用している IP アドレスが実際に使用されていない ( DHCPによって割り当てられていない、または別のコンピューターによって使用されていない) こと、およびMAC アドレスが実際に使用されていないことを確認してください... (次のようなアドレスはよく使用{0xDE,0xAD,0xBE,0xEF,0xFE,0xED}される傾向があります)ハックで...)。

私の意見では、DNS リゾルバーが開かれていないため、到達できない DNS サーバーがバグであるということです4.4.4.4

于 2013-07-02T12:01:05.000 に答える