首先,对不起我的英语不好,我是法国人。:)
好的,所以我的目标是定期向网络服务器发送温度数据。我在 Raspberry Pi 计算机上使用 LAMP 服务器,温度是从连接到以太网屏蔽的 Arduino 板测量的。为此,我在 Arduino 端设置了一个 POST 请求,将变量“temp”的值发送到服务器。
这部分似乎工作正常,因为client.read()
函数的结果很好,并且与我在 Raspberry Pi 上托管的页面 test.php 的结果相匹配。
在这里你可以看到我的 Arduino 脚本:
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0xF6, 0xFF };
byte ip[] = { 192, 168, 0, 9};
byte gateway[] = { x,x,x,x };
EthernetClient client;
String temp= "data=5";
void setup()
{
Ethernet.begin(mac, ip, gateway);
Serial.begin(9600);
Serial.println(Ethernet.localIP());
delay(1000);
delay(1000);
Serial.println("connecting...");
if (client.connect("192.168.0.55",80))
{
Serial.println("Sending to Server: ");
client.println("POST /test.php HTTP/1.1");
Serial.print("POST /test.php HTTP/1.1");
client.println("Host: 192.168.0.55");
client.println("Content-Type: application/x-www-form-urlencoded");
client.println("Connection: close");
client.println("User-Agent: Arduino/1.0");
client.print("Content-Length: ");
client.println(temp.length());
client.println();
client.print(temp);
client.println();
}
else
{
Serial.println("Cannot connect to Server");
}
}
void loop()
{
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected())
{
Serial.println();
Serial.println("disconnecting.");
client.stop();
for(;;)
;
}
}
这是我的文件 test.php :
<?php
echo 'Temperature = ' . htmlspecialchars($_POST["data"]) . '!';
?>
Arduino串口终端上client.read()的结果为5,证明POST请求和PHP部分正常。但是,如果我在浏览器上访问 url:192.168.0.55/test.php,只会显示“Temperature =”。缺少值 (5)。因此,如果有人知道如何直接在浏览器上显示该值,那对我有很大帮助。
问候纪尧姆