Comunicacion serial en Java

Comunicacion serial en Java

Comunicacion serial en Java
4 (80%) 4 votos

Hoy vamos a mostrarte como trabajar con comunicacion serial en Java de manera fácil y rápida, uno de los temas básicos de java mas solicitados tanto en proyectos escolares como en temas mas avanzados. Hoy disponiéndome a realizar un proyecto de envió de sms desde un aplicación en java me veo obligado a hacer una rápida parada en comunicacion serial en java así que me he decidido a hacer este post y explicar paso a paso los archivos necesarios y la configuración correcta para poder realizar esta comunicación a puertos com en nuestra computadora, sin mas que decir de introducción vamos ya..

Configurando el ambiente

Lo primero que necesitamos para comenzar nuestro proyecto de comunicacion serial en java son estos 3 archivos:

  • comm.jar
  • win32comm.dll
  • javax.comm.properties

Todos estos archivos los puedes descargar desde mi paquete utils para sms desde java.

Una vez descomprimida la carpeta deberas colocar cada archivo en una locacion particular de tu computadora.

%JAVA_HOME% -> Directorio de instalacion del jdk de java. Por ejemplo “C:\Program Files (x86)\Java\jdk1.7.0_71”


¿Sabías que?

¿Necesitas aprender algo nuevo ? Ve a Udemy, busca el tema del que quieres aprender, selecciona el curso para ti y continua con tu aprendizaje.

Udemy

comm.jar

%JAVA_HOME%/lib

%JAVA_HOME%/jre/lib/ext

win32comm.dll

%JAVA_HOME%/bin

%JAVA_HOME%/jre/bin

C:/windows/system32/

javax.comm.properties

%JAVA_HOME%/lib

%JAVA_HOME%/jre/lib

Una vez ubicados estos archivos en su respectiva ubicación deberemos tener iniciado ya nuestro proyecto para poder agregar la librería comm.jar al mismo.

En Netbeans vamos a Tools -> Libraries -> New Library -> Colocamos un nombre, por ejemplo “java serial” -> Add Jar/Folder -> Seleccionamos el jar comm.jar (esta en los archivos necesarios que descargaste) -> OK

Ahora una vez creada nuestra librería la agregamos dando click derecho sobre Libraries en nuestro proyecto y a continuación en Add Library, solo seleccionamos la librería que acabamos de crear y listo.

Abriendo el puerto y configurando opciones

Buscando puertos disponibles

Conectando a un puerto com

 Configurando ese puerto

Preparar el puerto para escribir y leer hacia y desde el

 Registramos el listener

Recordando que nuestra clase implemente el metodo SerialPortEventListener

 

Mandar y recibir informacion hacia y desde el puerto serial

Mandamos informacion al puerto mediante writeData

y leemos información recibida con la implementacion del método SerialEvent

Desconectamos el puerto con

Ahora solo desde donde queramos comenzar a escribir ..

Espero te sirva este código para realizar la comunicacion serial en java para tus proyectos y si te quedaste con ganas del proyecto de envió de sms desde java ya pronto lo publicare.

¿Quieres aprender mas? Compra en amazon el libro Java Como Programar a un precio economico.

Hasta Luego!

Comunicacion serial en Java

Comunicacion serial en Java
4 (80%) 4 votos

28
Dejar un comentario

avatar
20 Comment threads
8 Thread replies
2 Followers
 
Most reacted comment
Hottest comment thread
20 Comment authors
ivan pacoJonathan MelgozafranciscoAndresEnrique Garcia Recent comment authors
  Subscribe  
Notify of
ivan paco
Guest
ivan paco

por que ya no dejan el archivo java para descargar, ya nomas para abrirlo en netbeans,, me imagino que ese es el plan??’
pero si pueden mandenmelo porfa…
ivanntic@gmail.com

francisco
Guest
francisco

functiona con los puertos serie a través de usb?

Andres
Guest
Andres

Hola QUe tal tengo una duda me da un error en el initlistener.

public void initListener() {
try {
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
System.out.println(“Listo..”);
} catch (TooManyListenersException e) {
System.out.println(“Demasiados escuchas.”);
}
me marca error en el (this).
no se a que se deba te agradeceria mucho tu apoyo en este proyecto.

Enrique Garcia
Guest
Enrique Garcia

Hola, tengo una duda como seria para leer la respuesta, es decir como llamar la función para serialEvent(SerialPortEvent spe)

gracias

carlos
Guest
carlos

Buenos dias, actualmente tengo un programa que lee el puerto pero tengo una duda en estos manejos de leer puertos que es mejor realizar un ciclo para que pueda ver lo que envia el ciclo, o el serial.event lo hace de manera mas efectiva, dado que en ocasiones no alcanzo a leer lo que llega, espero me puedas recomendar la maejor opcion

facu
Guest
facu

me salta este error
Error 2 opening registry key HARDWARE\DEVICEMAP\SERIALCOMM

Omar Gael
Guest
Omar Gael

Que tal!, como estas? es probable que no tengas conectados puertos comm a tu computadora y no tiene registrados en “registry key”

fernando
Guest
fernando

hola
tengo una duda cuando ejecuto el programa no aparece la lista de los puertos
gracias

Luis Kruz
Guest
Luis Kruz

Disculpen mi ignorancia…
En donde esta el archivo “Send Sms Java” que se define en la linea: commPort = selectedPortIdentifier.open(“Send Sms Java”, TIMEOUT);
Pregunto si es que tengo que crear un archivo con ese nombre o se crearia solo, considerando que estoy en SO Windows

victor garnica
Guest
victor garnica

Hola saludos como estan.
me ha servido de gran ayuda este tema.
sin embargo luego de realizar varias pruebas desde mi ambiente de desarrollo todo funciona super, pero cuando compilo la pequeña aplicación con un .jar, me falla mostrando que falla al abrir puerto.

Mil gracias por su colaboracion y ayuda.

victor garnica
Guest
victor garnica

Hola saludos como estan.
me ha servido de gran ayuda este tema.
sin embargo luego de realizar varias pruebas desde mi ambiente de desarrollo todo funciona super, pero cuando compilo la pequeña aplicación con un .jar, me falla mostrando que falla al abrir puerto.

Pol Marquez
Guest
Pol Marquez

Hola muy interesante esta publicación, espero me sirva estoy empezando un proyecto donde quiero leer los datos de una bascula conectada a la PC por puerto serial y almacenarlos en una BD creo que esto me debe ayudar, si pudieras darme un enfoque o darme tu opinión.
Gracias de antemano!

davideduma
Guest
davideduma

Saludos a todos. Felicitaciones por el tutorial!! Queria comentarles que el problema del win32comm lo solucione intalando el jdk x86 (version 32bit). Pasos luego de instalar el jdk x86: 1. Ubicar los respectivos archivos en las respectivas carpetas: C:\Program Files (x86)\Java\jdk1.8.0_77 Copy ‘win32com.dll’ to JDK_HOME\jre\bin. Copy ‘javax.comm.properties’to to JDK_HOME\jre\lib. Copy ‘comm.jar’to to JDK_HOME\jre\lib\ext. 2. Habilitar el JDK para x86 en la aplicacion: 1.Posicionarse en la carpeta libraries del proyecto 2. click derecho en el jdk actual (x64 ) 3. edit 4. Add Plataform 5. Buscamos la siguiente direccion del jdk x86: C:\Program Files (x86)\Java\jdk1.8.0_77 Listo de esta forma se soluciona… Read more »

Gabriel
Guest
Gabriel

Hola, ¿cómo se podría implementar el método de “Lectura_del_puerto” desde una clase principal? Es decir, si creo un objeto, por ejemplo, “serial” y quiero implementar el método mencionado e igualarlo a una variable “int numBytes2”, ¿se podría declarar int numBytes = serial.Lectura_del_puerto(); ? y así usar esa variable para realizar algo dado el valor que llega por el puerto.

Nerina
Guest
Nerina

Hola! Excelente post.
Solo que me da el error de los 32 – 64 bits. Las librerias descargadas son de 32 bits y necesito las de 64, de donde puedo obtenerlas??? Por favor si alguien puede pasarmelas, es urgente.

Muchas gracias desde ya. Saludos

Tonny
Guest
Tonny

Excelente post!!!!!!!!!!!! me funciono, talvez sea muy tarde pero al que tuvo este error—- Error loading win32com: java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jdk1.8.0_45\jre\bin\win32com.dll: Can’t load IA 32-bit .dll on a AMD 64-bit platform, pues el error te dice que las librerias que estas usando son para 32 bits y tienes que descargar las librerias de 64 bits que solo son las RXTX. El que tenga problemas con las librerias puede enviarme un mail y yo le facilitare las librerias con las que me funcionaron(no posteo el link de descarga porque ya no me acuerdo de donde la descargue XD, es que descargue muchas… Read more »

Daniel Jacome
Guest
Daniel Jacome

Amigo tengo este error cuando ejecuto la comunicación serial

Error loading win32com: java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jdk1.8.0_45\jre\bin\win32com.dll: Can’t load IA 32-bit .dll on a AMD 64-bit platform

Si sabes como puedo solucionarlo te agradecería mucho

osvaldo
Guest
osvaldo

me has salvado muchas gracias no se como lo lograste pero eres un genio

jose luis cortés
Guest
jose luis cortés

Disculpa crees que me pudieras pasar el proyecto es que la verdad me están saliendo muchos errores que no entiendo por que salen y no se cuales son los import lo que se necesitan

osvaldo
Guest
osvaldo

buen articulo para los que les marca error aqui esta el codigo import java.awt.event.KeyEvent; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.security.Policy.Parameters; import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.TooManyListenersException; import javax.comm.CommPort; import javax.comm.CommPortIdentifier; import javax.comm.PortInUseException; import javax.comm.SerialPort; import javax.comm.SerialPortEvent; import javax.comm.SerialPortEventListener; import javax.comm.UnsupportedCommOperationException; import org.omg.CORBA.TIMEOUT; public class puertoCom implements SerialPortEventListener { Enumeration ports; HashMap portMap = new HashMap(); public void searchForPorts() { System.out.println(“Puertos Disponibles:”); ports = CommPortIdentifier.getPortIdentifiers(); while (ports.hasMoreElements()) { CommPortIdentifier curPort = (CommPortIdentifier) ports.nextElement(); if (curPort.getPortType() == CommPortIdentifier.PORT_SERIAL) { System.out.println(curPort.getName()); portMap.put(curPort.getName(), curPort); } } System.out.println(“———————-“); } CommPortIdentifier selectedPortIdentifier; SerialPort serialPort; boolean connected; public void connect() { String puerto… Read more »

jose
Guest
jose

oye crees que me pudieras pasar el código que no le entiendo muy bien

Emilio
Guest
Emilio

Hola primero, quiero felicitarte por tu blog, esta buenísimo, y después preguntar ¿por qué será que en el primer método public void searchForPorts() me marca error en portMap? no he podido probar el código por ese primer error.

Emilio
Guest
Emilio

Gracias Jonathan, pero como no encontraba el porque del error tuve que implementarlo de forma diferente:

public void searchForPorts() {

Enumeration listaPuertos = CommPortIdentifier.getPortIdentifiers();
CommPortIdentifier idPuerto = null;
boolean encontrado = false;
while (listaPuertos.hasMoreElements() && !encontrado) {
idPuerto = (CommPortIdentifier) listaPuertos.nextElement();
if (idPuerto.getPortType() == CommPortIdentifier.PORT_SERIAL) {
System.out.println(idPuerto.getName());
if (idPuerto.getName().equals(“COM23”)) {
encontrado = true;
}
}
}

SerialPort puertoSerie = null;
try {
puertoSerie = (SerialPort) idPuerto.open(“DescripcionPropietario”,
2000);
System.out.println(“Se abrio exitasamente”);

} catch (PortInUseException e) {
System.out.println(“Error abriendo el puerto serie”);
}

Pero aún así lo voy a probar con el HashMap()

Gracias, saludos!

Emilio
Guest
Emilio

Hola Jonathan, estoy retomando el tema y quiero utilizar tus métodos pues definitivamente se me hace muy práctico, inicialice HashMap portMap = new HashMap(); en el primer método searchForPorts() y funciona de maravilla, pero ahora el problema lo tengo en el segundo método connect(); ya que de igual manera me marca error en el portMap, lo incializo y desaparece el error pero al ejecutarlo no es capaz de abrir el puerto, la pregunta es ¿Necesito el valor del portMap del método searchForPorts(); para que pueda abrir el puerto en connect(); y de ser así como puedo obtener ese valor. De… Read more »