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»

¿Necesitas aprender algo nuevo ? Ve a Udemy, busca el tema del que quieres aprender, selecciona el curso para ti y continua con tu aprendizaje.
Udemycomm.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
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("----------------------"); }
Conectando a un puerto com
public void connect() { String puerto = "COM4"; selectedPortIdentifier = (CommPortIdentifier)portMap.get(puerto); CommPort commPort = null; try { commPort = selectedPortIdentifier.open("Send Sms Java", TIMEOUT); serialPort = (SerialPort)commPort; setSerialPortParameters(); connected = true; System.out.println("conectado exitosamente a puerto "+puerto); } catch (PortInUseException e) { System.out.println("Puerto en uso."); } catch (Exception e) { System.out.println("Error al abrir puerto."); } }
Configurando ese puerto
private void setSerialPortParameters() throws IOException { int baudRate = 115200; try { serialPort.setSerialPortParams(baudRate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); serialPort.setFlowControlMode( SerialPort.FLOWCONTROL_NONE); } catch (UnsupportedCommOperationException ex) { throw new IOException("Unsupported serial port parameter"); } }
Preparar el puerto para escribir y leer hacia y desde el
public boolean initIOStream() { boolean successful = false; try { // input = serialPort.getInputStream(); output = serialPort.getOutputStream(); writeData("HELLO"); successful = true; return successful; }catch(IOException e) { System.out.println("Error al abrir Stream."); return successful; } }
Registramos el listener
public void initListener() { try { serialPort.addEventListener(this); serialPort.notifyOnDataAvailable(true); System.out.println("Listo.."); }catch(TooManyListenersException e) { System.out.println("Demasiados escuchas."); } }
Recordando que nuestra clase implemente el metodo SerialPortEventListener
implements SerialPortEventListener
Mandar y recibir informacion hacia y desde el puerto serial
Mandamos informacion al puerto mediante writeData
public void writeData(String aenviar) { try { output.write(aenviar.getBytes()); } catch (IOException ex) { System.out.println("Error al enviar informacion."); } }
y leemos información recibida con la implementacion del método SerialEvent
@Override public void serialEvent(SerialPortEvent spe) { if (spe.getEventType() == SerialPortEvent.DATA_AVAILABLE) { byte[] readBuffer = new byte[20]; try { while (input.available() > 0) { int numBytes = input.read(readBuffer); } System.out.print(new String(readBuffer)); } catch (IOException e) {System.out.println(e);} } }
Desconectamos el puerto con
public void disconnect() { try { writeData("GOODBYE"); serialPort.removeEventListener(); serialPort.close(); input.close(); output.close(); connected = false; System.out.println("Desconectado."); } catch (Exception e) { System.out.println("Error al desconectar."); } }
Ahora solo desde donde queramos comenzar a escribir ..
searchForPorts(); connect(); if (connected == true) { if (initIOStream() == true) { initListener(); writeData("comandos a puerto serial"); ... .. .
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!