Instalando e utilizando a API de comunicação serial RXTX para leitura e escrita em portas seriais para Windows e Linux.

 

O Java tem uma grande vantagem frente a outras plataformas de desenvolvimento que é a possibilidade de um mesmo software ser executa em diversas plataformas sob uma mesma compilação, não é necessário reescrever ou nem mesmo recompilar o software para que este esteja disponível em outras plataformas (sejam elas Windows, Linux, Mac ou até mesmo PDA´s de gama alta).

 

Mas toda essa facilidade tem certo custo, com Java a tarefa de chamar API´s nativas dos sistemas operacionais ou ainda fazer comunicação com o hardware diretamente se torna um pouco mais complexo. Mas para isso a Sun e demais empresas envolvidas no desenvolvimento Java disponibilizam diversas API´s para facilitar o trabalho, como é o caso da API RXTX para a comunicação tanto serial quanto paralela (existe também a possibilidade de comunicação via USB com esta mesma API).

 

A API RXTX é baseada na API Javacomm distribuída pela própria Sun, com a vantagem sobre esta de que ela é portável para Linux, Windows e Mac, enquanto que a Javacomm em sua atual versão só é portável para Linux engessando de certa forma o processo de desenvolvimento para múltiplas plataformas.

 

Onde paramos

Na parte anterior dessa série de artigos paramos enviando dados para a porta lendo, agora vamos trabalhar para enviar dados para a porta serial. Esse por sinal é um processo muito mais simples do que o anterior. Sabendo como enviar e ler dados da serial é possível implementar qualquer aplicação que, por exemplo, precise ler algum equipamento e depois mandar uma confirmação de acordo com a leitura que foi efetuada ou ainda enviar algum dado para iniciar o processo de envio de informações do equipamento para o PC. Resumindo, sabendo como trabalhar nas duas vias (escrita/leitura) da comunicação serial é possível que a sua aplicação desenvolva um gerenciamento completo do periférico conectado na porta serial.

 

Começando a aplicação de escrita na serial

Nesse artigo não iremos nos ater aos processos únicos para a criação de um novo arquivo/projeto dentro do Netbeans, pois esses passos foram explicados no artigo anterior e são considerados como requisitos mínimos para a continuidade desse arquivo.

 

A organização do projeto para a escrita na porta serial obedecerá a mesma padronização que o projeto anterior (leitura serial), haverá um pacote denominado net.viamais.serial onde estarão as duas classes com os códigos de manipulação serial inseridos, além do pacote net.viamais.main onde conterá a classe Main que será a classe principal do projeto e implementará efetivamente a escrita na serial. Não se esqueça também de ter a classe RXTXcomm.jar na biblioteca do seu projeto, além é claro de possuir o JDK e a API RXTX devidamente configurados (todos esses detalhes já foram explicados nos artigos anteriores dessa série).

 

Abaixo podemos ter uma visualização da IDE com o projeto devidamente configurado na figura 01.

 

prvrsuarmsp4fig01.jpg 

Figura 01: projeto preparado para o desenvolvimento da escrita na porta serial.

 

Escrevendo o código da escrita serial

Agora vamos a parte mais interessante desse artigo, que é colocar a “mão na massa” e começar a desenvolver o código, o primeiro passo é gerar os imports das suas classes para poder aproveita-las no seu código:

 

import net.viamais.serial.SerialCom;

import net.viamais.serial.SerialComLeitura;

 

Nada muito complicado, agora precisamos extender a classe SerialCom para dar continuidade ao nosso trabalho:

 

public class Main extends SerialCom {

 

Agora vamos gerar o construtor com o array de erros conforme a padronização do Java:

 

public static void main(String[] args){

 

Agora que já preparamos a parte inicial da nossa classe Main (principal) vamos nos ater ao código de escrita propriamente dito, o próximo passo é criar uma instancia da classe SerialComLeitura na nossa classe Main tomando o cuidado de informar os parâmetros de endereço da porta, no caso COM1, o baudrate, no caso 9600 e o timeout, no caso 0:

 

SerialComLeitura serialEscrita = new SerialComLeitura("COM1", 9600, 0);

 

Pronto agora já temos a instancia serialEscrita pronta para aproveitarmos os seus métodos e iniciar o nosso processo, no próximo passo vamos ir aproveitando os métodos de identificação, verificação de disponibilidade, abertura, envio e finalmente fechamento da porta serial para fecharmos todo o ciclo do processo de escrita na porta serial (é preciso atenção, pois a chamada de um método fora de ordem como está abaixo vai comprometer todo o funcionamento do nosso exemplo):

 

serialEscrita.HabilitarEscrita();

serialEscrita.ObterIdDaPorta();

serialEscrita.AbrirPorta();

serialEscrita.EnviarUmaString("Olá mundo via porta serial!");

serialEscrita.FecharCom();

 

E pronto o código gerado para o nosso exemplo é apenas isso, fácil, transparente e funcional. Assim como o código gerado no artigo anterior, ele foi testado em vários tipos diferentes de hardware, porém alguma incompatibilidade pode surgir em virtude das exigências que o hardware possa ter para estabelecer a comunicação de forma correta. Mas tirando esse aspecto a comunicação serial no Java é bem fácil e simples com a API RXTX.

 

Para ser mais fácil de se perceber o funcionamento dessa parte o ideal é que se tenha disponível algum periférico conectado na serial que receba dados (se for uma impressora será melhor ainda), pois assim é possível enviar os dados e observar a resposta do periférico. Com esse exemplo que eu gerei não é possível apenas mandar uma string para impressão, com ele é possível enviar códigos para que o hardware efetue operações específicas, por exemplo, alguns tipos de impressora pedem que ao final de cada frase seja enviado um código de quebra de linha ou ainda um código de abertura e fechamento da comunicação e por aí vai, tudo vai depender do limite do seu hardware periférico que está conectado na serial.

 

Finalizando a série de artigos

Esse é o último artigo de uma série de 3 que mostrou a configuração da API RXTX, a construção das classes de apoio para a leitura/escrita e a utilização dessas classes geradas para que o seu software possa enviar e receber dados pela porta serial de forma adequada e simples.

 

Como já disse anteriormente, por ter uma interação direta com o seu hardware periférico, é bem comum alguns desenvolvedores experimentarem problemas com a leitura ou escrita, contudo em vários casos trata-se de algum tipo de incompatibilidade do hardware gerado, nesse caso é preciso um estudo mais profundo e prováveis modificações no código principalmente no método abstrato serialEvent().

 

Espero que essa série de artigos tenha sido útil na carreira de desenvolvimento dos leitores em geral, pois quando pesquisei por comunicação serial utilizando Java recebi muita informação, porém nenhuma das fontes trazia algo consolidado de forma que fosse possível acompanhar todo o processo de configuração do ambiente, leitura e escrita. Foi essa seqüência que eu quis mostrar e que acho mais fácil para a assimilação do conteúdo de forma geral.

 

Se algum desenvolvedor leu esse artigo e mesmo assim ficou com dúvidas basta acessar o endereço http://www.viamais.net/contato.php e entrar em contato, irei ajudar no que for possível para que o exemplo citado nos artigos possam resolver o problema de leitura/escrita serial.

 

Como idéia de artigos futuros penso em escrever alguns artigos sobre leitura e escrita de arquivos XLS, acompanhando as maiores dúvidas dos desenvolvedores Java, depois da comunicação serial percebi que muitos tem dúvidas ou não encontram material adequado sobre como manipular corretamente arquivos do Excel (XLS). Para isso existe uma API e estarei escrevendo sobre ela no próximo artigo.

 

Também gostaria de receber feedback dos leitores dos artigos sobre propostas para futuros artigos, fica aberto aqui um canal para vocês.

Leia também