80 Comentários

Comunicação Serial Java + Arduino

comunicação serial java Arduino

Sobre a comunicação Serial Java + Arduino

Neste artigo demonstrarei como ligar e desligar um led, através de comandos enviados pela porta serial (USB) utilizando Java e uma placa Arduino.  

Para ler outro artigo que aborda a comunicação serial clique aqui para ler o artigo de Fábio Souza, e caso queira saber mais sobre programação no Arduino clique aqui.

Mas por que utilizar Universal Serial Bus (USB)?

A comunicação USB é uma tecnologia que tornou mais simples e rápida a conexão de diversos tipos de aparelhos (Pendrives,MP3-players, impressoras, celulares, HDs externos, etc). Além de facilitar a conexão de diversos dispositivos, o padrão USB oferece:

  • Plug-and-play: a maioria dos dispositivos são reconhecidos automaticamente;
  • Alimentação: os dispositivos não precisam ser ligados a uma fonte de energia externa, já que a própria USB fornece energia. (Lembrado a USB fornece no máximo 5 Volts e 500 mA de corrente);
  • Múltipla conexão: vários dispositivos podem ser conectados através de uma única porta, mas para isso deve-se utilizar um Hub;
  • Compatibilidade: são compatíveis com a maioria dos sistemas operacionais disponíveis no mercado.

A comunicação entre os sistemas embarcados e os computadores muitas vezes são realizadas via porta paralela (DB25) e porta serial (DB-9).  A utilização desses meios de comunicação pode facilitar uma alteração futura mas, por outro lado, dependendo do dispositivo, a implementação do software no computador pode ser complexa e trabalhosa. Além do mais, podemos danificar permanentemente a placa mãe do computador quando estamos utilizando a porta paralela e ocorre uma descarga elétrica ou invertermos a polaridade de um componente.

Esse artigo foi elaborado utilizado o Arduino Mega 2560, NetBeans 7.4, Windows 7 Professional x64 e Ubuntu 12.04 LTS (x64), estou considerando que as IDE's Arduino 1.0.5 ou superior e NetBeans 7.4 ou superior já estejam instaladas e funcionando corretamente.

Obs.: Pode-se utilizar também o Arduino Uno, ADK, Pro. 

Layout projeto

Passo 01: Download dos arquivos

Acesse o site e faça download dos arquivos rxtxSerial.dll, librxtxSerial.so e RXTXcomm.jar.

Obs.: Lembrando de que devemos fazer download dos arquivos de acordo a arquitetura do sistema operacional 32-bits (x86) ou 64-bits (x64).

Passo 02: Instalação dos arquivos

Windows

      Copie o arquivo rxtxSerial.dll para:

  • C:\Program Files\Java\jdkx.x.x\bin, onde x.x.x é a versão do JDK, por exemplo C:\Program Files\Java\jdk1.6.40\bin;
  • C:\Program Files\Java\jrex\bin,  onde x é a versão do JRE, por exemplo C:\Program Files\Java\jre7\bin;
  • C:\Windows\System32;
  • C:\Windows\SysWOW64 (caso sistema operacional 64-bits (x64)).

     Copie o arquivo RXTXcomm.jar para:

  • C:\Program Files\Java\jre\jrex\lib\ext, onde x é a versão do JRE, por exemplo C:\Program Files\Java\jre7\lib\ext.

Linux

      Copie o arquivo librxtxSerial.so para:   

  • /usr/lib/, exemplo: cp /home/Usuario/librxtxSerial.so /usr/lib/.

      Copie o arquivo RXTXcomm.jar para:

  • /usr/share/java/, exemplo.: cp /home/Usuario/RXTXcomm.jar /usr/share/java/.

Passo 03: Programa Arduino

Conecte o cabo USB no Arduino e abra a IDE do Arduino, defina a porta COM (Tools > Serial Port > COM3 ou /dev/ttyUSB0), digite o código abaixo e depois clique no upload. Pronto, o programa já foi carregado no arduino. 

Obs.: Geralmente utiliza-se a porta COM3 (Windows) e /dev/ttyUSB0 (Linux), caso apareça outra porta não tem problema, desde que a porta correta seja informada no programa em Java.

Passo 04: Programa Java

Abra o programa NetBeans 7.4 criei um projeto Aplicação Java (Arquivo > Novo Projeto > Java > Aplicação Java) e vamos chamá-lo de ComunicacaoSerial.

Renomeie o pacote "comunicacaoserial" para "br.com.embarcados.comunicaoserial" e depois apague a classe ComunicacaoSerial.java que foi gerada. 

Feito isso, adicione um JFrame no pacote br.com.embarcados.comunicaoserial (botão direito em cima do pacote > Novo > Form Frame), e chame-o de JFInterface.

Novo JFrame

Na Paleta de controle de Swing (lado direito da tela), clique em cima do botão e arraste para dentro do JFInterface. Após esse passo altere o nome da variável jButtom1 para jBLenOn e altere o texto do botão para Ligar. Basta clicar com o botão direito em cima do botão e escolher as opções Editar Texto e Alterar nome da variável. 

Copie mais 02 botões para o JFInterface e repita o mesmo processo renomeando-os para ID: jBLenOff, jBClose e Text: Desligar e Sair.

Interface Renomeada

Acrescente duas classes no projeto "Arduino.java e ControlePorta.java" (botão direito em cima do pacote > Novo > Classe Java.

No arquivo Arduino.java realizaremos o envio das informações para o Arduino e no arquivo ControlePorta.java faremos toda a programação para enviar os dados através da porta serial.

Adicione o código abaixo no arquivo ControlePorta.java.

Após adicionar o código acima acontecerá vários erros conforme a mensagem abaixo.

Esses erros aconteceram porque não adicionamos o arquivo RXTXcomm.jar no nosso projeto. Para adicioná-lo clique com o botão direito em cima da pasta Biblioteca e escolha Adicionar JAR/Pasta... e informe o diretório onde o arquivo RXTXcomm.jar (C:\Program Files\Java\jre7\lib\ext\RXTXcomm.jar, caso esteja utilizando Windows) ou (/usr/share/java/ RXTXcomm.jar, caso esteja utilizando Linux).

Limpe e construa o projeto (botão direito em cima do projeto ComunicacaoSerial > Limpar e Construir) e os problemas serão corrigidos conforme pode-se ver na imagem abaixo.

Erro import gnu.io (corrigido)

Agora adicione o código abaixo no arquivo Arduino.java.

Feito isso, falta implementar a ação a ser executada quando um determinado botão for pressionado.

Abra o arquivo JFInterface.java, clique com o botão direito em cima do botão “Ligar” e acione o método MousedClicked. Será criado automaticamente um método dentro da classe JFInterface.java conforme a imagem abaixo.

Código gerado para o LedOnClicked

Declare uma variável do tipo Arduino antes do construtor da classe JFInterface, conforme a figura abaixo.

Declaração da variável

Dentro do método jBLedOnMouseClicked criado anteriormente adicione o código conn.comunicacaoArduino(jBLedOn).

LedOnClicked com ação

Esse comando irá acionar o método comunicacaoArduino(), passando o botão clicado, que por sua vez irá enviar o dado pela porta serial.

Adicione o mesmo evento para o botão “Desligar” e coloque o código abaixo:

LedOffClicked

Adicione o mesmo evento para o botão “Sair” e coloque o código abaixo:

CloseClicked

Passo 05: Executando o programa

Agora basta apenas conectar o seu Arduino à porta USB do seu computador e clicar em Executar o projeto Java. Ao aparecer a Tela, basta apenas clicar no botão "Ligar" para ligar, "Desligar" para desligar o Led e “Sair” para encerrar aplicação.

Os códigos fontes utilizados na elaboração desse artigo estão disponíveis nesse link.

Espero que tenham gostado e até breve. 

Referências

 

http://jlog.org/rxtx.html
http://arduino.cc/en/Main/ArduinoBoardMega2560
http://arduino.cc/en/reference/serial
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Arduino » Comunicação Serial Java + Arduino
Comentários:
Notificações
Notificar
guest
80 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Gabriel Lucas
Gabriel Lucas
21/02/2019 11:41

Eu fiz o mesmo procedimento no Eclipse, porém ele nao reconhece a
import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.SerialPort;
e o arquivo RXTXcomm.jar ja está adicionado na JRE System Librar. Se puder ajudar, por favor, será de grande ajuda !

Gabriel
Gabriel
13/04/2018 16:43

Excelente tutorial, porém quando executo o programa aparece que a porta COM não pode ser encontrada. Estou usando um Arduíno Nano e meu Sistema Operacional é o Linux Mint 18.3 xfce. Não entendo porquê não está encontrando.

Klauder Dias
Klauder Dias
Reply to  Gabriel
21/02/2019 06:35

Gabriel, desculpe a demora em responder.

Imagino que isso possa ser alguma configuração da porta COM, já tentou rodar em outro SO, PC para ver si não é um problema da porta COM desse PC? Se possível teste outros tutorial que utilizem a porta COM, para ter certeza que ele esteja bem.

Aguardo seu retorno.

Diego Siqueira Menezes
Diego Siqueira Menezes
31/03/2016 20:54

Olá amigão, primeiramente gostaria de Agradecer Pela SUA Iniciativa em transmitir o Conhecimento.

Bom Vamos Lá, DEPOIS de ler ESSE Passo a Passo Varias vezes eu consegui executar o Projeto Dentro do netbeans ...

Agora when tento abrir o Arquivo .jar Que se Encontra Dentro da dist massas, Funciona nada ...

Andei pesquisando e me parece Ser algo com a principal classe ...

Bom Não Sei Como Change ...

Se Alguém Além do Klauder Puder me Ajudar agradeço !!!

Diego Siqueira Menezes
Diego Siqueira Menezes
31/03/2016 20:28

Olá amigão, primeiramente gostaria de agradecer pela sua iniciativa em transmitir o conhecimento.
Bom vamos lá, depois de ler esse passo a passo várias vezes eu consegui executar o projeto dentro do netbeans...

Agora quando tento abrir o arquivo .jar que se encontra dentro da pasta dist, nada funciona...

Andei pesquisando e me parece ser algo com a classe principal...

Bom não sei como alterar...

Se alguém além do Klauder puder me ajudar agradeço!!!

Artur Dos Reis D'Angelo
Artur Dos Reis D'Angelo
14/02/2016 20:25

Amigo, como faço para enviar uma String para o arduino a partir do seu código?

gabriel josman
gabriel josman
02/12/2015 16:05

Ola Klauder, poderia fazer um projeto em que você receba dados da porta serial e imprima em um arquivo.txt ou se melhor logo para o Excel, poderia variar utilizando um microcontrolador(já que esse está em falta na internet).
Obrigado desde já! Aguardo respostas.

Wesley Faria
Wesley Faria
25/10/2015 01:52

Parabéns!! Ótimo Tututorial!

Henrique Cunha
Henrique Cunha
23/10/2015 15:20

Estou com o seguinte problema:

java.lang.UnsatisfiedLinkError: C:Program FilesJavajdk1.8.0_31binrxtxSerial.dll: %1 não é um aplicativo Win32 válido thrown while loading gnu.io.RXTXCommDriver

Exception in thread "Sistema Code Control" java.lang.UnsatisfiedLinkError: C:Program FilesJavajdk1.8.0_31binrxtxSerial.dll: %1 não é um aplicativo Win32 válido

at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1937)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1855)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1119)
at gnu.io.CommPortIdentifier.(CommPortIdentifier.java:123)
at code.control.observer.arduino.ControlePorta.initialize(ControlePorta.java:35)
at code.control.observer.arduino.ControlePorta.(ControlePorta.java:23)
at code.control.observer.arduino.Desbloqueio.executa(Desbloqueio.java:9)
at code.control.observer.Autenticador.lambda$0(Autenticador.java:36)
at code.control.observer.Autenticador$$Lambda$157/1592347142.accept(Unknown Source)
at java.util.Vector$VectorSpliterator.forEachRemaining(Vector.java:1414)
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
at code.control.observer.Autenticador.atualizar(Autenticador.java:31)
at code.control.observer.Sistema.notificarObservadores(Sistema.java:53)
at code.control.qr.aciona.LeitorQR.run(LeitorQR.java:105)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Alguém pode me dar uma luz?

Romario Dias
Romario Dias
26/08/2015 10:37

Ola Klauder queria saber com faço para enviar comandos não para um arduino mas para um modem GSM. E receba sinal do modem. Obrigado

Rafinha Parenza
Rafinha Parenza
15/08/2015 16:33

se eu faço o inverso e conecto primeiro o arduino e depois o java ele fica executando conexão serial run. e fica e a barrinha nunca sobe

Talvez você goste:

Séries

Menu

WEBINAR
 

Soluções inteligentes para acionamento de MOSFETs/IGBTs com família STDRIVE

Data: 08/10 às 15:00h - Apoio: STMicroelectronics
 
INSCREVA-SE AGORA »



 
close-link