Buenos días, en FirmWare nos hemos encontrado con el reto de manejar el puerto serial para algunos conocido como » DB9 ,RS232 o COM «, enviar, recibir información, secuencias de escape y Todo desde JAVA.
Como es conocido en el mundo del Hardware todo dispositivo que se conecte a un pc debe ser instalado en conjunto con un controlador o driver.
¿Que es un Driver o Controlador?
Es un conjunto de secuencias de comandos denominadas (ESC/POS), que permiten al Sistema Operativo interactuar con dicho dispositivo y muchas veces con una interfaz de usuario estándar.
Para más información sobre el tema (Drivers o Controladores), puede dirigirse al siguiente enlace de WikiPedia:
http://es.wikipedia.org/wiki/Driver
Para poder realizar la interacción en java vamos a necesitar la siguiente librería:
Giovynet
link de descarga: http://code.google.com/p/giovynetserialport/downloads/list
Para la codificación he utilizado IDE Eclipse HELIOS, y creamos un java project
Después de haber descargado él .zip se procede a descomprimir, vamos a copiar los siguientes archivos:
1. GiovynetDriver.jar
2. libSerialPort.dll
3.libSOSerialPort.so
y los pegamos en el proyecto que se había creado con anterioridad en Eclipse, seguido de esto se debe dar click derecho en el proyecto y seleccionamos la opción «Properties«, en la ventana que aparece a continuación se debe buscar la opción «Java Build Path«, entre la pestaña de ítems para esta opción se debe dar click en «Libraries«, luego se da click en «ADD JARS» y seleccionar el archivo GiovynetDriver.jar.
Despues de haber pegado los archivos y agregado el .jar en el proyecto java vamos a abrir el .java, en mi caso se llama puertoSerial.java y se digita el siguiente codigo:
[sourcecode language=»java»]
import giovynet.nativelink.SerialPort;
import giovynet.serial.Baud;
import giovynet.serial.Com;
import giovynet.serial.Parameters;
import java.util.List;
public class puertoSerial {
public static void main(String[] args)throws Exception{
//Definición de parametros
Parameters settings = new Parameters();
//definición del puerto que se va a utilizar
settings.setPort(«COM1»);
//definición de la velocidad de impresión, se debe tener en cuenta dicho argumento en las especificacion de velocidad del dispositivo
settings.setBaudRate(Baud._38400);
settings.setMinDelayWrite(10);
//asignamos los parametros al objeto com1
Com com1 = new Com(settings);
//envio de cadena de caracteres
com1.sendString(«Hola Mundo\n»);
//inicio de envio de secuencias de escape ESC/POS
char[] data1={27,’a’,2 };
com1.sendArrayChar(data1);
// fin de envio de secuencias de escape ESC/POS
com1.close();
}
}
[/sourcecode]
Para su respectivo uso en el siguiente link se encuentra el proyecto de ejemplo que hemos utilizado en FirmWare.
Gracias y hasta la próxima.
Consulta: coo hago para imprimir por la bandeja SLIP de la impresora Epson TM-U675 ya que no puedo encontrar un ejemplo. Gracias!!
Hola Guillermo, esencialmente deberías hacer búsqueda del ESC/POS «de inicializacion de la bandeja SLIP» que permite modificar el dispositivo de salida de la impresora, el siguiente enlace es un buen punto donde comenzar:
http://www.birch.com.tw/newpage/template/RPu420ProgramManual.pdf
HOla buen dia como puedo Realizar un programa (en modo gráfico) que reciba cadenas de caracteres por un puerto serial a 9600bps, mostrando las cadenas recibidas en un jTextArea, una línea a la vez. si puedes ayudarme t estaria muy agradecida soy nueva en esto y es urgenteeeeee =S
Hola Yeimi, para leer un único carácter desde el puerto com lo puedes hacer añadiéndole al objeto el método receiveSingleString:
String entradaCom = com1.receiveSingleString() ;
y para recibir cadenas de caracteres ASCII en forma de cadena es con el método receiveToString:
String entradaCom = com1.receiveToString();
Gracias!!!!!!!!
Excelente!
Necesito generar un «Configurador» de equipos GPS Skypatrol (los cuales se conectan por Serial/COM) Gracias a estas clases java voy a hacerlo sin complicaciones. Gracias por compartir 😉
es muy util tu aporte, lo que yo intento hacer es enviar un comando AT por USB, crees poder ayudarme?
por ejemplo, enviar el comando atd+52xxxxxxxxxx para realizar una llamada…
Hola Pinkieroce,
Tratando de imaginarme el escenario, supongo que tienes un conversor de USB a Serial a través del cual estas conectando el MODEM. Si es así el puerto debe aparecer registrado como COMXX dentro del sistema operativo.
Una vez tengas identificado el puerto COM, puedes modificar el ejemplo para que quede:
settings.setPort(«COMXX»);
Y en la siguiente línea enviar el comando AT:
//asignamos los parametros al objeto comXX
Com comXX = new Com(settings);
//envio de cadena de caracteres
comXX.sendString(«AT+xxxxx\n»);
Y luego de enviar el comando se debe esperar por la cadena OK.
Consulta:necesito realizar un programa para conectar dos computadoras con el conversor usb serial y hacer transferencia de archivos entre las mismas como podria implementarlo con estas clases???gracias…
Hola Pedro;
Suponiendo que necesitas una aplicación con capacidad de comunicación bi-direccional, lo que debes hacer es implementar un hilo que sea capaz de manejar los datos recibidos y así mismo enviar otros, algunos metodos de ejemplo que puedes implementar los encontrarás en http://es.scribd.com/doc/31701048/giovynet.
Ok muchas gracias….tengo otra consulta de lo que estaba averiguando las variables que aceptan los metodos de envio del giovynet son de tipo char como necesito enviar un archivos vi que hay q descomponerlo en un vector de bytes obviamente del mismo tipo como puedo hacer para no tener los problemas de compatibilidad de las variables???
Hola, necesito ayuda por favor. Estoy recibiendo datos por el puerto serial. El problema es que no estoy recibiendo caracteres ascii, podría convertir de ascii a hexa o a decimal, pero hay valores, por ejemplo 8F, que no corresponden a ningún caracter ascii. Mi pregunta es cómo podría recibir esos valores, ya sea en hexa o en decimal? Gracias de antemano!
Hola amigos, que tal, quisiera información mas detallada sobre comandos esc/pos, ya que actualmente tengo que imprimir una imagen en una impresora térmica que funciona con estos comandos… Pero no he podido, ¿alguien sabe como hacerlo?
Alguien ha lograda hacer funcionar la libreria con exito en linux mas especifico ubuntu?
Muy buen dia tengo un problema que ala hora de imprimir con java en una Epson TM-u675 usb me imprime todo montado letra sobre letra no se si ustedes me puedan ayudar
Hola, tengo problemas para mandar comandos SCPI y tampoco logro leer los datos enviados desde un multímetro Keithley mod 2000. ¿Me puedes ayudar? gracias.
Me da error en comX.sendString(«valor»);
sendString me sale tachado por una linea negra, cual es el problema?
Hola, tengo un problema,
Tengo un modem al que debo actualizar el firmware pero este esta en una placa instalado de fabrica y tiene linux (solo consola) y para actualizarlo debo hacerlo por el puerto serial e implementar el protocolo x-modem para enviarle el archivo.
¿Me podría ayudar?. Gracias
Interfaz Java y Arduino.
Tutorial diseño de interfaz con Java bajo NetBeans para controlar Arduino desde el puerto serie / USB, odrás encender y apagar un Led, recibir mensajes de textos o comandos desde Arduino.
Ver tutorial.
http://www.slideshare.net/Metaconta2/interfaz-java-y-arduino
Saludos.