O Android 3.1 possui o Android Open
Accessory que permite a conexão de um hardware via cabo USB ao aparelho com Android. A
Google também portou esta funcionalidade para o Android 2.3.4, mas não há
garantias que um aparelho com Android 2.3.x tenha esta funcionalidade ativa
(isto é uma opção do fabricante), sendo assim considere que a versões 3.1 em
diante que possuem o Android Open Accessory.
O objetivo deste post é apresentar um passo-a-passo sem explicações teóricas, de maneira que o interessado no assunto possa utilizar o ADK (Accessory Development Kit) sem necessariamente entender os conceitos. Para informações profundas consulte: Android Open Accessory Development Kit.
Equipamentos necessários
Tablet com Android 3.1 (ou superior), nós
usamos o Motorola XOOM e o Toshiba Thrive:
Preparação do Ambiente de desenvolvimento
Efetue login com usuário que possua
direitos de Administrador no Windows
Instalação do Eclipse
Faça o download do Eclipse Classic:
Descompacte o Eclipse que você fez o
download, e copie a pasta para o C:\Android, ficando assim:
Obs: O importante neste passo é que o
Eclipse seja copiado para uma pasta que outros usuários do Windows tenham
direitos de gravação.
Faça o download e instale o JDK - Java DevelopmentKit
Faça
o download e instale o Android SDK:
Instalação
do ADT PlugIn, execute o Eclipse.exe:
detalhes em ADT Plugin for Eclipse
https://dl-ssl.google.com/android/eclipse/
Depois
do Eclipse reiniciar, irá surgir a seguinte tela, configure o Existing Location
com caminho onde você instalou o Android SDK:
Validando
a instalação:
Importante: Use Google APIs (Google Inc.) - API Level 10
Espere...
Vai
aparecer o Hello World:
Instalação
OK!
ADK – DemoKit
Faça
o download do ADK package.
Descompacte o arquivo adk_release_0512.zip que você fez o download, e copie a pasta app para
o C:\Android, ficando assim:
Considerando
que o emulador estava fechado irá surgir a seguinte tela:
O
DemoKit original apresenta 8 warnings, que não afetam o funcionamento.
Pronto,
a parte Java no Eclipse está OK.
Exportando o .apk
Vamos
exportar o instalador .apk
Usei
a senha teste123
Pronto,
agora copie e instale o DemoKitLaunch.apk no seu dispositivo (eu usei o tablet
Motorola XOOM) é importante que tenha o Android 3.0 ou superior. No caso do
Android 2.3.4, normalmente somente os smartphones Nexus que suportam o Open
Accessory.
Vamos
configurar a Arduino Mega ADK e depois executar a aplicação.
Preparação do
Ambiente de Desenvolvimento Arduino
Faça
download da IDE do Arduino.
outras versões em: http://arduino.cc/en/Main/Software
Descompacte
o arquivo arduino-1.0-windows.zip e copie a pasta arduino-1.0 para C:\Android,
ficando assim:
Conecte a Arduino ADK ao seu computador usando
um cabo USB A/B, cuidado a placa Arduino ADK possui dois conectores USB a
conexão deve ser feita usando a ponta B (quadrada) , a ponta A (retangular)
deve ser conectada no PC.
Quando
conectar no computador pela primeira vez, será solicitado o driver, na minha
configuração com o Windows 7 não reconheceu, segue o passo-a-passo:
Obs: Se você já está acostumado a instalar drivers, basta saber que o diretório C:\Android\arduino-1.0\drivers contém os drivers necessários para instalar a Arduino Mega ADK.
Abra
o Device Manager (Gerenciador de Dispositivos):
Em Other Devices, clique com o botão direito
sobre o dispositivo Arduino Mega ADK e clique em seguida em Update Driver
Software...
Veja em que porta COM a Arduino ADK ficou
configurada (no meu caso foi a COM21), se você fechou a janela acima e não viu
a COM, não tem problemas. Volte ao Device Manager e pocure a seção Ports (COM
& LPT). IMPORTANTE: Lembre-se que COM21 foi no meu computador, você precisa
verificar em que porta COM a sua Arduino ADK ficou configurada.
Execute
C:\Android\arduino-1.0\Arduino.exe
Configure
a porta correspondente (no meu caso COM21):
Configure
a placa correspondente (no nosso caso Mega ADK):
Teste
se está tudo ok, chamando um Sketch exemplo (Blink):
(Sketch
= Programa para Arduino)
A
placa Arduino irá piscar os leds RX / TX durante o upload. Se tudo deu certo, em
seguida um led próximo irá piscar (um segundo aceso e um segundo apagado).
Pronto,
a configuração da IDE da Arduino e sua conexão está ok.
Integrando
Arduino com Android
Faça
o download das bibliotecas do ADK.
Abra os seguintes arquivos e substitua void por size_t nas funções write:
arduino_bundle_ADK\libraries\AndroidAccessory\AndroidAccessory.cpp
A linha 280 fica assim:
size_t AndroidAccessory::write(uint8_t b)
arduino_bundle_ADK\libraries\AndroidAccessory\AndroidAccessory.h
A linha 71 fica assim:
size_t write(uint8_t b);
arduino_bundle_ADK\libraries\USB_Host_Shield\Max_LCD.cpp
A linha 257 fica assim:
inline size_t Max_LCD::write(uint8_t value)
arduino_bundle_ADK\libraries\USB_Host_Shield\Max_LCD.h
A linha 101 fica assim:
virtual size_t write(uint8_t);
Porque isso? Com a IDE Arduino 1.0 todas as funções write retornam variáveis do tipo size_t e não void, como estas bibliotecas não foram feitas para esta IDE precisamos fazer esta pequena correção.
Uma vez que você já corrigiu as bibliotecas e copie as pastas AndroidAccessory e USB_Host_Shield
Para
o C:\Android\arduino-1.0\libraries
Descompacte
o arquivo CapSense04.zip e copie a
pasta CapSense, para o C:\Android\arduino-1.0\libraries
A
pasta libraries fica assim:
Agora vamos abrir o Sketch do demokit. Do
arquivo adk_release_0512.zip que
você já fez o download e descompactou, procure o arquivo demokit.pde
No código, procure a função setup() e comente com // a chamada da função init_joystick( 5 );
A linha 117 fica assim:
//init_joystick( 5 );
Obs.: Isto é necessário, pois a inicialização do joystick suspende o programa quando não se tem o joystick conectado, que é o nosso caso, pois estamos somente com a placa Arduino ADK.
Agora substitua send por write nas seguintes linhas:
A linha 377 fica assim:
Wire.write(reg_addr);
A linha 391 fica assim:
Wire.write(reg_addr);
A linha 392 fica assim:
Wire.write(val);
Agora substitua receive por read nas seguintes linhas:
A linha 383 fica assim:
c = Wire.read();
Agora salve como demokit.ino (.ino é a nova extensão para os Sketchs no Arduino 1.0)
Clique em Verify, você deve receber uma mensagem “Done Compiling.”
Com
a placa Arduino Mega ADK conectada no micro clique em upload, você deve receber
uma mensagem “Done Uploading.”
Pronto
a sua placa Arduino Mega ADK está pronta.
Teste
Agora
vamos conectar o lado positivo (Led) no A0 da Arduino Mega ADK e o lado do
resistor no GND. O pino A0 é ativado
quando na aplicação Android for acionado o Relé 01
Considerando
que você já instalou o DemoKit no Tablet, execute ele agora. Irá aparecer uma tela como esta abaixo,
aguardando a conexão da Arduino Mega ADK:
Conecte
a Ardunio Mega ADK no PC através do Cabo USB A/B (somente para alimentar a
Arduino), e com o cabo USB Micro conecte a Arduino Mega ADK com o Tablet,
aparecerá uma janela perguntando se o Demokit deve ser aberto quando o
acessório USB for conectado, clique em OK.
Em
seguida, clique no botão ON/OFF do Relay1
e note que o led na Arduino Mega ADK acende e quando clica novamente ele
apaga.
Finalizado,
você conseguiu controlar um hardware externo a partir de um Tablet Android.
Você pode brincar de colocar o led em outras posições de acordo com as porta
usadas.
Por
exemplo o Relé 01 estava na porta A0
#define RELAY1
A0
O
Relé 02 esta na A1
#define RELAY2
A1
Todas
as definições estão no arquivo demokit.pde ou demokit.ino(que você usou).
Veja o vídeo que demonstra o controle do led:
Veja o vídeo que demonstra o controle do led: