Conexão Bluetooth Android Parte 01: Estrutura Inicial

Olá! Esta é a primeira parte de um artigo sobre como desenvolver uma conexão entre um computador utilizando Java e um dispositivo Android. Java? Sim, Java. Eu não posso negar que gosto e admiro algumas características da linguagem e sua estruturação.

Apresentação

Este artigo não vai explicar o que é uma conexão Bluetooth ou quais as camadas de rede ela utiliza. Basicamente, vamos ver como podemos criar um servidor Bluetooth em qualquer máquina que possua instalado uma JRE e possivelmente algumas bibliotecas externas, como a BlueZ no Ubuntu. Após, será apresentado como criar um pequeno aplicativo que conecte neste servidor no Android.

Também informo que alguns dados estão em inglês, principalmente porque meu Sistema Operacional foi instalado nesta linguagem e que meu Sistema Operacional é o Ubuntu 11.04 Natty Narwhal. Estou utilizando o Eclipse Indigo para desenvolvimento e a versão do Java é a 1.6.0_26.

Introdução

O presente documento é resultado da pesquisa de como criar um Apresentador de Slides para Android que utilize uma conexão Bluetooth com uma máquina local, fruto da disciplina de Programação para Dispositivos Móveis do primeiro semestre do ano atual.

O Java não possui uma biblioteca nativa para conexão Bluetooth, somente uma especificação, possivelmente para manter a portabilidade. Portabilidade define as características que uma linguagem de programação possui semelhantes entre várias arquiteturas de computador, como o tamanho de memória para alocar determinado tipo de dado. Ora, se o Java sempre utiliza a mesma máquina virtual para ser executado, porque ele é considerado uma linguagem portável?

Bibliotecas Necessárias

Além de um bom ambiente de desenvolvimento, vamos precisar de algumas bibliotecas adicionais ao Java para criar uma conexão Bluetooth na máquina local. Obviamente, você também irá precisar de um trasmissor Bluetooth devidamente instalado.

Vamos utilizar a biblioteca Bluecove para criar um serviço de conexão Bluetooth. Também vamos utilizar para desenvolvimento o ambiente Eclipse, mas também será possível a utilização de outras interfaces, como Netbeans.

Simplesmente devemos efetuar o download de dois arquivo JAR que possuem a biblioteca Bluecove. Quando este artigo foi desenvolvido, a versão atual era a 2.1.0 e pode ser adquirida acessando a página oficial do Bluecove no SourceForge. Você vai precisar dos arquivos, o bluecove-2.1.0.jar e bluecove-gpl-2.1.0.jar. Particularmente, acho interessante que coloque estes arquivos num diretório especial, dentro de seu home. Eu vou armazená-los dentro do diretório ~/Apps/jars.

Novo Projeto

Vamos criar um novo projeto Java no Eclipse com o nome BluetoothServer. Acesse as propriedades do projeto através do menu File - Properties, entre no menu Java Build Path. Acesse a aba Libraries e adicione os arquivos JAR do Bluecove acessando a opção Add External JAR, conforme o exemplo abaixo.

Propriedades do Projeto

Propriedades do Projeto com Bluecove

Agora vamos criar uma pequena classe de exemplo que irá trabalhar como um servidor Bluetooth e que poderá receber uma conexão de qualquer outro dispositivo.

Estrutura Inicial

Vamos adicionar uma nova classe chamada Server com um nome de pacote qualquer. Neste caso, o pacote utilizado será o endereço oficial do autor. Após, vamos tornar a classe executável implementando a interface Runnable. O método run receberá a lógica de abertura de conexão. Também vamos adicionar um método principal main para abertura do serviço. Teremos a seguinte estrutura de classe.

package br.nom.camargo.wanderson.bluetooth.server;

/**
 * Servidor Bluetooth
 * @author Wanderson Henrique Camargo Rosa
 */
public class Server implements Runnable {
	/**
	 * Fluxo de Execução Principal
	 */
	public void run() {
		// Serviço de Conexão Bluetooth
	}
	/**
	 * Execução Principal do Aplicativo
	 * @param args Argumentos de Execução
	 */
	public static void main(String args[]) {
		Server server = new Server();
		server.run();
	}
}

Com esta estrutura inicial, vamos criar um servidor capaz de receber uma conexão Bluetooth através de qualquer outro dispositivo. O servidor será desenvolvido no próximo artigo desta sequência, interno ao método run.

Considerações Finais

O desenvolvimento de aplicativos para dispositivos móveis é muito interessante, principalmente usufruindo dos recursos internos destes, como acelerômetro e GPS.

Com a necessidade de compra de um Apresentador de Slides para utilização em palestras e seminários, tive a idéia de criar um aplicativo que enviasse informações de um Android para a máquina local, onde esta iria processar a solicitação e navegar no documento que está sendo exibido atualmente. Uma pequena idéia que tem muito utilidade.

Este é o primeiro documento da série sobre como criar uma conexão Bluetooth entre dispositivo Android e um computador, utilizando Java e Bluecove. Você pode conferir o desenvolvimento do servidor Bluetooth no próximo artigo.

Leia mais em…

Artigos Relacionados:

27 Responses to “Conexão Bluetooth Android Parte 01: Estrutura Inicial”

  1. Diego Marino said:

    nov 02, 11 at 13:20

    Wanderson, que artigo incrível! Muito bem explicado, detalhado, tudo! Era exatamente o que eu estava necessitando também. Até o sistema operacional e a IDE que uso são as mesmas!
    =D
    Obrigado cara!

  2. Wanderson said:

    nov 03, 11 at 08:40

    Olá! Obrigado pelo retorno. Este artigo foi uma das minhas primeiras idéias aplicadas na faculdade que eu consegui colocar aqui detalhadamente. Estas explicações são o básico de um controle remoto Bluetooth para computadores que eu desenvolvi, porém ainda sem código aberto e meio ruim de manutenção. Quando eu conseguir retomar o projeto, pretendo melhorá-lo e abrir o código. Abraços!

  3. Rafael said:

    jan 22, 12 at 01:01

    Olá.
    Esse trabalho você desenvolveu por conta própria ou foi algum trabalho que deveria ser desenvolvido para a disciplina?
    Em relação a disciplina, quais os conteúdos e como que eram abordados tais assuntos?

  4. Wanderson said:

    jan 22, 12 at 12:23

    Quando eu comecei a palestrar, sempre senti falta de um apresentador de slides. Quando fui consultar o preço, fiquei apavorado: cerca de R$100,00 pelo mais simples, nas lojas de tecnologia da região. Sempre pensei que eu possuindo algum hardware que efetuasse uma conexão com meu computador, eu conseguiria criar meu aplicativo para fazer o mesmo serviço. Quando comecei a disciplina de Programação para Dispositivos Móveis no meu curso da Graduação, coloquei em mente que iria desenvolvê-lo. Não foi o trabalho final da disciplina, porém consegui fazer o meu aplicativo.

    A disciplina era bem focada na programação para smartphones e tablets. Com um ciclo de 2 semanas, efetuávamos estudos em uma plataforma diferente, totalizando 7 diferentes Sistemas Operacionais, entre eles Android, iOS e Symbian. Foi uma matéria bem massiva de trabalhos, porém com alto grau de aprendizado.

    Espero ter respondido sua questão!

  5. Ueslei Barroso said:

    fev 13, 12 at 01:43

    Olá Wanderson! Primeiramente parabéns pelo seu post, tem me ajudado bastante a desenvolver meu conhecimento a cerca de Java para android. Mas tenho algumas dúvidas que acredito que vc poderá sanar. É o seguinte, eu trabalho com eletrônica e comprei um módulo bluetooth para usar com microcontrolador, eu quero me comunicar com ele utilizando android, porém tenho minhas dúvidas com relação a questão de Servidor e Cliente, por exemplo, se eu fizer um programa para Servidor no android eu tenho que colocar uma UUID certo? No outro dispositivo preciso colocar a mesma UUID sempre? Estou perguntando isso, pois meu módulo bluetooth não tem essa opção de inserir UUID por comando AT, então acredito que ele funcione semelhante a dispositivos como fone de ouvido e etc.
    Desde já agradeço pela ajuda, até mais!

  6. Wanderson said:

    fev 13, 12 at 12:46

    Olá Ueslei,

    Olha, eu não sei dizer isso com certeza. Qual o microcontrolador e módulo que está utilizando? Eu não entendo muito de eletrônica, mas posso ajudar. Perguntei aqui com um colega de empresa e ele disse que não vê o UUID necessário para uma conexão Bluetooth, porém também disse que o teu módulo possivelmente já tem um UUID fixo.

    Peço desculpas mas não sei dar uma resposta ao certo. Creio que com mais informações podemos ajudá-lo. Outra coisa, verifique o endereço http://goo.gl/5s72K se não ajuda em algo.

    Abraços!

  7. Ueslei Barroso said:

    fev 13, 12 at 13:33

    Valeu Wanderson, ajudou bastante sim, apenas queria uma luz de alguém mais experiente nesse tipo de comunicação. O que eu quero fazer a principio de testes é enviar uma String para esse meu módulo bluetooth (Bluetooth/Serial) e ele enviar ao microcontrolador para acionar alguma coisa. Então, com essa informação do seu amigo, eu vou tentar escrever um código sem utilizar uma UUID e conectar com ele. Qualquer coisa e novidades a cerca do funcionamento eu posto aqui tah ok? Até mais!

    Ah, esqueci de falar que o microcontrolador que estou usando é um ATMEGA que vem em uma plataforma chamada Arduino, acho que vc já ouviu falar. E o módulo bluetooth é um AUBTM 22, tem vários desse tipo no mercado, ele converte Bluetooth para serial(Rx/Tx) para se comunicar com microcontrolador que tem portas UART. Até mais Wanderson. Obrigado mesmo pela ajuda!

  8. Wanderson said:

    fev 22, 12 at 21:51

    Oi Ueslei!

    Creio que você utilizar comunicação comparando strings vai ser meio complicado, principalmente pela codificação de texto que pode ser diferente entre servidor e cliente. Uma das soluções mais simples é enviar um inteiro, mas mesmo assim podemos ter diferenças em tamanho de palavra entre as duas arquiteturas, ou orientação de bytes. Programação de baixo nível é punk!

    Com esses dados eu vou entrar em contato com meu colega. Ele tem um Arduino. Estou perguntando no Twitter para outro colega se ele já fez algum tipo de conexão e se pode nos ensinar alguma coisa. Fica no aguardo!

    Abraços!

  9. Rafael said:

    mar 02, 12 at 22:49

    Olá Wanderson.

    Você possui algum tutorial de instalação do Java ME, estou precisando para a disciplina que estou cursando na faculdade, mas não estou conseguindo instalar corretamente. Se você tiver um material de estudo eu também ficaria grato se pudesse compartilhar.

    Abraços

  10. Ueslei Barroso said:

    mar 04, 12 at 16:16

    Olá Wanderson!
    A parte de programação em C para o tratamento do caractere de entrada está ok, para teste usei o aplicativo S2 bluetooth, que funciona como um terminal bluetooth no android. Tem um exemplo aqui: http://www.youtube.com/watch?v=hWUSloIi6gg
    O que eu queria fazer é algo um pouco mais complexo, mas basicamente é essa a ideia, criar um interface para mandar caracteres pro módulo bluetooth. A parte da interface e tranquilo, no que estou me batendo mesmo é com a parte da conexão bluetooth. Até mais Wanderson! Valew!

  11. Ueslei Barroso said:

    mar 05, 12 at 20:29

    Wanderson, me tire mais uma dúvida. Eu fiz esse mesmo programa exatamente como vc está ensinando, só que quando eu o Apk para o meu android ele não rola, nem abre. Será que é por que não tinha um servidor previamente conectado a ele?
    Até mais Wanderson. Obrigado!

  12. Wanderson said:

    mar 06, 12 at 20:56

    Rafael, vou te mandar um documento que escrevi para uma disciplina da faculdade, quem sabe ele ajude em alguns pontos de instalação e programação. Particularmente, não tenho muitas coisas para instalação de ambiente, porém creio que o documento ajude. Abraços!

  13. Wanderson said:

    mar 06, 12 at 21:03

    Oi Ueslei! Legal! Só cuide mesmo quando existem trocas de arquiteturas, como por exemplo um ambiente com binários processados da posição maior para menor. Tu podes conferir algo na Wikipedia http://en.wikipedia.org/wiki/Endianness Abraços!

  14. Wanderson said:

    mar 06, 12 at 21:05

    Tentou verificar o que o debugging do Android está aparecendo? Verifique se não existe um NullPointerException da vida aparecendo por ali. Abraços!

  15. Fernando said:

    mar 28, 12 at 13:10

    Ueslei, estou fazendo algo bem parecido com arduino, tmb estou tendo o mesmo que vc, meu programa não funciona, vc conseguiu algum sucesso com seu?

    Wanderson vc poderia me ajudar em algo, queria enviar uma string ao me microcontrolador, já consegui fazer ele funcionar enviando por bluetooth pelo computador, mas o programa foi feito no visual basic com a liguagem dele usando protocolo de porta serial, daí bastava eu colocar o bluetooth do dispositivo(microcontrolador com um módulo bluetooth) com uma COM e enviar os dados. Mas agora queria usar um tablet ou celular para fazer isso, o problema é que não consigo fazer o programa rodar, nem mesmo usando o seu programa sem modificar nada funciona.

  16. Wanderson said:

    jul 13, 12 at 00:05

    Precisas que o servidor ou o cliente seja instalado no tablet?

  17. Junior Cesar said:

    out 18, 12 at 15:31

    Olá Wanderson, parabéns pelo artigo, muito boa didática e e explicando os detalhes que são fundamentais.

    Estou desenvolvendo uma aplicação cliente que será um aplicativo Android que enviará informações para um computador remoto via bluetooth.

    Meu sistema operacional para desenvolver o aplicativo servidor é Windows 7 e fiquei em dúvida aos .jars que devo utilizar no projeto.

    bluecove-2.1.0.jar e bluecove-gpl-2.1.0.jar

    Este bluecove-gpl é apenas para Linux?

    O que seriam estes dois .jars?

    Desde já obrigado pela ajuda.

  18. Wanderson said:

    out 18, 12 at 22:39

    Obrigado! Esta sequência de artigos visa exibir isto mesmo: informações simples para iniciantes. Agradeço seu retorno.
    Quanto ao bluecove-gpl, não lembro se ele trabalha somente com Linux, pois escrevi este tutorial há algum tempo. Porém, visitando agora a página oficial, creio que esta informação seja verdadeira, pois eles informam que o bluecove normal trabalha com Windows e o gpl para execução no bluez no Linux. Além disso, se descompactarmos o jar podemos ver que o bluecove possui DLLs armazenadas, relativas ao Windows e, no bluecove-gpl, SOs que pertencem ao Linux.
    Abraços!

  19. Niltomar said:

    jan 24, 13 at 10:48

    Queria te parabenizar pelo excelente trabalho, é incrível pessoas como você compartilhar artigos tão bem feitos, parabéns.
    Seguindo seu artigo consegui fazer uma aplicação, no entanto, quando construo o projeto no netbeans, ou seja, gero (.jar) aparece a seguinte mensagem “Bluecover libaries is not avaliable”, tem alguma sugestão para resolver o problema? obs: no netbeans funciona perfeitamente. Ficarei grato!

  20. Wanderson said:

    jan 24, 13 at 13:38

    Possivelmente ele não está encontrando as bibliotecas do Bluecove dentro do JAR. Já verificaste o PATH de inclusão? No Eclipse existe essa opção, além de possibilitar a construção de um pacote executável. Abraços!

  21. Niltomar said:

    jan 24, 13 at 16:14

    Olá Wanderson,resolvi o problema, aconteceu que meu JDK era 64bits e aquela biblioteca bluecover não tinha suporte, para corrigir esse problema tiver que baixar as bibliotecas do Bluecover atualizada para essa versão (bluecove-2.1.1-SNAPSHOT.jar) e (bluecove-gpl-2.1.1-SNAPSHOT.jar), e o problema foi solucionado. Abraço!

  22. Jessica Onu said:

    dez 09, 13 at 15:20

    Olá Wanderson! Parabéns pelo seu post, muito util e interesante.
    Sou estudante de Engenharia de Computação e estou desenvolvendo um app em Android para monitorar os batimentos cardíacos, onde ele irá se comunicar com Transmissor Polar WearLink with Bluetooth. Só que estou tendo problema em como fazer com que o app receba esses dados, informações vinda via Bluetooth do apareslho que citei acima para ser mostrado na tela do aplicativo, ou seja, os batimentos cardíacos. Você tem alguma ideia de como eu faço isso na parte de programação? Como pego os dados do Bluetooth?
    Desde já agradeço pela atenção.

  23. Wanderson said:

    dez 09, 13 at 21:16

    Oi Jessica! Ele tem algum manual ou driver que possamos verificar como fazemos a conexão?

  24. Jessica Onu said:

    dez 11, 13 at 19:18

    Oi Wanderson! Obrigada por responder.
    Então não veio nenhum driver, só o próprio aparelho mesmo. Vou te mandar o link do manual do produto.

  25. Wanderson said:

    dez 11, 13 at 22:28

    Opa! Pois é, este manual não possui informações técnicas de como podemos conectar. Eu encontrei algumas coisas na Internet. Creio que a conversa será longa, então vamos continuar por e-mail. Abraços!

  26. Antunes said:

    fev 12, 14 at 16:11

    Oi Wanderson, primeiramente quero deixar aqui os parabéns pelo conteúdo do seu Site. Sou estudante de Sistemas de Informação pela Universidade Federal do Rio Grande do Norte, irei utilizar o artigo para estudo da Plataforma Arduino juntamente com uso do AppAndroid. Irei adaptar este ao meu, lembrando que este usa uma aplicação Java e irei utilizar o Arduino para essa finalidade. Se tivesse como conseguir o projeto Android ficaria muito agradecido. Abraço!

  27. Wanderson said:

    fev 13, 14 at 11:45

    Opa!

    O projeto está no último artigo da série.

    Boa sorte!

    http://www.wanderson.camargo.nom.br/2011/08/conexao-bluetooth-android-parte-06-final-enviando-informacoes/

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *


4 × sete =

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>