viernes, 4 de mayo de 2012

Librería Rxtx (Laboratorio)

Librería de comunicaciones Java RXTX


La librería de comunicaciones Rxtx es un conjunto de clases de Java que nos facilita las comunicaciones entre la PC y Arduino, escencialmente cubre las comunicaciones Serial, no necesariamente tiene que ser con Arduino.

En esta página pueden encontrar teoría, y lo más importante, descargar esta librería:

http://rxtx.qbang.org/wiki/index.php/Download


Yo estoy usando esta librería para alimentar el circuito de control de mi proyecto (módulo de iluminación en casa inteligente). Lo que hago es mandar una señal de control hacia el Arduino, mediante esta señal le digo al Arduino si quiero encender o apagar la iluminación. Como mencioné anteriormente, toda esta comunicación se realiza por medio del conector Serial (DB9), aunque el Arduino tiene un chip FTDI (convertidor usb-serial) para poder utilizar un conector USB, la comunicación es tomada como un puerto virtual serial. 


 Chip FTDI (convertidor USB-Serial)



Para los que descargaron el paquete IDE de Arduino (creo que todos lo hicieron), pueden encontrar esta librería en la carpeta "lib", entran en la carpeta lib y el archivo se llama RXTXcomm.jar.

Para poder desarrollar programas en Java que involucren este tipo de comunicaciones es necesario agregar esta librería en nuestra ruta de librerias de java, esto va depender de donde tengamos instalado Java, mi ruta es algo así:

/usr/lib/jvm/java-6-openjdk/jre/lib/ext


Ya teniendo la librería agregada ahora solo tienen que importarla en su código, yo por ejemplo agregué todas estas librerias :

import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import java.io.InputStream;
import java.io.OutputStream;

import java.io.Serializable;


Pero eso ya depende de las funciones que quieren que realice su programa, básicamente las librerías anteriores se encargan de encontrar e identificar el puerto, establecer la conexión y leer y escribir sobre el puerto Serial.

Pero ... 

Todo esto no serviría sin antes tener un programa almacenado en el microcontrolador del Arduino, es decir, también debemos programar el ATMEL de Arduino para que al llegar la señal a Arduino, este sepa qué hacer con ella, yo por ejemplo cree un programa para que cuando le llegara la señal pudiera representar el estado por medio de un led conectado a la pata 13, este prorgrama lo hicé en la IDE de Arduino, el programa me quedó así (fue una modificación al ejemplo de Digital que venía por default):


 (Clickear en la imagen para ampliarla)




Según mi programa cuando Arduino recibe un 1 por medio de la conexión Serial este pondrá en estado LOW el pin de salida 13 apagando el led que tengo polarizado en esa terminal, por el contrario, si al Arduino le llega un 2 se apagará el LED.

Del lado de java yo realicé un programa que consiste en una ventana con 2 botones simples, a los botones les agregué las actividades de mandar los valores que interpretará Arduino.

El código es una mezcla de líneas mias y también de varios sitios de internet ya que no encontré tutoriales o ejemplos que pudieran servir para aprender sobre esta librería.

El código se los dejo en la siguiente dirección por si quieren descargarlo y estudiarlo:

https://raw.github.com/gist/2599974/57c4902c5d984567a604ae8357d90565b49b0f8e/Intento1.java

 
La interfaz del programa la hice muy sencilla, pero aquí lo relevante es la comunicación entre la pc (Java) y Arduino.

La interfaz de mi programa se ve así:




Simple pero funciona, las funcionalidades de los botones son muy obvias hehe, cada vez que oprimo un botón se ejecuta un método que se encarga de envíar un valor 1 (encender) o 2 (apagar) al Arduino, obviamente esos son parámetros que le paso al método, luego de ser enviados al Arduino, este se encarga de procesarlos y determinar una acción dependiendo de lo que se le envió.

A continuación les dejo un video que realicé donde muestro la funcionalidad de este sencillo ejemplo:







Saludos!



3 comentarios:

  1. ¿Esta entrada aún no la terminas?

    ResponderEliminar
  2. No, todavía no hehe, me falta subir mi video

    ResponderEliminar
  3. 8 pts lab integrados (aquí dice que es el blog de móviles, pero el tema es de integrados)

    ResponderEliminar