1

我是 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']; 
  ?>
4

2 回答 2

2

正如评论中所指出的(参见MortenSickel上面的评论和其他评论),一切正常,这只是一个设计问题。你有什么:

  • ArduinoGET向您的服务器发出请求以使用当前温度更新服务器
  • 服务器获取该温度,并将其回显给 Arduino

从您所展示的内容来看,这一切都正常工作,但是,大概这不是您想要的行为。您可能想要的是以下内容:

  • ArduinoGET向您的服务器发出请求以使用当前温度更新服务器
  • 服务器获取该温度并将其存储在某处
  • 当互联网用户(不是 Arduino)连接到该服务器时,温度会显示给互联网用户。

有几种实现方式。最简单的可能是这样的:

  • 将您的重命名index.phparduino.php,并让您的 Arduino 连接到该名称(不是index.php
  • 将代码添加到现在调用的 php 文件中arduino.php,以将温度存储在文件中。您可以使用file_put_contents函数来执行此操作。
  • index.php为您的互联网用户创建一个新的。这将读取文件arduino.php创建并告诉互联网用户温度。

如何同时访问此文件存在更复杂的问题,但在现阶段这些问题不相关。

于 2013-04-02T15:47:37.683 回答
0

你不能发送温度。温度不是一个字符串,它是一个浮点数。您应该将浮点数更改为字符串。

于 2019-04-11T13:57:27.060 回答