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/
|
|
![]() | 20 febrero 2013 en Electronica | tags: Electronica, Informática |





















