Comunicação Arduino e PHP

Estou com um problema..
Consigo enviar dados do PHP para o Arduino, mas precisava enviar os valores de um sensor para o servidor PHP hospedado em uma maquina da rede local. Vou postar parte do código em que tentei a comunicação, tanto do Arduino, quanto do PHP, se possível me deem uma força ai.
Arduino

  void loop() {
     EthernetClient client = server.available();
        sensor = analogRead(analogChannel);
        client.write(sensor);

PHP

<?php
   $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
   socket_connect($sock,"192.168.0.120", 8080);
   sensor = socket_read($sock);
   echo $sock;
   socket_close($sock);
?>

Aguardo uma luz ai se alguém puder me ajudar.

Falta algo no teu exemplo...

Dá uma vista de olhos a este exemplo:

Tens de ver se existe algum cliente (neste caso o teu script php) disponível para receber os dados que vais enviar. Também tens de estar a ouvir no porto 8080, como inicializaste o Arduino? Mete o código todo aqui e talvez te consigamos ajudar mais.

Esse tutorial do Arduino.cc no meu caso não serve, ele é em HTML e no próprio código do Arduino. O meu está em uma maquina na rede e futuramente vou hospedá-lo em algum host.

Ok...

eu já te apontei no caminho certo. Se não sabes o que é HTML, PHP, servidor e cliente, talvez devesses refrescar esses conceitos. O facto do exemplo retornar HTML é irrelevante. Troca as linhas do código HTML pelo client.write(sensor); e dá no mesmo. Ainda assim, sem ver como configuraste o Arduino não é possível saber ao certo se haverá algo mais a não funcionar.

Uma coisa que reparei:

<?php
   $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
   socket_connect($sock,"192.168.0.120", 8080);
   $sensor = socket_read($sock);  //<---------------------------------faltava o $
   echo $sensor;  //   <-------------------------------------------------Tu queres ver o valor do sensor, não o handle da socket. 
   socket_close($sock);
?>

Realmente bubulindo meu conhecimento nessa parte de web é pouco..hehe
Pela resposta sua paciência não parece estar boa, mas vou te incomodar de novo.
Fui modificando o código e já virou foi bagunça.
Vou passar o código que peguei no engenheirando.com.
Exatamente o que ele faz ai que pretendo alcançar, com a diferença de receber o valor dos sensores que vou usar.
Coloquei o código que me passou, deu erro, mas já vi que foi por falta de conhecimento meu dessa comunicação por socket.
Se puder me mostrar como faço isso fico grato.
PHP

<html>
<head></head>
<body>
 
<?php
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

// Se conecta ao IP e Porta:
socket_connect($sock,"192.168.0.250", 8080);
 
// Executa a ação correspondente ao botão apertado.
if(isset($_POST['bits'])) {
  $msg = $_POST['bits'];
  if(isset($_POST['Fora'   ])){ if($msg[0]=='1') { $msg[0]='0'; } else { $msg[0]='1'; }}
  if(isset($_POST['Quarto1'])){ if($msg[1]=='1') { $msg[1]='0'; } else { $msg[1]='1'; }}
  if(isset($_POST['Quarto2'])){ if($msg[2]=='1') { $msg[2]='0'; } else { $msg[2]='1'; }}
  if(isset($_POST['Sala'   ])){ if($msg[3]=='1') { $msg[3]='0'; } else { $msg[3]='1'; }}
  if(isset($_POST['Pequeno'])){ $msg = 'P#'; }
  if(isset($_POST['Grande' ])){ $msg = 'G#'; }
  socket_write($sock,$msg,strlen($msg));
}
 
socket_write($sock,'R#',2); //Requisita o status do sistema.
 
// Espera e lê o status e define a cor dos botões de acordo.
$status = socket_read($sock,6);
if (($status[4]=='L')&&($status[5]=='#')) {
  if ($status[0]=='0') $cor1 = 'lightcoral';
    else $cor1 = 'lightgreen';
  if ($status[1]=='0') $cor2 = 'lightcoral';
    else $cor2 = 'lightgreen';
  if ($status[2]=='0') $cor3 = 'lightcoral';
    else $cor3 = 'lightgreen';
  if ($status[3]=='0') $cor4 = 'lightcoral';
    else $cor4 = 'lightgreen';
   
  echo "<form method =\"post\" action=\"PaginaPHP.php\">";
  echo "<input type=\"hidden\" name=\"bits\" value=\"$status\">";
  echo "<button style=\"width:70; background-color: $cor1 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Fora\">Fora</button>

";
  echo "<button style=\"width:70; background-color: $cor2 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Quarto1\">Quarto1</button>

";
  echo "<button style=\"width:70; background-color: $cor3 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Quarto2\">Quarto2</button>

";
  echo "<button style=\"width:70; background-color: $cor4 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Sala\">Sala</button>


";
  echo "<button style=\"width:90;font: bold 14px Arial\" type = \"Submit\" Name = \"Pequeno\">Portao Pequeno</button>

";
  echo "<button style=\"width:90;font: bold 14px Arial\" type = \"Submit\" Name = \"Grande\">Portao Grande</button>

";
  echo "</form>";
}
// Caso ele não receba o status corretamente, avisa erro.
else { echo "Falha ao receber status da casa."; }
socket_close($sock);
 // /*--- Aqui está a parte do codigo que me passou. Não sei se tem que encerrar o socket aberto acima que envia para depois abrir outro que recebe..
 $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
   socket_connect($sock,"192.168.0.120", 8080);
   $sensor = socket_read($sock);
   echo $sensor;  
     socket_close($sock);

//  ---*/

?>

Codigo Arduino

//  Maurício Féo
//  www.engenheirando.com

#include <SPI.h>
#include <Ethernet.h>
 
//Configurações do Ethernet Shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,0, 250 }; // ip que o arduino assumirá
byte gateway[] = { 192,168,0, 2 };  // ip do roteador
byte subnet[] = { 255, 255, 255, 0 };
int canalAnalogico=0;
int sensor;

 
// String que representa o estado dos dispositivos
char Luz[7] = "0000L#";
 
EthernetServer server(8080); // Cria o servidor na porta 8081
 
// String onde é guardada as msgs recebidas
char msg[7] = "0000L#";
 
void setup() {
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  pinMode(0,OUTPUT);
  pinMode(1,OUTPUT);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
}
 
void loop() {
  EthernetClient client = server.available();
  // SE receber um caracter...
  if (client) {
    // guarda o caracter na string 'msg'
    msg[1]=msg[2]; msg[2]=msg[3]; msg[3]=msg[4]; msg[4]=msg[5]; msg[5]=msg[6];
    msg[6] = client.read();
   
    if (msg[6]=='#') {
      switch(msg[5]) {
        case 'R':
          // Se receber o comando 'R#' envia de volta o status dos
          //   dispositivos. (Que é a string 'Luz')
          client.write(Luz);
        break;
        case 'P':
          // Caso P#, aciona o pino do portão pequeno por 1s.
          digitalWrite(4,HIGH);
          delay(1000);
          digitalWrite(4,LOW);
        break;
        case 'G':
          // Caso G#, aciona o pino do portão pequeno por 1s.
          digitalWrite(5,HIGH);
          delay(1000);
          digitalWrite(5,LOW);        
        break;
        case 'L':
          // Caso L#, ele copia os 4 bytes anteriores p/ a
          //   string 'Luz' e cada byte representa um
          // dispositivo, onde '1'=ON e '0'=OFF
          Luz[0]=msg[1];
          Luz[1]=msg[2];
          Luz[2]=msg[3];
          Luz[3]=msg[4];
          if (Luz[0]=='1') digitalWrite(0,HIGH); else digitalWrite(0,LOW);
          if (Luz[1]=='1') digitalWrite(1,HIGH); else digitalWrite(1,LOW);
          if (Luz[2]=='1') digitalWrite(2,HIGH); else digitalWrite(2,LOW);
          if (Luz[3]=='1') digitalWrite(3,HIGH); else digitalWrite(3,LOW);
        break;
       
      }
    }
//ESTOU ENVIANDO AQUI, SÓ QUE ESTÁ COM ERRO. 
    sensor = analogRead(canalAnalogico);
    client.print(sensor);
    
  }
}

Eu tenho paciência... mas quando alguém teima em algo que não sabe, enerva.

Experimentaste ambos os códigos? Tens um servidor php a correr esse script?

Sim. A parte de acionamentos dos relês está funcionando perfeitamente.
O que quero adicionar é essa funcionalidade do servidor receber o valor de uma porta do Arduino, como o exemplo do WebServer que vem na IDE do Arduino que envia os dados para uma pagina em HTML.
Ou seja, preciso que esse código tanto continue acionando os relês como recebendo o valor da porta analógica onde está o sensor.

Posteriormente quero jogar isso em uma aplicação Android, mas primeiro tenho que ir entendendo como tudo funciona.

Como enviar um valor de uma variável do código Arduino para o PHP receber via socket?

Galera, estou travado no meu projeto por não conseguir fazer uma comunicação correta entre o PHP e o Arduino

Lampada(rele) <--------------Arduino <-----------------------PHP //essa parte funciona corretamente

Sensor------------------------>Arduino------------------------>PHP //Essa parte funcionando em conjunto no mesmo código não consigo de forma alguma...

Se alguém intender dessa comunicação me ajuda ai... Obrigado!!! =( =( =(

No mesmo sítio que envias dados para o Arduino deves ler dele usando a mesma socket. Eu acho que estás a fazer copy paste de código que não entendes e é isso que te está a travar.

Experimenta fazer um sketch de raíz onde o Arduino comunica com o php... deve ser algo tão simples como: 


#include <SPI.h>
#include <Ethernet.h>
 
//Configurações do Ethernet Shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,0, 250 }; // ip que o arduino assumirá
byte gateway[] = { 192,168,0, 2 };  // ip do roteador
byte subnet[] = { 255, 255, 255, 0 };
const int canalAnalogico=0;
int sensor;

 
EthernetServer server(8080); // Cria o servidor na porta 8081
 
void setup() {
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
 }
 
void loop() {
  EthernetClient client = server.available();
  if (client) {
  while (client.connected()) {
      if (client.available()) {
            //ESTOU ENVIANDO AQUI, SÓ QUE ESTÁ COM ERRO. 
            sensor = analogRead(canalAnalogico);
            client.print(sensor);
            client.println("digital");//test
     }}
  }
}
<?php
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

// Se conecta ao IP e Porta:
socket_connect($sock,"192.168.0.250", 8080);
//falta testar se conseguiu conectar.

$sensor = socket_read($sock);
     echo $sensor;  
     socket_close($sock);

//  ---*/

?>