Autor Tema: PHP, puerto rs232 y PIC  (Leído 54354 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado noname1744

  • PIC10
  • *
  • Mensajes: 5
Re: PHP, puerto rs232 y PIC
« Respuesta #30 en: 02 de Marzo de 2008, 14:06:14 »
hola quisisera saber como conectar una pagina web con un pic via serial, tienen algu ntutorial para ayudarme por fa

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: PHP, puerto rs232 y PIC
« Respuesta #31 en: 02 de Marzo de 2008, 14:25:31 »
Bienvenido noname. Sólo tienes que descargarte el archivo que se menciona en este mismo hilo. En él encontrarás todo lo necesario con un ejemplo muy sencillo. Y, si después de probarlo te surgen dudas, aquí estaremos para ayudarte...

saludos

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: PHP, puerto rs232 y PIC
« Respuesta #32 en: 02 de Marzo de 2008, 18:01:13 »
Pasos necesarios para probar la comunicación PHP-RS232-PIC:

1. Instalar un servidor en tu ordenador local (por ejemplo, WAMP: http://www.wampserver.com/en/index.php).

2. Almacenar el código serie.php en la carpeta www (por ejemplo, c:/wamp/www) de ese servidor, sustituyendo en la línea 8 el valor 5331 por el correspondiente al puerto COM de tu ordenador al que está conectado el PIC (estos valores se encuentran en el archivo serproxy.cfg).

3. Introducir en el archivo serproxy.cfg los parámetros de comunicación (velocidad, número de bits y bits de parada).

4. Ejecutar serproxy.

5. Acceder con tu navegador al archivo serie.php (por ejemplo, http:/localhost/serie.php) y pulsar el botón Update.

6. Opcionalmente, si tu ordenador tiene dirección IP dinámica y quieres acceder al PIC desde Internet, contratar un nombre de dominio gratuito con DynDNS: http://www.dyndns.com/ (u otro similar).

Desconectado noname1744

  • PIC10
  • *
  • Mensajes: 5
Re: PHP, puerto rs232 y PIC
« Respuesta #33 en: 03 de Marzo de 2008, 13:01:49 »
hola jfmateos... Mi primera duda como bajo el ejemplo que me dices.... Y la duda que tengo con el proyecto es que como haces que mediante codigo php yo pueda leer el pueerto serial... en estos dias baje algo que se llama "serial extension", segus me es como un driver para hacer funcionar el puerto serial mediante php, pero no me funciono... bueno si me puedes aclarar la duda e lo agradeceria....

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: PHP, puerto rs232 y PIC
« Respuesta #34 en: 03 de Marzo de 2008, 16:01:31 »
Hola noname:

El ejemplo te lo bajas haciendo clic aquí http://www.villatic.org/carpetaJuanfe/PHP_RS232.rar y al descomprimir este archivo te encontrarás todo lo necesario.

Yo utilizo un programa llamado serproxy en lugar de usar el "serial extension", pues esta extensión no estaba demasiada depurada cuando estuve investigando este asunto.

El programa serproxy actúa como intermediario entre el puerto RS232 y PHP, convirtiendo éste en un socket, que puedes abrir directamente desde PHP con fsockopen, y en el que puedes leer y escribir con las funciones habituales, como fgets y fputs.

Échale un ojo al código de serie.php y si tienes alguna duda, ya sabes dónde consultar.

Desconectado noname1744

  • PIC10
  • *
  • Mensajes: 5
Re: PHP, puerto rs232 y PIC
« Respuesta #35 en: 03 de Marzo de 2008, 17:14:24 »
oye gracias ya lo baje... ahora lo voy a usar a ver que tal cualquier duda... vuelvo a preguntar bye

Desconectado noname1744

  • PIC10
  • *
  • Mensajes: 5
Re: PHP, puerto rs232 y PIC
« Respuesta #36 en: 04 de Marzo de 2008, 11:43:25 »
hola como estas otra pregunta en este paso que me dijiste

Introducir en el archivo serproxy.cfg los parámetros de comunicación (velocidad, número de bits y bits de parada).

como hago si tengo un COM 5.... como se que numero poner, lo que pasa es que no pude abrir ese archivo por que mi compu no reconoce ese .cfg, con que programa debo abrirlo.... y otra pregunta la pantalla negra que sale al ejecutar serproxy, lego que se hace conexion se cierra, o esta permanece... abierta... Disculpa la molestia.......

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: PHP, puerto rs232 y PIC
« Respuesta #37 en: 04 de Marzo de 2008, 12:11:28 »
Hola noname:

El contenido del archivo serproxy.cfg es el siguiente:

Código: [Seleccionar]
# Config file for serproxy
# See serproxy's README file for documentation

# Transform newlines coming from the serial port into nils
# true (e.g. if using Flash) or false
newlines_to_nils=false

# Comm ports used
comm_ports=1,2,3,4

# Default settings
comm_baud=2400
comm_databits=8
comm_stopbits=1
comm_parity=none

# Idle time out in seconds
timeout=300

# Port 1 settings (ttyS0)
net_port1=5331

# Port 2 settings (ttyS1)
net_port2=5332

# Port 3 settings (ttyS2)
net_port3=5333

# Port 4 settings (ttyS3)
net_port4=5334

y puedes abrirlo/modificarlo con cualquier editor de textos, como Bloc de notas, aúnque yo te recomiendo Scite(http://users.hfx.eastlink.ca/~gisdev/scite-1.75-setup-1.exe) que es gratuito y más apropiado para modificar código fuente.

Sólo tienes que añadir el puerto 5 en la línea 9 y añadir una entrada nueva para este puerto al final del archivo; te quedaría así:

Código: [Seleccionar]
# Config file for serproxy
# See serproxy's README file for documentation

# Transform newlines coming from the serial port into nils
# true (e.g. if using Flash) or false
newlines_to_nils=false

# Comm ports used
comm_ports=1,2,3,4,5

# Default settings
comm_baud=2400
comm_databits=8
comm_stopbits=1
comm_parity=none

# Idle time out in seconds
timeout=300

# Port 1 settings (ttyS0)
net_port1=5331

# Port 2 settings (ttyS1)
net_port2=5332

# Port 3 settings (ttyS2)
net_port3=5333

# Port 4 settings (ttyS3)
net_port4=5334

# Port 5 settings (ttyS4)
net_port4=5335

La pantalla negra debe permanecer abierta durante todo el intercambio de datos con el PIC, pues es precisamente la encargada de actuar como intermediaria entre el PIC y PHP.

Desconectado noname1744

  • PIC10
  • *
  • Mensajes: 5
Re: PHP, puerto rs232 y PIC
« Respuesta #38 en: 04 de Marzo de 2008, 12:16:57 »
ok gracias es que como toy usando usb, pero como com virtual ese com 5 esel que me parece, gracias estamos en contacto para decirte si me funciono todo...

Desconectado Pedro Pan

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 144
    • Foro de electronica USAC
Re: PHP, puerto rs232 y PIC
« Respuesta #39 en: 17 de Marzo de 2008, 14:02:00 »
hola jfmateos2 pues yo hice una aplicacion de controlar un motor desde un navegador web y lo hice en php y en linux pero se puede aplicar para windows por si te interesa creo que lo tengo por aqui. Desde un navegador web manejas el motor con cambio de giro y velocidad, ademas en una base de datos te llevaba la bitacora de los cambios con la hora y dia




"Si dejas que lo Malo te detenga, No estaras ahi Cuando lo Bueno Venga"
Aclaro mi nombre no es Pedro, mi nick es por Peter Pan jajaja

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: PHP, puerto rs232 y PIC
« Respuesta #40 en: 19 de Marzo de 2008, 13:56:11 »
Hola Pedro, buen trabajo. Estaría bien si pudieras poner el código, porque lo has hecho usando php_serial ¿verdad? y no el serproxy que usé yo.

Cuando yo investigué este asunto el php_serial estaba en pañales y por eso no lo usé; pero veo por tus éxitos que debe haber mejorado mucho (habrá que tenerlo en cuenta).

Desconectado Pedro Pan

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 144
    • Foro de electronica USAC
Re: PHP, puerto rs232 y PIC
« Respuesta #41 en: 19 de Marzo de 2008, 14:04:43 »
hola jfmateos si yo use una clase en php la cual es como una funcion y si use php_serial yo al principio no encontraba mucha informacion acerca de este tema y mucho menos para linux con gusto subo el codigo para que lo analises y ves si puedes aplicarlo o alguien mas
"Si dejas que lo Malo te detenga, No estaras ahi Cuando lo Bueno Venga"
Aclaro mi nombre no es Pedro, mi nick es por Peter Pan jajaja

Desconectado Pedro Pan

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 144
    • Foro de electronica USAC
Re: PHP, puerto rs232 y PIC
« Respuesta #42 en: 21 de Marzo de 2008, 13:04:52 »
Bueno aqui subo la informacion que prometi el php_serial lo baje de la pagina php classes la clase la hizo el amigo Remy Sanchez la cual la modifique un poco para mi cometido les dejo el link para descargarla PHP_SERIALPHP_SERIAL ademas les dejo un pequeño informe del funcionamiento del proyecto en pdf y los codigos que use. Necesitas tener instalado el programa llamado SETSERIAL el cual te sirve para monitorear el puerto serial

Esta es la clase la cual debe estar en la misma carpeta del proyecto para que la llames desde tu codigo principal

Código: [Seleccionar]
<?php

class phpSerial
{
var $_device null;
var $_dHandle null;
var $_buffer "";

/**
 * @var bool
 */
var $autoflush true;

/**
 * 
 *
 * regresa bool
 */
function phpSerial ()
{
setlocale(LC_ALL"en_US");

$sysname php_uname();

if (substr($sysname05) === "Linux")
{
$version exec("setserial -V 2>&1");
if (substr($version019) === "setserial version 2")
{
register_shutdown_function(array($this"freeDevice"));
return true;
}
else 
{
trigger_error("Invalido (!= 2) Puerto Serial no encontrado "E_USER_ERROR);
exit();
return false;
}
}
else 
{
trigger_error("Host OS no es Linux, no se puede correr la aplicacion."E_USER_ERROR);
exit();
return false;
}
}

/**
 * @param string $device /dev/ttyS0
 * @regresa bool
 */
function setDevice ($device)
{
$test exec("setserial " $device " 2>&1");

// if (substr($test, 0, strlen($device)+1) === $device . ",")

if (substr($test010) === "/dev/ttyS0")
{
$this->_device $device;
$this->_dHandle fopen($this->_device"wb");
return true;
}
else 
{
trigger_error("Puerto Especificado No Valido"E_USER_WARNING);
return false;
}
}

/**
 * Cierra el archivo
 *
 * regresa bool
 */
function freeDevice ()
{
if ($this->_device !== null)
{
if (fclose ($this->_dHandle))
{
$this->_dHandle null;
$this->_device null;
return true;
}
}

return false;
}

/**
 * Sets a setserial parametro (cf man setserial)
 *
 * @param string $param nombre parametro
 * @param string $arg valor del parametro
 * @regresa bool
 */
function setParam ($param$arg "")
{
if ($this->_device === null)
{
trigger_error("Dispositivo tiene que ser especificado"E_USER_WARNING);
return false;
}

$return exec ("setserial " $this->_device " " $param " " $arg " 2>&1");

if ($return{0} === "I")
{
trigger_error("setserial: Bandera Invalida"E_USER_WARNING);
return false;
}
elseif ($return{0} === "/")
{
trigger_error("setserial: Error del archivo dispositivo"E_USER_WARNING);
return false;
}
else 
{
return true;
}
}

/**
 * esta funcion envia el mensaje al puerto
 *
 * string $str string de lo que se quiera enviar al puerto
 */
function sendMessage ($str)
{
$this->_buffer .= $str;

if ($this->autoflush === true$this->flush();
}

/**
 * @return bool
 */
function flush ()
{
if ($this->_device === null)
{
trigger_error("Dispositivo no fue Especificado"E_USER_WARNING);
return false;
}

if (fwrite($this->_dHandle$this->_buffer) !== false)
{
$this->_buffer "";
return true;
}
else 
{
$this->_buffer "";
trigger_error("Error al enviar Mensaje"E_USER_WARNING);
return false;
}
}
}

?>


Este codigo es el de la pagina principal donde estaba el control del motor

Código: [Seleccionar]
<HTML>
<HEAD>
<TITLE>INTRODUCCION A LA PROGRAMACION DE COMPUTADORAS 769</TITLE>
</HEAD>
<BODY>

<table cellpadding="2" cellspacing="2" border="2" align="right" valign="middle" bgcolor="#3A699C" width="100%" frame="border">
<TD ALIGN="center" >CONTROL DE MOTOR STEPPER POR EL PUERTO SERIAL</TD>
</table>
<BR>
<BR>

<!-- este es el primer bloque de la pagina control de direccion -->
<table cellpadding="2" cellspacing="2" border="2" align="center" valign="middle" bgcolor="#3A699C" width="100%">

<TR>
    <TD COLSPAN="2" ALIGN="center" >INGENIERIA EN ELECTRONICA</TD>
</TR>

<TR>

 
<TD> <img src="/stepper.jpg" height="250" width="250" alt="motor"; ALIGN="center"/> </TD>

</TR>               
</table>
<BR>

<!-- este es el segundo bloque de la pagina control de velocidad -->
<table cellpadding="2" cellspacing="2" border="2" align="center" valign="middle" bgcolor="#3A699C" width="100%">

<TR>
<TD COLSPAN="2" ALIGN="center" >CONTROLES DEL MOTOR</TD>
</TR>

<TR>
<TD> 
<BR>
<FORM METHOD="post" ACTION="mis_datos.php">

<blockquote>
<p>Derecha<input type="radio" value="derecha" checked name="direccion"></p>
<p>Izquierda<input type="radio" name="direccion" value="izquierda"></p>
</blockquote>

</TD>


<TD>

<blockquote>
<p>Baja<input type="radio" value="baja" checked name="velocidad"></p>
<p>Media<input type="radio" name="velocidad" value="media"></p>
<p>Alta<input type="radio" name="velocidad"  value="alta" ></p>
</blockquote>

<p><input type="submit" value="Enviar datos" name= "enviar"> </P>

</FORM>
   </TD>

</TR>
</TABLE>
<br>

</BODY>

<HTML>

Y este ultimo es en donde enviaba los datos a la base de datos y los desplegaba en pantalla

Código: [Seleccionar]
<html>
<head>
   <title>Movimiento de Motor</title>
</head>
<body>

 

<?PHP;

require_once "serial.class.php";
// se crea el objeto
$serial = new phpSerial();

// puerto serial
$serial->setDevice("/dev/ttyS0");


//conectamos con el servidor
$record = date("d/m/y H:i:s");
$link = mysql_connect("localhost", "root", "");
 
//echo $velocidad;
//echo $direccion;

// comprobamos que hemos estabecido conexión en el servidor
if ($link == 0)
{
echo "<h2 align='center'>ERROR1: No se puede conectar al servidor</h2>";
exit;
}
else
{
//echo "<h2 align='center'>Se logro la conexion</h2>";

}


// realizamos la conexion con la base de datos control
$conexion = mysql_select_db("control", $link);

if ($conexion == 0)
{
echo "<h2 align='center'>ERROR2: No existe la base de datos</h2>";
mysql_create_db("control", $link);
}
else
{
//echo "<h2 align='center'>base de datos conectada</h2>";
}


if($direccion == "derecha")
{
echo "Envio mover a Derecha";
if($velocidad == "baja")
{
echo "Velocidad de Motor Baja";
$enviar = "3";
}

if($velocidad == "media")
{
echo "Velocidad de Motor Media";
$enviar = "2";
}

if($velocidad == "alta")
{
echo "Velocidad de Motor Alta";
$enviar = "1";
}

// el mensaje a enviar
$serial->sendMessage($enviar);

$enviar = "A";
// el mensaje a enviar

$serial->sendMessage($enviar);

$sql = "INSERT INTO registros (direccion, hora, velocidad)";

$sql .= "VALUES ('$direccion', '$record', '$velocidad')";

$result = mysql_query($sql);

}

if($direccion == "izquierda")
{
  echo "Envio mover a Izquierda";
if($velocidad == "baja")
{
echo "Velocidad de Motor Baja";
$enviar = "3";
}

if($velocidad == "media")
{
echo "Velocidad de Motor Media";
$enviar = "2";
}

if($velocidad == "alta")
{
echo "Velocidad de Motor Alta";
$enviar = "1";
}

// el mensaje a enviar
  $serial->sendMessage($enviar);  
 
  $enviar = "B";
 
  // el mensaje a enviar
  $serial->sendMessage($enviar);
 
  $sql = "INSERT INTO registros (direccion, hora, velocidad)";

  $sql .= "VALUES ('$direccion', '$record', '$velocidad')";

  $result = mysql_query($sql);  
 
}


?>

<!-- <BODY background="/usac.jpg" bgproperties="fixed"> -->
 
<table cellpadding="2" cellspacing="2" border="2" align="center" valign="middle" bgcolor="#3A699C" width="100%" frame="box">
<tr>
<td ALIGN="center"> <font size="3">CONTROL DE MOTOR STEPPER POR EL PUERTO SERIAL</font></td>

</tr>
<BR>
<BR>

<tr>
<td>

<?php

$result mysql_query("SELECT id, hora, velocidad, direccion FROM registros"$link);

if ($row mysql_fetch_array($result)){

echo "<table border = '1'> \n";

echo "<tr> \n";

echo "<td><b>id</b></td> \n";

echo "<td><b>hora</b></td> \n";

echo "<td><b>velocidad</b></td> \n";

echo "<td><b>direccion</b></td> \n";

echo "</tr> \n";

do {

echo "<tr> \n";

echo "<td>".$row["id"]."</td> \n";

echo "<td>".$row["hora"]."</td>\n";

echo "<td>".$row["velocidad"]."</td>\n";

echo "<td>".$row["direccion"]."</td>\n";
echo "</tr> \n";

} while ($row mysql_fetch_array($result));


echo "</table>";  


} else {

echo "¡ La base de datos está vacia !";

}

?>

<a href='portada.php'>VOLVER AL FORMULARIO</a>
</td>
<td>
<img src="/usac.jpg" height="350" width="350" alt="USAC" />

</td>
</tr>

</table>
</body>
</html>

Utilize Kubuntu y Xampp ademas para la parte de programacion utilize el bluefish el cual es un compilador de diseño web
Saludos y suerte en todo

AQUI LES DEJO EL INFORME

« Última modificación: 23 de Marzo de 2008, 22:01:05 por Pedro Pan »
"Si dejas que lo Malo te detenga, No estaras ahi Cuando lo Bueno Venga"
Aclaro mi nombre no es Pedro, mi nick es por Peter Pan jajaja

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 908
    • Mexchip
Re: PHP, puerto rs232 y PIC
« Respuesta #43 en: 14 de Abril de 2008, 00:54:34 »
Qué tal amigos, yo hice algo similar, pero para la parte de la comunicación de la página con el puerto aproveché el uso de una base de datos, de la siguiente forma:

Página web PHP/ASP <--> PC como Servidor web (Apache/IIS) y servidor de base de datos (MySQL) <--> Aplicación de comunicación con el puerto (USB/RS-232/...)

Mediante la página web se envían los comandos, los cuales se almacenan en la base de datos. La aplicación que se comunica con el puerto monitorea el estado de la base de datos cada X tiempo, si hay cambios actualiza envíandolos a través del puerto.

Para quien busque hacer un proyecto parecido, creo que esta es una buena alternativa :).

Saludos.
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado Pedro Pan

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 144
    • Foro de electronica USAC
Re: PHP, puerto rs232 y PIC
« Respuesta #44 en: 14 de Abril de 2008, 01:02:48 »
hola geo interesante tu proyecto, manejastes el puerto usb desde php o fue el serial?
"Si dejas que lo Malo te detenga, No estaras ahi Cuando lo Bueno Venga"
Aclaro mi nombre no es Pedro, mi nick es por Peter Pan jajaja