1

首先,对不起我的英语不好,我是法国人。:)

好的,所以我的目标是定期向网络服务器发送温度数据。我在 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)。因此,如果有人知道如何直接在浏览器上显示该值,那对我有很大帮助。

问候纪尧姆

4

1 回答 1

1

好吧,你做的不对,但这是你没有得到正确的整个 http 请求概念,所以详细解释会很长。简而言之:

您的 arduino 正在向您的服务器发送 http 请求。由于您没有指定页面,它的目标是默认页面,很可能是 index.php。你应该做的是捕获 POST 数据并将其存储在某个地方,很可能是一个数据库,但它也可能是一个文件。

当您显示 test.php 页面时,该请求期间没有发布数据(这不是您的 arduino 控制器发起的数据),因此没有什么可显示的。您应该做的是查询您的数据库以显示上一步中存储的数据

编辑 :

以下是有关您应该做什么的几个步骤:

  1. 创建数据库表来存储您的数据。最好存储温度,存储日期,以及未来的一些“备注”字段
  2. 创建一个处理 POSTED 数据的 PhP 脚本并将其存储在数据库中
  3. 从一个非常基本的 HTML 表单向该脚本发出请求:1 个 texbox,在您的 arduino 上带有您的 post 变量的名称,1 个提交按钮。此表单将允许您测试您的 PhP 脚本
  4. 一旦你没问题,就向你的 arduino 提出同样的要求
  5. 从那里开始,如果一切顺利,您将能够将从您的 arduino 发送的数据存储到数据库中。使用 PhPMyadmin 之类的东西,您应该能够看到数据
  6. 编写一个 PhP 脚本来读取和显示存储在数据库中的数据(也是一个非常基本的操作,你会找到很多教程来做到这一点)
于 2013-05-10T14:18:33.427 回答