首页 文章

使用Arduino以太网屏蔽在webserveur上发出POST请求

提问于
浏览
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部分正在工作 . 但是,如果我在我的浏览器上访问网址:192.168.0.55/test.php,则只显示“Temperature =” . 缺少值(5) . 因此,如果有人知道如何直接在我的浏览器上显示该值,它对我有很大帮助 .

关心纪尧姆

1 回答

  • 1

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

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

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

    编辑:

    以下是您应该做的一些步骤:

    • 创建数据库表以存储数据 . 存储温度会很好,但也可以存储它的日期,并最终保存一些"remark"字段以供将来使用

    • 创建一个处理POSTED数据并将其存储在数据库中的PhP脚本

    • 从一个非常基本的HTML表单向该脚本发出请求:1个带有你的arduino上的post变量名称的texbox,1个用于提交的按钮 . 此表单将允许您测试您的PhP脚本

    • 一旦你对它好,请从你的arduino发出相同的请求

    • 从那里,如果一切顺利,你将能够将从arduino发送的数据存储到数据库中 . 使用像PhPMyadmin这样的东西你应该能够看到数据

    • 写一个PhP脚本来读取和显示存储在数据库中的数据(这也是一个非常基本的操作,你会找到很多教程来做)

相关问题