我是arduino和PHP的新手,我试图将arduino uno的温度和湿度读数与以太网屏蔽发送到PHP网页,然后从PHP网页控制风扇,一些阀门等。我的第一个问题是我不能得到温度读数实际显示在PHP网页上。请参阅附件arduino代码和PHP代码。我将非常感谢任何关于这方面的帮助或建议。
感谢Arduino代码:
#include <Ethernet.h> //library for ethernet functions
#include <SPI.h>
#include <Client.h> //library for client functions
// Ethernet settings
byte mac[] = {0x90,0xA2,0xDA,0x0D,0x8B,0xB3}; //Replace with your Ethernet shield MAC
byte ip[] = { 192,168,1,105}; //The Arduino device IP address
byte subnet[] = { 255,255,255,0};
byte gateway[] = { 192,168,0,1};
IPAddress server(192,168,1,110); // IP-adress of server arduino sends data to
EthernetClient client;
bool connected = false;
int sensorInPin = 0;
float temperature = 0;
void setup(void)
{
Serial.begin(9600);
Serial.println("Initializing Ethernet.");
delay(1000);
Ethernet.begin(mac);
Serial.println("LM35 Sensor ");
analogReference(INTERNAL);
}
void printTenths(int value)
{
// prints a value of 123 as 12.3
Serial.print(value / 100);
Serial.print(".");
Serial.println(value % 10);
}
void loop(void)
{
int span = 20;
int aRead = 0;
for (int i = 0; i < span; i++)
{
aRead = aRead+analogRead(sensorInPin);
}
aRead = aRead / 20;
temperature =((100*1.1*aRead)/99)*10;
if(!connected)
{
Serial.println("Not connected");
if (client.connect(server,80))
{
connected = true;
//int temp = analogRead(A1);
Serial.print("Temp is ");
Serial.println(temperature);
Serial.println();
Serial.println("Sending to Server: ");
client.print("GET /index.php?t0=");
Serial.print("GET /index.php?t0=");
client.print(temperature);
Serial.print(temperature);
Serial.println();
client.println();
client.println("HTTP/1.1'r'n");
Serial.println();
Serial.println("HTTP/1.1'r'n");
client.println("Host: localhost'r'n");
Serial.println("Host: localhost'r'n");
client.println();
client.println("User-Agent: Arduino'r'n");
Serial.println("User-Agent: Arduino'r'n");
client.println("Accept: text/html'r'n");
Serial.println("Accept: text/html'r'n");
client.println();
Serial.println();
delay(1000);
}
else
{
Serial.println("Cannot connect to Server");
}
}
else
{
delay(1000);
while (client.connected() && client.available())
{
char c = client.read();
Serial.print(c);
}
Serial.println();
client.stop();
connected = false;
}
}
PHP代码 <?php
echo date("d.m.Y-H:i:s") . " Temperature= " . $_GET['t0'];
?>
正如在评论中指出的那样(参见MortenSickel的评论),一切都工作正常,这只是一个设计问题。你有什么:
- Arduino向您的服务器发出
GET
请求,以使用当前温度更新服务器 - 服务器获取该温度,并将其返回到Arduino
从您所展示的,这一切都是正常工作的,然而,据推测,这不是您想要的行为。您可能需要的内容如下:
- Arduino向您的服务器发出
GET
请求,以使用当前温度更新服务器 - 服务器获取该温度并将其存储在某处
- 当互联网用户(不是Arduino)连接到该服务器时,温度显示给互联网用户。
有几种实现方法。最简单的可能是这样的:
- 将
index.php
重命名为arduino.php
,并将Arduino连接到该(而不是index.php
) - 将代码添加到php文件中,现在称为
arduino.php
,以将温度存储在文件中。您可以使用file_put_contents函数来完成此操作。 - 为您的互联网用户创建一个新的
index.php
。它将读取arduino.php
创建的文件,并告诉互联网用户温度。
关于如何并发访问这个文件还有更复杂的问题,但是这些在这个阶段不相关。
不能发送温度。温度不是字符串,它是浮点数。你应该把float改成string