quinta-feira, 29 de dezembro de 2011

Integrando Android com Hardware externo


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:







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.



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

Faça download da biblioteca Cap Sense 04

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


Neste ponto já é possível executar a aplicação no Tablet  e conectar a Arduino Mega ADK, porém não seria visível o funcionamento. Para solucionar isto vamos ligar um led e um resistor de 470Ω.





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: