Comunicacion serial en Java

Comunicacion serial en Java

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

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!

Comunicacion serial en Java

Clic para valorar esta información
[Total: 1 Promedio: 5]