2013-06-12 4 views
1

Я пишу простую программу Ethernet Arduino. Программа отправляет HTTP-запрос GET на сервер, а затем серверный echo «Hello World», и я должен получить его через Ethernet Arduino и распечатать его на последовательном мониторе IDE Arduino 1.0.4. Вот некоторая полезная информация. Я использую сервер XAMPP в Windows Server 2003. Я поместил свой файл PHP в/xampp/htdocs/xampp, а имя файла - rec.php. Содержание rec.php являетсяArduino Ethernet Чтение из 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 «HTTP/1.1 400 Bad Request». Любое предложение о том, как решить эту проблему? и, пожалуйста, держите свои ответы простыми.

ответ

2

Вы не отправляете необходимые концы строк. Протокол требует CR-LF в конце метода запроса и другого CR-LF в конце полного запроса, который может включать в себя другие строки заголовка. См:

HTTP requests

Это означает, что в вашем случае нужно два CR-LF, чтобы завершить запрос. Не полагайтесь на функцию println по умолчанию. Возьмите контроль над концами линии в вашем коде с помощью печати:

client.print("GET /rec.php HTTP/1.1\r\n\r\n");