Go Down

Topic: Problema Puerto de Serie y PHP (Read 814 times) previous topic - next topic

Inixtrom

Mar 21, 2011, 11:51 pm Last Edit: Mar 22, 2011, 08:20 am by Inixtrom Reason: 1
Hola a todos. Estoy preparando el terreno para llevar a cabo mi proyecto final de curso. Al basar una parte en Arduino he estado estos días investigando como comunicar la placa con una página web, en este caso usando Html, JavaScript y PHP.
Para ir aprendiendo prepare un pequeño Sketch para encender y apagar un LED:

Code: [Select]
const int ledPin = 13;
int incomingByte = 0;

void setup() {  
 Serial.begin(9600);
 pinMode(ledPin, OUTPUT);  
}

void loop() {  
 if (Serial.available() > 0) {    
   incomingByte = Serial.read();
   if (incomingByte == '1') {      
digitalWrite(ledPin, HIGH);
   }    
   if (incomingByte == '0') {
digitalWrite(ledPin, LOW);
   }
 }
}


Para la parte Web escribí un "index.php" que lo que contiene son dos botones que al pulsarlo llaman a una función en JavaScript con un "1" si es encender y un "0" si es apagar:

Code: [Select]
function llamarLed(strOnOff) {

if(strOnOff == '1') {

getAjax("<?=$_strAppPages;?>Led.php?Cadena="+"<?=$_On;?>"+"&id="+"<?=$_id;?>","carga");
}

if(strOnOff == '0') {

getAjax("<?=$_strAppPages;?>Led.php?Cadena="+"<?=$_Off;?>"+"&id="+"<?=$_id;?>","carga");
}
}


Como podéis ver lo que hace la función es traerse a un div denominado "carga", el cual está vacío, el documento Led.php el cual incluye una clase de comunicación Serial que podéis encontrar aquí http://www.phpclasses.org/package/3679-PHP-Communicate-with-a-serial-port.html:

Code: [Select]
<?php
require("../phpClasses/php_serial.class.php");
$_cade $_GET["Cadena"];
echo 
"Cadena que trae por GET a Led.php = ".$_cade;
$serial = new phpSerial();
$serial->deviceSet("/dev/ttyACM0");
$serial->confBaudRate(9600);
$serial->confCharacterLength(8);
$serial->confParity("none");
$serial->confStopBits(1);
$serial->confFlowControl("none");

//$serial->_exec("stty -F /dev/ttyACM0 cs8 -cstopb clocal -parenb -crtscts -ixon -ixoff");

$serial->deviceOpen("ab");
echo "<br />Apertura de Dispositivo = ".$serial->deviceOpen("ab");

//$serial->sendMessage($_cade);
fwrite($serial->_dHandle$_cade);

echo "<br />fwrite = ".$_cade;
$serial->deviceClose();
trigger_error("Hola");
?>


El problema esta en que tal y como lo tengo solo funciona, es decir, cuando pulso el botón de encendido y apagado el led se enciende o se apaga, cuando tengo el IDE de arduino abierto con el monitor de serie abierto. En el momento en que cierro el monitor de serie deja de funcionar, solo parpadea como cuando se reinicia la placa. ¿ Alguien sabe que puede estar ocurriendo? Muchas gracias si has llegado hasta aquí.

P.S.: Si alguien conoce un canal de irc sobre Arduino me sería de mucha utilidad. Gracias.


Pofenas

Me deja un poco descolocado el nombre del puerto ¿/dev/ttyACM0? esperaba que fuera /dev/ttyUSB0 ...
Por otro lado, creo que estas mandando con GET la variable $cadena con valores 'on'/'off' y luego, en el script que graba hacer un write de $cadena, mientras que tu Sketch ewstá esperando 1 o 0.

Go Up