Envíar datos por puerto serie con PHP
Los requerimientos necesarios son los siguientes:
- Tener un servidor web instalado (Apache, lighttpd, uhttpd, etc).
- Tener PHP configurado en el servidor web.
- Tener el comando “exec”, para ello dentro del fichero php.ini cambiar:
- disable_functions no tiene que contener la función exec
- safe_mode tiene que estar a off
Si el servidor web esta en linux (u otro entorno unix), se puede utilizar lo siguiente (salvando la salida, puede ser /dev/tty0, por ejemplo):
<?php //Es importante filtrar lo que recibimos para que no nos ejecuten comandos $datos= escapeshellcmd($_REQUEST["datos"]); //Enviamos por puerto serie los datos exec ("echo ".$datos." > /dev/ttyUSB0"); ?> <pre>
Si por el contrario, utiliza windows, el código a utilizar es (sustituyendo COM1 por el puerto a utilizar):
<?php // La siguiente línea ejecutará una orden en DOS. Esto solo debe ejecutarse una vez. // Las comillas hacen que lo ejecute Windows directamente `mode com1: BAUD=9600 PARITY=N data=8 stop=1 xon=off`; //Abrimos el puerto com1 $fp = fopen ("COM1:", "w+"); if (!$fp) { echo "Error al abrir COM1."; } else { $datos= escapeshellcmd($_REQUEST["datos"]); fputs ($fp, $datos ); fclose ($fp); } ?>
Actualización. Código PHP + HTML
Viendo que resulta un poco confuso escribir únicamente el código php, a continuación escribo como sería un ejemplo completo para PHP en Linux. El ejemplo lo llamaré “serial.php” y se llamará a si mismo:
<?php //Es importante filtrar lo que recibimos para que no nos ejecuten comandos $datos= escapeshellcmd($_REQUEST["datos"]); //Enviamos por puerto serie los datos exec ("echo ".$datos." > /dev/ttyUSB0"); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>"> <html xmlns="<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Conexión por puerto serie</title> </head> <body> <form method="get" action="serial.php"> <button type="submit" name="datos" value="C00">Enviar comando C00</button> <br /> <button type="submit" name="datos" value="C01">Enviar comando C01</button> </form> </body> </html>
Fuente: http://www.craswer.net/2011/05/enviar-datos-por-puerto-serie-con-php/
Tuitear 25.021 Veces leído 0 comentarios |
20 febrero 2013 en Electronica | tags: Electronica, Informática |