从PHP文件中读取Arduino以太网

时间:2013-06-12 15:46:49

标签: arduino arduino-ide

我正在编写一个简单的Arduino以太网程序。程序向服务器发送HTTP GET请求,然后服务器发送回声“#Hello Hello"我应该能够通过Arduino以太网接收它并将其打印在Arduino 1.0.4 IDE的串行监视器上。这是一些有用的信息。我在Windows Server 2003上使用XAMPP服务器。我将我的PHP文件放在/ xampp / htdocs / xampp中,文件名是rec.php。 rec.php的内容是

<?php
echo "Hello World";
?>

这是Arduino程序的文件内容

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

byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0x7E, 0xAE}
IPAddress server { 192, 168, 1, 223 };
IPAddress ipAddress { xxx,xxx,xxx,xxx };
IPAddress myDNS {8,8,8,8};
IPAddress myGateway{192,168,1,1};
IPAddress mySubnet{255,255,255,0};

EthernetClient client;

void setup()
{
 Serial.begin(9600);
 Ethernet.begin(mac, ipAddress, myDNS, myGateway, mySubnet);

 delay(1000);
 Serial.println("connecting");

 if(client.connect(server, 80))
 {
  Serial.println("Connected");
  client.println("GET /rec.php HTTP/1.1");
 }
 else
  Serial.println("Not Connected");

}

void loop() 
{
   if(client.available())
   {
       char c = client.read();
       Serial.println(c);
       delay(1000);
   }
   else
   {
      Serial.println("Not Available");
      delay(1000);
   }
}

在Arduino上加载程序后,我在Serial Monitor&#34; HTTP / 1.1 400 Bad Request&#34;上收到此消息。关于如何解决这个问题的任何建议?请保持简单的答案。

1 个答案:

答案 0 :(得分:2)

您没有发送必要的行结束。该协议在请求方法结束时需要CR-LF,在完整请求结束时需要另一个CR-LF,可以包括其他标题行。参见:

HTTP requests

这意味着在您的情况下,您需要两个CR-LF来终止请求。不要依赖默认的println函数。使用print:

控制代码中的行结束
client.print("GET /rec.php HTTP/1.1\r\n\r\n");