Este proyecto se trata de controlar de forma remota un dispositivo sencillo, en este caso un bombilla.
El teléfono accede a una página web en la que hay dos enlaces, uno para encender la bombilla y otro para apagarla. Los enlaces realizan sendas peticiones http a un programa servidor que corre en un ordenador normal conectado a internet.
petición para encender: http://IPdelservidor/enciende
petición para apagar: http://IPdelservidor/apaga
El servidor responde a estas peticiones con una página http generada dinamicamente que muestra el siguiente mensaje: "petición procesada".
El ordenador a su vez, dispone de un puerto serie RS-232 de modo que puede activar y desactivar el pin RTS como respuesta a las peticiones http de encendido y apagado. La distribución de los pines en los conectores puede causar confusión, en este enlace se describe muy bien.
Como la corriente suministrada por el pin RTS del puerto serie es insuficiente para activar la bombilla usaremos el clásico circuito con transistor y relé conectado de la siguiente manera: (Crear diseño y colgarlo aquí).
Por sencillez el programa servidor se escribirá en Java. En este enlace hay un servidor muy sencillo que se puede modificar para usarlo en este proyecto.
Para modificar el bit RTS tenemos varias opciones:
Podemos hacer un programa en C para activar el bit RTS y se ejecutará el programa desde el servidor java. En este enlace se puede ver un programa de ejemplo para acceder al puerto serie en windows98
Podemos usar el javax.comm api que permite modificar el estado del pin RTS del puerto RS-232 usando java. Guía de usuario
Otra opción es usar el puerto paralelo, y conectar el led directamente a uno de los bits D0 a D7. En windows el acceso al puerto paralelo se hace a través de la librería io.dll (se encuentra, juntp
con las demás en el directorio system32). En la mencionada librería hay una función llamada portOut con la siguiente signatura:
void PortOut (int Port ,int Value);
Esta función sirve para mandar un dato de 8 bits a un puerto. Por ejemplo para mandar el valor 3
(00000101 en binario) al puerto paralelo, cuya dirección es normalmente 0x378 (en hexadecimal), 888 en decimal hay que invocar:
PortOut(888,3);
Para poder invocar funciones de dll desde un programa escrito en java se puede usar la librería jna
En este enlace se muestra un ejemplo del código necesario para invocar a PortOut();
En este enlace se describen los fundamentos de uso de la librería jna
tareas a realizar por los alumnos:
0- Realizar los diagramas UML del proyecto en el que se identifiquen todos los elementos.
1- Diseñar el circuito de interfaz con el puerto serie (transistor bc-108, resistencia de 2K, relé DCDC de 6V diodo de protección 1N4001, pila de 9v, pila de 4,5V y bombilla de 4,5 V)
2- Conectar el ordenador que va a hacer de servidor a la red
3- Instalar el JRE de Java Standard Edition en el ordenador que va a hacer de servidor (Si no está instalado)
4- Modificar el servidor Http para que responda a los dos tipos de peticiones que nos interesan, compilar y probar
5-Realizar un programa sencillo que use el javax.comm api para activar o desactivar el pin RTS
6-Modificar el programa servidor para que active y descative el pin RTS
7- Hacer un NAPT en el router que da salida a internet para que redirija las peticiones entrantes al puerto http (puerto 80) al ordenador en el que tenemos instalado el servidor.
Participantes:
- Alejandro Pereña
- Darío Castro
- Joel Malagón
- Miguel Laseca