PHP + Arduino

Existe una forma de interactuar con el puerto serie directamente desde PHP, pero he tenido ciertos problemas hasta que finalmente lo he conseguido. La escritura, el envió de datos, es sencillo y hay gran cantidad de información en Internet. El problema ha venido con la escritura, ya que, mi programa de Arduino estaba en bucle infinito enviando los estados de sus pines analógicos en formato Json.

 
//Este comando ejecuta la los comandos en la consola en este caso en la de Windows.
//Sirve para abrir el puerto serie con las características dadas.
$consola = shell_exec("mode com4: BAUD=9600 PARITY=n DATA=8 STOP=1 to=off dtr=off rts=off");
//Tratamos el puerto com como un archivo 
//Esta es la parte importante pues "w+" es la opción para que funcione correctamente
$fp =fopen("com4", "w+");
fwrite($fp,"E");
$json = "";
$lectura = "0";
//si no puede leer el puerto nos da error
if (!$fp) {
   $status = "No conectado";
   echo $status;
} else {
//Leemos 300 palabras del puerto, si en lugar de "w+" colocamos "r+" lee desde el principio
//Como esta en bucle infinito no nos da los resultados más actualizados.
	   $lectura = fread($fp, 300);
	   echo "";
	   $json = $lectura;
//El Archivo que envia Arduino tiene la forma I JSON F por lo buscamos el principio del JSON y eliminamos lo anterior
	   $inicio = strpos($json, "I")+1;
	   $tamano = strlen($json);
	   $json = substr($json, $inicio, $tamano);  
	   $tamano = strlen($json);
//Por ultimo buscamos la F y todo lo que esta dentro en un JSON de los estados
	   $fin = (strpos($json, "F"));
	   $fin = $fin - $tamano;
	   $json = substr($json,0,$fin);   	   
   echo $json; 
}
fclose($fp);

Más adelante pondré con detalle el archivo de Arduino pues me parece interesante la interacción que he realizado, el cual es un protocolo para controlar directamente cada PIN desde un archivo externo en este caso PHP y recibir cuando lo solicitemos los estados de cada PIN.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.