2013-04-01 2 views
0

Я новичок в arduino и PHP, я пытаюсь отправить показания температуры и влажности из arduino uno с помощью экрана ethernet на веб-страницу PHP, а затем управлять вентилятором, некоторыми клапанами и т. Д. С PHP веб-страница. Моя первая проблема заключается в том, что я не могу получить показания температуры для фактического отображения на веб-странице PHP. См. Прилагаемый код arduino и код PHP. Я бы очень признателен за любую помощь или предложения по этому поводу.Arduino & PHP query

Благодаря

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']; 
    ?> 
+0

Каково нынешнее поведение? Печатает ли вы то, что вы ожидаете от сериала? – angelatlarge

+0

Да, он идеально подходит для последовательного монитора. Он печатает дату и время и «Температура» на странице PHP, но не печатает эту переменную. Однако, когда я читаю обратно через «char c = client.read(), функция it actualy читает назад 1-4-13 .... Температура и фактическое значение переменной, я этого не понимаю? – user2213717

+2

Извините, я смущен.ваш Arduino подключается как клиент к некоторому сценарию PHP (тот, который вы показываете ниже), и этот скрипт PHP просто передает значение температуры вашему Arduino. Я думаю, что все работает правильно, это просто не дизайн, который вы хотите. Вы хотите, чтобы ваш PHP-скрипт ** STORE ** это значение и отображал его на другой странице, когда кто-то другой (т. Е. ** не Arduino **) подключается к одному и тому же серверу, верно? – angelatlarge

ответ

1

Как было отмечено в комментариях (см MortenSickel «s комментарий выше и другие), все работает правильно это это просто проблема дизайна. Что у вас есть:

  • Arduino делает GET запрос на сервер для обновления сервера с текущей температурой
  • Сервер принимает эту температуру, и отголоски его обратно в Arduino

от того, что вы показали, что все работает правильно, однако, по-видимому, это не то поведение, которое вы хотите. То, что вы, вероятно, хотели бы, состоит в следующем:

  • Arduino делает GET запрос на сервер для обновления сервера с текущей температурой
  • Сервер принимает эту температуру и сохраняет его где-то
  • Когда Интернет-пользователь (а не Arduino) подключается к этому серверу, температура отображается пользователю Интернета.

Существует несколько способов его реализации. Самый простой может быть что-то вроде этого:

  • переименовывать index.php в arduino.php, и ваш Arduino подключиться к этому (не index.php)
  • Добавить код в файл PHP теперь называется arduino.php к магазин температуры в файл. Вы можете сделать это, используя функцию file_put_contents.
  • Создайте новый index.php для вашего интернет-пользователя. Этот будет читать файл arduino.php создает и сообщает интернет-пользователю температуру.

Есть более сложные проблемы с доступом к этому файлу одновременно, но на данном этапе они не актуальны.

+0

Это именно то, что я хочу сделать, извинения за плохое объяснение и большое спасибо за вашу помощь. – user2213717

+0

Привет, Я создал два файла PHP, см. Код ниже, но я получаю сообщение об ошибке на странице, вызывающей данные из arduino, в качестве стипендиатов: «Undefined Index: t0 in C: \ wamp ..... \ arduino.php в строке 6 ". был бы мой arduino ошибочным, я просто не могу понять, почему команда $ GET не может прочитать значение от arduino. Я буду признателен за любую помощь снова. Спасибо – user2213717

+0

Arduino PHP Code Index.php code user2213717