hello, arduino! what's up, android? (android rec 2012)

Post on 13-Nov-2014

1.200 Views

Category:

Self Improvement

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Lightning Talk apresentado na Android Rec 2012 (28/04/2012) mostrando como integrar Android e Arduino com o Android Open Accessory.

TRANSCRIPT

Hello, Arduino! What's up, Android?

Extensões com Android Open Accessory

Thiago Figueredo Cardosotfcardoso [at] gmail [dot] com

Extensões?

Android Open Accessory

Hardware

Android Open Accessory

Hardware USB Host: devices são USB client até agora!

Android Open Accessory

Software (Arduino) Implementação do Android Accessory protocol

Android Open Accessory

Software (Android) Google API● com.hardware.usb: 3.1+● com.android.future.usb: 2.3.4+

Android Open Accessory

Software (Android) Google API● com.hardware.usb: 3.1+● com.android.future.usb: 2.3.4+ Fabricante decide se suporta!

Hands-on

Software:● Google API● Arduino libs:

○ Android Accessory○ USB Host Shield

Componentes

Hardware:● Arduino Mega ADK● Google Device

Passo 1: Faça o Arduino Falar

1. Estrutura mínima void setup() {} void loop() {}

Passo 1: Faça o Arduino Falar

1. Estrutura mínima2. Incluir bibliotecas

#include <Max3421e.h>#include <Usb.h>#include <AndroidAccessory.h> void setup() {} void loop() {}

Passo 1: Faça o Arduino Falar

1. Estrutura mínima2. Incluir bibliotecas3. Definir acessório

#include <Max3421e.h>#include <Usb.h>#include <AndroidAccessory.h> AndroidAccessory acc(

"Robolivre.org","Hello","Hello, Android!","http://www.robolivre.

org","0000000000000001");

void setup() {...

Passo 1: Faça o Arduino Falar

1. Estrutura mínima2. Incluir bibliotecas3. Definir acessório4. Inicializar

... AndroidAccessory acc(

"Robolivre.org","Hello","Hello, Android!","http://www.robolivre.

org","0000000000000001");

void setup() {

acc.powerOn();} ...

Passo 1: Faça o Arduino Falar

1. Estrutura mínima2. Incluir bibliotecas3. Definir acessório4. Inicializar5. Esperar conexão

... void setup() {

acc.powerOn();} void loop() {

if (acc.isConnected()) {// Connected

} else {// Not connected

}}

Passo 2: Faça o Android Responder

1. Intent filter AndroidManifest.xml

<activity

android:name=".HelloArduinoActivity"

...

<intent-filter> <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" /> </intent-filter>

...

Passo 2: Faça o Android Responder

1. Intent filter2. Especificação do

filtro

AndroidManifest.xml

...

<intent-filter>

<action

android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />

</intent-filter>

<meta-dataandroid:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"android:resource="@xml/accessory_filter"/>

...

Passo 2: Faça o Android Responder

1. Intent filter2. Especificação do

filtro

accessory_filter.xml

<?xml version="1.0" encoding="UTF-8"><resources> <usb-accessory model="Hello" manufacturer="Robolivre.org" version="1.0" /></resources>

Mesmos dados utilizados no Arduino!

Passo 3: Conexão

1. Encontrar acessório HelloArduinoActivity.java

public void onResume() {

...

Intent intent = getIntent();

UsbAccessory acc = intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);...

}

Passo 3: Conexão

1. Encontrar acessório2. Abrir acessório

HelloArduinoActivity.java

public void onResume() {

...

UsbAccessory acc = intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);

if (acc != null) { openAccessory(acc); }...

}

Se aplicação não iniciar devido ao filtro, não haverá acessório na intent!

Passo 3: Conexão

1. Encontrar acessório2. Abrir acessório

HelloArduinoActivity.java

private void openAccessory(UsbAccessory acc) { UsbManager man = (UsbManager) getSystemService(Context.USB_SERVICE); ParcelFileDescriptor fd = man.openAccessory(acc); if (fd != null) { // Opened }}

Passo 3: Conexão

1. Encontrar acessório2. Abrir acessório3. Fechar acessório

HelloArduinoActivity.java

public void onPause() {

...

closeAccessory();...

}

Passo 3: Conexão

1. Encontrar acessório2. Abrir acessório3. Fechar acessório

HelloArduinoActivity.java

private void closeAccessory() { try { if (fd != null) { fd.close(); } ...}

fd é o file descriptor aberto em openAccessory()

Passo 4: Comunicação

Android FileInputStreamFileOutputStream Streams do file descriptor

Arduino acc.write()acc.read()

Demo

Dicas

● É possível conectar a um acessório não informado no AndroidManifest.xmla. Enumerar acessóriosb. Pedir permissão para acessar

● Android é Java (Unicode), Arduino é C (ASCII)

Links úteis

● Android Open Accessory Development Kit● USB Accessory● Arduino● Open Accessories for Android

Hello, Arduino! What's up, Android?

Extensões com Android Open Accessory

Thiago Figueredo Cardosotfcardoso [at] gmail [dot] com

top related