2

我正在尝试获取一个 PHP 网页,以通过 Apache Web 服务器从带有以太网屏蔽的Arduino Uno获取温度读数。我正在将温度读数写入一个文本文件,然后使用两个 PHP 文件将其从那里带到PHP网页上。

但是,我无法将温度读数写入文本文件。我不确定 Arduino 代码是否不正确并且没有发送温度读数,或者 PHP 代码是否不正确并且没有接收温度读数。当我从网页读回串行监视器时,我知道 Arduino 和网页正在通信。

Arduino代码

#include <Ethernet.h>  //Library for Ethernet functions
#include <SPI.h>
#include <Client.h>    //Library for client functions

byte MACaddress[] = {0x90, 0xA2, 0xDA, 0x0D, 0x8B, 0xB3};  //Replace with your Ethernet shield MAC address
byte IPaddress[] = { 192,168,1,102};  //The Arduino device IP address
byte subnet[] = { 255,255,255,0};
byte gateway[] = { 192,168,0,1};
IPAddress server(192,168,1,100);      // IP address of server the 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(MACaddress);

    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 /arduino.php?t0=\n");
            Serial.print("GET /arduino.php?t0=\n");
            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;
    }
 }

Arduino.php 代码

<?php
    echo date("d.m.Y-H:i:s");
    file_put_contents("C:\Folder\Mechatronics Application\Semester 2\Project               \Hello.txt",$_GET['t0']);
?>

index.php 代码

<?php
    echo date("d.m.Y-H:i:s");
    $string1 = file_get_contents("C:\Folder\Mechatronics Application\Semester 2\Project\Hello.txt");
    echo $string1;
?>
4

1 回答 1

0

一般系统理论的原则之一是“从零开始设计的复杂系统永远不会工作,也无法通过修补使其工作。你必须重新开始,从一个工作简单的系统开始。”

在您的情况下,这意味着“分而治之”。

除了文本文件的路径之外,您的服务器/ PHP子系统不需要知道任何内容。该文本文件与您的微控制器没有任何关系只需在编辑器中创建一个包含虚拟数据的文本文件。将其置于版本控制之下。让您的服务器/PHP 子系统使用它。现在该文本文件是您的回归测试的一部分。

使用运行 shell 脚本或简短的 PHP、RubyPython程序的cron作业以定期编写合理的随机数据来增强这一点。当它起作用时,您的网页应该显示随时间变化的数据。

一旦成功您就可以开始研究 Arduino 子系统,知道服务器/PHP 端是好的。

于 2013-04-06T14:22:03.327 回答