[Projeto] Receber parâmetros do arduino no PHP

Fala galera, como vão?

Estou envolvido em um projeto de automação residencial, que envolve asterisk + PHP + arduino.

O código do arduino está uns 90% pronto, e a plata está se comportando da maneira que eu preciso.

Eu desenvolvi um scrip em php para passar os comandos (parametros) ao arduino (via serial), porém preciso aprimorar este código para receber os valores do arduino (retorno).

Como eu faço isso? Eu preciso escrever algo no arduino para que ele envie os comandos, ou somente no PHP?

Para ser mais direto, eu preciso que o PHP leia os valores dos sensores das portas analógicas do arduino.

Segue meu código do php:

#!/usr/bin/php -q
<?php

#Recebendo os valores digitados no telefone
$pin = $argv[1];
$comando = $argv[2];
$pino = $pin-1;

switch ($comando){

        case 0:
        echo "Desligando pino $pino\n";
        break;

        case 1:
        echo "Ligando pino $pino\n";
        break;

        case 2:
        echo "Verificando o status do pino $pino\n";
        break;

        default:
        echo "Comando $comando inválido, Digite 0,1 ou 2\n";
        die;
        break;

}

$port = fopen("/dev/ttyACM0","rw");
sleep(2);
// echo"Enviando comando para a PORTA USB $porta\n";
fwrite($port,"$pino$comando");
fclose($port);


?>

Basicamente o código recebe 2 parametros:

1º pino de referencia do arduino (portas analogicas ou digitais do arduino)
2º comando , onde 0 é desligar, 1 é ligar, e 2 é para verificar o status.

Ficando o comando assim: "15" "1" (liga o pino digital 15); "07" "0" (desliga o pino 7 ) etc..

O que eu preciso, é por exemplo, enviar os comandos 13 2, ele ler a porta analógica 13 do arduino (neste caso ele irá ler a 12 - $pino = $pin -1) e guardar este retorno na forma de variável.

Como eu faço isso?

Obrigado

Interessante isso do asterisk com o arduino.Como tens o asterisk a ligar com esse PHP.Criaste uma regra no dial-plan para ir bater nesse php quando se marca a extensao XX?

$port = fopen("/dev/ttyACM0","rw");
sleep(2);
// echo"Enviando comando para a PORTA USB $porta\n";
fwrite($port,"$pino$comando");
fclose($port);

O ideal é adicionares um caracter no meio dos dois comandos para poderes filtrar onde começa um comando e acaba outro e um caracter terminador por exemplo um '\n'
Imagina que queres ligar o led 13, envias algo assim:

13;1'n'

Sim.

O asterisk possui uma função chamada "AGI" que serve justamente para chamar scripts externos. =)

Estou a imaginar isso e talvez vá usar isso no meu asterisk, mas nao seria melhor usares um sockect tcp para estabelecer a conneçao com um php fora da tua asterisk?
Desta forma que tens, o arduino tem de estar ligado por porta USB no asterisk.
Se usares um sockect TCP podes ligar o arduino na tua rede onde tens o asterisk e depois mandar dados para ele por rede

HugoPT:
Estou a imaginar isso e talvez vá usar isso no meu asterisk, mas nao seria melhor usares um sockect tcp para estabelecer a conneçao com um php fora da tua asterisk?
Desta forma que tens, o arduino tem de estar ligado por porta USB no asterisk.
Se usares um sockect TCP podes ligar o arduino na tua rede onde tens o asterisk e depois mandar dados para ele por rede

Então, desconheço outro forma do astrisk se comunicar om qualquer outro script que não seja via AGI.

E outra questão é que o astrisk irá interagir com todo o sistema, forncendo mensagens audíveis aos usuáios.

Ve se isto te pode ajudar em relaçao a como podes usar um socket TCP:
http://engenheirando.com/projetos/automacao/

No codigo deles podes ver como é implementado