Вы находитесь на странице: 1из 11

18/04/2016

ComunicaoSerialJavaArduinoEmbarcados

Junte-se a Comunidade Embarcados:

LOGIN

REGISTRAR-SE

Comunicao Serial
Java + Arduino

Incio / Arduino, Contedo, Placas, Software /


Comunicao Serial Java + Arduino

Por Klauder Dias | 14/02/2014 | Arduino, Contedo, Placas, Software

Sobre a comunicao Serial Java +


Arduino

Neste artigo demonstrarei como ligar e desligar um led,


atravs de comandos enviados pela porta serial (USB)
utilizando Java e uma placa Arduino.

Para ler outro artigo que aborda a comunicao serial clique


aqui para ler o artigo de Fbio Souza, e caso queira saber
mais sobre programao no arduino clique aqui.

Mas por que utilizar Universal Serial Bus (USB)?

http://www.embarcados.com.br/comunicacaoserialjavaarduino/

Posts
Recentes
Trazendo o
mundo real
para dentro
do processador Condicionamento de
sinais analgicos Parte 3
01/04/2016

Integrando Aplicaes
em Imagens Linux
1/11

18/04/2016

ComunicaoSerialJavaArduinoEmbarcados

A comunicao USB uma tecnologia que tornou mais


simples e rpida a conexo de diversos tipos de aparelhos
(Pendrives,MP3-players,
impressoras,
celulares,
HDs
externos, etc). Alm de facilitar a conexo de diversos
dispositivos, o padro USB oferece:

Plug-and-play: a maioria dos dispositivos so


reconhecidos automaticamente;
Alimentao: os dispositivos no precisam ser ligados a
uma fonte de energia externa, j que a prpria USB
fornece energia. (Lembrado a USB fornece no mximo 5
Volts e 500 mA de corrente);
Mltipla conexo: vrios dispositivos podem ser
conectados atravs de uma nica porta, mas para isso
deve-se utilizar um Hub;
Compatibilidade: so compatveis com a maioria dos
sistemas operacionais disponveis no mercado.

A comunicao entre os sistemas embarcados e os


computadores muitas vezes so realizadas via porta paralela
(DB25) e porta serial (DB-9). A utilizao desses meios de
comunicao pode facilitar uma alterao futura mas, por
outro lado, dependendo do dispositivo, a implementao do
software no computador pode ser complexa e trabalhosa.
Alm do mais, podemos danificar permanentemente a placa
me do computador quando estamos utilizando a porta
paralela e ocorre uma descarga eltrica 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 tambm o Arduino Uno, ADK, Pro.

Embarcado
31/03/2016

Editorial:
Maker e o
profissional
30/03/2016

Entendendo
os ns do
ROS
29/03/2016

Socket no
Windows 10
IoT Core
usando Raspberry Pi
2
28/03/2016

Sries
A arte de especificar e
encontrar
componentes (2)
Boas prticas para o
desenvolvimento de
software (3)
Controlador VGA (2)
Device Drivers para
Linux Embarcado (5)
GNU ARM Crosstoolchain (7)
Monitoramento de

http://www.embarcados.com.br/comunicacaoserialjavaarduino/

2/11

18/04/2016

ComunicaoSerialJavaArduinoEmbarcados

gua com IoT (3)


Projetos de
desenvolvimento:
Antes de comear (1)
Shape The World (4)
Sistemas
Operacionais de
Tempo Real (4)
Trazendo o mundo
real para dentro do
processador (3)
ULWOS Multitarefa
no RL78 (3)

Oportunidades

Passo 01: Download dos arquivos

Acesse o site http://jlog.org/rxtx.html e faa 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: Instalao dos arquivos

Windows

Copie o arquivo rxtxSerial.dll para:


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

http://www.embarcados.com.br/comunicacaoserialjavaarduino/

Engenheiro e tcnico
eletrnico especialista
em CAN BUS e OBD-II
na CONFIDENCIAL So Paulo/SP
14/04/2016

Programador C
(embarcados) na
DECISION GROUP So Paulo/SP
23/03/2016

Desenvolvedor Linux
na Positivo
Informtica Curitiba/PR
21/03/2016

Engenheiro Eletrnico
para Hardware e
Firmware na Treetech
Sistemas Digitais
Ltda. - Atibaia/SP
09/03/2016

Estgio e Trainee em
3/11

18/04/2016

ComunicaoSerialJavaArduinoEmbarcados

Copie o arquivo RXTXcomm.jar para:

Sistemas Embarcados

C:\Program Files\Java\jre\jrex\lib\ext, onde x a verso


do JRE, por exemplo C:\Program Files\Java\jre7\lib\ext.

Linux

Copie o arquivo librxtxSerial.so para:

Mdicos na Braincare
Desenvolvimento e
Inovao Tecnolgica
- So Carlos/SP
04/03/2016

Mais oportunidades

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


/usr/lib/.

Divulgue sua
oportunidade

Copie o arquivo RXTXcomm.jar para:


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

cp

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 cdigo 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 aparea outra porta no tem
problema, desde que a porta correta seja informada no
programa em Java.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

int ledPin =13; //atribui o pino 13 a varivel ledPin


int dado; //varivel que receber os dados da porta serial

void setup(){
Serial.begin(9600);//frequncia da porta serial
pinMode(ledPin,OUTPUT); //define o pino o ledPin como sada
}

void loop(){
if(Serial.available() > 0){ //verifica se existe comunicao
com a porta serial
dado = Serial.read();//l os dados da porta serial
switch(dado){
case 1:
digitalWrite(ledPin,HIGH); //liga o pino ledPin
break;
case 2:
digitalWrite(ledPin,LOW); //desliga o pino ledPin
break;
}
}
}

http://www.embarcados.com.br/comunicacaoserialjavaarduino/

Mais
Procurados
altera

android

arduino

arduino UNO

ARM

ARM Cortex-M

ARM Cortex-M0+

Atmel

Avanado
Beaglebone Black

diy

Embedded
embedded linux
firmware

fpga

freescale

hardware

hdl

Iniciante

intel

4/11

18/04/2016

ComunicaoSerialJavaArduinoEmbarcados

Passo 04: Programa Java

intel edison
Intermedirio
internet das coisas
Linguagem C

Abra o programa NetBeans 7.4 criei um projeto Aplicao


Java (Arquivo > Novo Projeto > Java > Aplicao 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 (boto direito em cima
do pacote > Novo > Form Frame), e chame-o de JFInterface.

iot

linux

Linux Embarcado
maker

Microchip

microcontrolador
microcontroladores
pcb

PIC

placa de desenvolvimento
python
rtos

raspberry pi
sbc

sistemas embarcados
software
Texas Instruments
toradex
vhdl

verilog
Yocto

Na Paleta de controle de Swing (lado direito da tela), clique


em cima do boto e arraste para dentro do JFInterface. Aps
esse passo altere o nome da varivel jButtom1 para jBLenOn
e altere o texto do boto para Ligar. Basta clicar com o boto
direito em cima do boto e escolher as opes Editar Texto e
Alterar nome da varivel.

Copie mais 02 botes para o JFInterface e repita o mesmo


processo renomeando-os para ID: jBLenOff, jBClose e Text:
Desligar e Sair.

http://www.embarcados.com.br/comunicacaoserialjavaarduino/

5/11

18/04/2016

ComunicaoSerialJavaArduinoEmbarcados

Acrescente duas classes no projeto "Arduino.java e


ControlePorta.java" (boto direito em cima do pacote > Novo
> Classe Java.

No arquivo Arduino.java realizaremos o envio das


informaes para o Arduino e no arquivo ControlePorta.java
faremos toda a programao para enviar os dados atravs da
porta serial.

Adicione o cdigo abaixo no arquivo ControlePorta.java.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

package br.com.embarcados.comunicacaoserial;

import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.SerialPort;
import java.io.IOException;
import java.io.OutputStream;
import javax.swing.JOptionPane;

public class ControlePorta {


private OutputStream serialOut;
private int taxa;
private String portaCOM;

/**
* Construtor da classe ControlePorta
* @param portaCOM - Porta COM que ser utilizada para enviar os dados para o arduino
* @param taxa - Taxa de transferncia da porta serial geralmente 9600
*/
public ControlePorta(String portaCOM, int taxa) {
this.portaCOM = portaCOM;
this.taxa = taxa;
this.initialize();
}
/**
* Mdoto que verifica se a comunicao com a porta serial est ok
*/
private void initialize() {
try {
//Define uma varivel portId do tipo CommPortIdentifier para realizar a comunicao serial
CommPortIdentifier portId = null;
try {
//Tenta verificar se a porta COM informada existe
portId = CommPortIdentifier.getPortIdentifier(this.portaCOM
}catch (NoSuchPortException npe) {
//Caso a porta COM no exista ser exibido um erro
JOptionPane.showMessageDialog(null, "Porta COM no encontrada."
"Porta COM", JOptionPane.PLAIN_MESSAGE);
}
//Abre a porta COM
SerialPort port = (SerialPort) portId.open("Comunicao serial"
serialOut = port.getOutputStream();
port.setSerialPortParams(this.taxa, //taxa de transferncia da porta serial
SerialPort.DATABITS_8, //taxa de 10 bits 8 (envio)
SerialPort.STOPBITS_1, //taxa de 10 bits 1 (recebimento)
SerialPort.PARITY_NONE); //receber e enviar dados
}catch (Exception e) {
e.printStackTrace();
}

http://www.embarcados.com.br/comunicacaoserialjavaarduino/

6/11

18/04/2016

51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76

ComunicaoSerialJavaArduinoEmbarcados

/**
* Mtodo que fecha a comunicao com a porta serial
*/
public void close() {
try {
serialOut.close();
}catch (IOException e) {
JOptionPane.showMessageDialog(null, "No foi possvel fechar porta COM."
"Fechar porta COM", JOptionPane.PLAIN_MESSAGE);
}
}

/**
* @param opcao - Valor a ser enviado pela porta serial
*/
public void enviaDados(int opcao){
try {
serialOut.write(opcao);//escreve o valor na porta serial para ser enviado
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, "No foi possvel enviar o dado. "
"Enviar dados", JOptionPane.PLAIN_MESSAGE);
}
}
}

Aps adicionar o cdigo acima acontecer vrios erros


conforme a mensagem abaixo.

Esses erros aconteceram porque no adicionamos o arquivo


RXTXcomm.jar no nosso projeto. Para adicion-lo clique com
o boto direito em cima da pasta Biblioteca e escolha
Adicionar JAR/Pasta... e informe o diretrio 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 (boto direito em cima do projeto


ComunicacaoSerial > Limpar e Construir) e os problemas
sero corrigidos conforme pode-se ver na imagem abaixo.

Agora adicione o cdigo abaixo no arquivo Arduino.java.

http://www.embarcados.com.br/comunicacaoserialjavaarduino/

7/11

18/04/2016

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

ComunicaoSerialJavaArduinoEmbarcados

package br.com.embarcados.comunicacaoserial;

import javax.swing.JButton;

/**
* @author klauder
*/
public class Arduino {
private ControlePorta arduino;

/**
* Construtor da classe Arduino
*/
public Arduino(){
arduino = new ControlePorta("COM3",9600);//Windows - porta e taxa de transmisso
//arduino = new ControlePorta("/dev/ttyUSB0",9600);//Linux - porta e taxa de transmisso
}

/**
* Envia o comando para a porta serial
* @param button - Boto que clicado na interface Java
*/
public void comunicacaoArduino(JButton button) {
if("Ligar".equals(button.getActionCommand())){
arduino.enviaDados(1);
System.out.println(button.getText());//Imprime o nome do boto pressionado
}
else if("Desligar".equals(button.getActionCommand())){
arduino.enviaDados(2);
System.out.println(button.getText());
}
else{
arduino.close();
System.out.println(button.getText());//Imprime o nome do boto pressionado
}
}
}

Feito isso, falta implementar a ao a ser executada quando


um determinado boto for pressionado.
Abra o arquivo JFInterface.java, clique com o boto direito
em cima do boto Ligar e acione o mtodo MousedClicked.
Ser
um mtodo
dentro da classe
criado
automaticamente
O EMBARCADOS
CONTEDO EVENTOS
JFInterface.java conforme a imagem abaixo.

OPORTUNIDADES

COMUNIDADE

Declare uma varivel do tipo Arduino antes do construtor da


classe JFInterface, conforme a figura abaixo.

http://www.embarcados.com.br/comunicacaoserialjavaarduino/

8/11

18/04/2016

ComunicaoSerialJavaArduinoEmbarcados

Dentro
do
mtodo
jBLedOnMouseClicked
anteriormente
adicione
o
conn.comunicacaoArduino(jBLedOn).

criado
cdigo

Esse comando ir acionar o mtodo comunicacaoArduino(),


passando o boto clicado, que por sua vez ir enviar o dado
pela porta serial.

Gostou? Junte-se comunidade


96
0 para o boto
0
0
Adicione o mesmo
evento
Desligar
e coloque o
Embarcados
cdigo abaixo:

Adicione o mesmo evento para o boto Sair e coloque o


cdigo abaixo:

Passo 05: Executando o programa

Agora basta apenas conectar o seu Arduino porta USB do


http://www.embarcados.com.br/comunicacaoserialjavaarduino/

9/11

18/04/2016

ComunicaoSerialJavaArduinoEmbarcados

seu computador e clicar em Executar o projeto Java. Ao


aparecer a Tela, basta apenas clicar no boto "Ligar" para
ligar, "Desligar" para desligar o Led e Sair para encerrar
aplicao.

Os cdigos fontes utilizados na elaborao desse artigo


esto
disponveis
em:
https://github.com/klauder/ComunicacaoSerial

Espero que tenham gostado e at breve.

Referncias

http://jlog.org/rxtx.html
http://arduino.cc/en/Main/ArduinoBoardMega2560
http://arduino.cc/en/reference/serial

Comunicao Serial Java + Arduino por Klauder Dias. Esta


obra est sob a licena Creative Commons AtribuioCompartilhaIgual 4.0 Internacional.

Sobre o Autor: Klauder Dias


Ps-graduando em Gerenciamento de Projetos.
Graduado em Engenharia de Computao.
Atualmente
trabalha
com
Analista
de
desenvolvimento. Experincia em integrao de
sistemas (hardware/software) utilizando C++ e Java.

Postagens Relacionadas

http://www.embarcados.com.br/comunicacaoserialjavaarduino/

10/11

18/04/2016

ComunicaoSerialJavaArduinoEmbarcados

0Comentrios

Embarcados

Recommend

Compartilhar

Entrar

OrdenarporMelhoravaliado

Startthediscussion

Bethefirsttocomment.

Assinarfeed
AdicioneoDisqusnoseusiteAddDisqusAdd

Privacidade

INSTITUCIONAL

COMUNIDADE

SUPORTE

O Embarcados

Oportunidades

Frum

Os Articulistas

Lojas Online

PUBLICIDADE
ANUNCIE
CONOSCO

Categorias
Pergunta

Seja Colaborador

Sites e Blogs

Eventos

Eventos da
Comunidade

Contato
Enquetes

Tags
Mapa do Site

FIQUE
CONECTADO!

Embarcados - Todos os Direitos Reservados | Desenvolvido por Ames Digital

Este site utiliza cookies. Ao us-lo voc concorda com nossa poltica de
privacidade. Saiba mais.

http://www.embarcados.com.br/comunicacaoserialjavaarduino/

Continuar

11/11

Вам также может понравиться