SER_PHP o Puerto serie desde Internet

Tras un par de horas investigando, he obtenido un resultado, ya que depende mucho de la versión de PHP, esta tarea puede complicarse. El primer intento lo realizaremos en windows porque existe mucha documentación para luego pasar a linux, mas puntualmente en un OPENWRT.

Básicamente intento instalar un servidor web lighttpd+php en mi fonera, y conectar vía RS232 algún periférico a ella, el cual controlaré desde internet.
Por ejemplo un PIC 16f628, programado especialmente para escuchar las ordenes generadas a través de este protocolo y ejecutarlas… por ejemplo realizar una conexión rs232 y enviarle el carácter «1» para que active el pin RB0 con 5volts. Esto lo explicaré mas adelante en otro post.

hoy lo primero que debemos hacer es hacer funcionar SER_PHP… para poder tener una interfaz coerente.

Intalaremos XAMPP con todo lo necesario, los amigos de APACHE FRIENDs tienen un paquete muy bonito que trae todo lo que necesitamos… al bajar este por favor comprobad que versiones obtenemos de cada aplicación… por ejemplo en mi caso.
Aquítenemos el link para windows pero existen versiones para todos los gustos.

La version actual 1.7.2 posee:

  • Apache 2.2.12 (IPv6 enabled) + OpenSSL 0.9.8k
  • MySQL 5.1.37 + PBXT engine
  • PHP 5.3.0
  • phpMyAdmin 3.2.0.1
  • Webalizer 2.21-02 + GeoIP lite
  • FileZilla FTP Server 0.9.32
  • msmtp 1.4.17

Teniendo en cuenta esto, lo instalamos y pasamos al siguiente paso.

descargamos la extensión php para controlar el puerto serie, teniendo en consideración que versión de PHP tenemos en el paquete XAMP.
LINK PHP SER EXT.
Aunque tengamos la versión de php 5.3 podemos instalar la extensión 5.2.9 es compatible.
Obtendremos un paquete con 2 ejemplos y el dll correspondiente.
Copiaremos el archivo php_ser.dll en la carpeta de extensiones de PHP que usualmente suele ser c:xamppphpext

en el segundo paso editaremos el archivo PHP.INI que se encuentra en el directorio c:xamppphp y agregar la linea siguiente, al final de las demás «extension».

extension=php_ser.dll

Os recomiendo utilizar el editor Tinyeditor bueno bonito y barato (es gratis).

En este caso, hay que hacer algo especial ya que usamos XAMPP (para los que usan otros servidores con solo la modificación del archivo php.ini ya funciona):

Tanto en cualquier servidor como en XAMPP en este punto el PHP puero debería funcionar correctamente…
probarlo creando el siguiente archivo php y abriéndolo desde cualquier explorador… deberían ver la config completa de su servidor.

crear test.php y poner dentro lo siguiente:

<html>
<head>
<title>
Local index page
</title>
</head>
<body>
<?php phpinfo(); ?>
</body>
</html>

Pero como XAMPP utiliza PHP como modulo, necesitamos evitar esto y hacer uso de PHP como programa externo… para eso  editamos el siguiente archivo.

C:xamppapacheconfextrahttpd-xampp.conf
Buscamos las siguientes lineas y des comentar las lineas 1 y 2 y comentar la 3.

#ScriptAlias /php/ «C:/xampp/php/»
#Action application/x-httpd-php «/php/php-cgi.exe»
LoadModule php5_module «C:/xampp/apache/bin/php5apache2.dll»
AddType application/x-httpd-php-source .phps

Quedándonos como:

ScriptAlias /php/ «C:/xampp/php/»
Action application/x-httpd-php «/php/php-cgi.exe»
#LoadModule php5_module «C:/xampp/apache/bin/php5apache2.dll»
AddType application/x-httpd-php-source .phps

Ahora editamos el archivo de configuración original de XAMPP

C:xamppapacheconfhttpd.conf

Y dentro buscar la config <Directory /> y comentar el Order y el Deny, para que no nos de errores de permisos.

<Directory />
Options FollowSymLinks
AllowOverride None
#Order deny,allow
#Deny from all
</Directory>

Ahora si teníamos en marcha el servidor web, deberíamos reiniciarlo y probar con los ejemplos.

Nota: recomendaciones, verifiquen que el programa SKYPE no este utilizando el puerto 80, por defecto viene configurado de fabrica y esto molesta.
Con el comando de DOS «netstat -an» podemos ver los puertos en uso, antes de iniciar el servidor web,. es recomendable verificar que el puerto 80 no este en uso por algun otro programa.

Si después de verificar estos pasos una y otro vez, os sigue apareciendo el mensaje «Module win_serial_port is not compiled into PHP» es que la version de SER_PHP.DLL no es la correcta, busquen la correcta para su servidor PHP.

Para verificar si funciona, necesitan abrir en el webbrowser el archivo que trae por defecto el paquete SER_PHP, php_ser_test.php o el sms_list.php que os mostrará una lista de comandos posibles para dicha aplicación.

PHP serial extension test page
module loaded
Functions available in the win_serial_port extension:
ser_version
ser_isopen
ser_open
ser_close
ser_write
ser_read
ser_setdtr
ser_writebyte
ser_readbyte
ser_setrts
ser_inputcount

Fin,.. esto funciona… a experimentar con el puerto serie desde internet.

Sigue leyendo

AnteriorSiguiente

3 comentarios en «SER_PHP o Puerto serie desde Internet»

  1. Como estan…
    Me sale el mismo error Module is not compiled into PHP y tengo Php 5.2.9 y utilizo la libreria php_ser++ q es compatible con Php 5.2.0 a 5.2.16 e hice todos los pasos mencionados en este tutorial pero igual m sigue saliendo el mismo error…

    POr favor sugerencias o q estoy haciendo mal..

    Gracias…..

  2. bueno… intentare ayudarte… ya que lo he hecho para windows… no lo he intentado para linux no se como funcionará…
    en principio… quizas te has olvidado de quitar el «comment» el punto y coma (;) del archivo php.ini… en la linea que hace referencia a la DLL…
    ;extension=php_ser.dll

    y lo segundo… prueba varios dlls porque puede que tenga problemas con la versión de php… igualmente después de cada modificación… hay que reiniciar apache… para que surta efecto.

    intenta y me dices.

  3. Veo en el sitio de descarga que para la version de prueba hay un delay intencional al momento de abrir la coneccion y una limitacion de 1024 bytes. Has hecho pruebas de performance? como funciona?
    Salu2

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

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