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

30
Hello, Arduino! What's up, Android? Extensões com Android Open Accessory Thiago Figueredo Cardoso tfcardoso [at] gmail [dot] com

Upload: thiago-figueredo-cardoso

Post on 13-Nov-2014

1.195 views

Category:

Self Improvement


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Hello, Arduino! What's Up, Android? (Android Rec 2012)

Hello, Arduino! What's up, Android?

Extensões com Android Open Accessory

Thiago Figueredo Cardosotfcardoso [at] gmail [dot] com

Page 2: Hello, Arduino! What's Up, Android? (Android Rec 2012)

Extensões?

Page 3: Hello, Arduino! What's Up, Android? (Android Rec 2012)

Android Open Accessory

Hardware

Page 4: Hello, Arduino! What's Up, Android? (Android Rec 2012)

Android Open Accessory

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

Page 5: Hello, Arduino! What's Up, Android? (Android Rec 2012)

Android Open Accessory

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

Page 6: Hello, Arduino! What's Up, Android? (Android Rec 2012)

Android Open Accessory

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

Page 7: Hello, Arduino! What's Up, Android? (Android Rec 2012)

Android Open Accessory

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

Page 8: Hello, Arduino! What's Up, Android? (Android Rec 2012)

Hands-on

Page 9: Hello, Arduino! What's Up, Android? (Android Rec 2012)

Software:● Google API● Arduino libs:

○ Android Accessory○ USB Host Shield

Componentes

Hardware:● Arduino Mega ADK● Google Device

Page 10: Hello, Arduino! What's Up, Android? (Android Rec 2012)

Passo 1: Faça o Arduino Falar

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

Page 11: Hello, Arduino! What's Up, Android? (Android Rec 2012)

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() {}

Page 12: Hello, Arduino! What's Up, Android? (Android Rec 2012)

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() {...

Page 13: Hello, Arduino! What's Up, Android? (Android Rec 2012)

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();} ...

Page 14: Hello, Arduino! What's Up, Android? (Android Rec 2012)

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

}}

Page 15: Hello, Arduino! What's Up, Android? (Android Rec 2012)
Page 16: Hello, Arduino! What's Up, Android? (Android Rec 2012)

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>

...

Page 17: Hello, Arduino! What's Up, Android? (Android Rec 2012)

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"/>

...

Page 18: Hello, Arduino! What's Up, Android? (Android Rec 2012)

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!

Page 19: Hello, Arduino! What's Up, Android? (Android Rec 2012)
Page 20: Hello, Arduino! What's Up, Android? (Android Rec 2012)

Passo 3: Conexão

1. Encontrar acessório HelloArduinoActivity.java

public void onResume() {

...

Intent intent = getIntent();

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

}

Page 21: Hello, Arduino! What's Up, Android? (Android Rec 2012)

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!

Page 22: Hello, Arduino! What's Up, Android? (Android Rec 2012)

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 }}

Page 23: Hello, Arduino! What's Up, Android? (Android Rec 2012)

Passo 3: Conexão

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

HelloArduinoActivity.java

public void onPause() {

...

closeAccessory();...

}

Page 24: Hello, Arduino! What's Up, Android? (Android Rec 2012)

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()

Page 25: Hello, Arduino! What's Up, Android? (Android Rec 2012)

Passo 4: Comunicação

Android FileInputStreamFileOutputStream Streams do file descriptor

Arduino acc.write()acc.read()

Page 26: Hello, Arduino! What's Up, Android? (Android Rec 2012)
Page 27: Hello, Arduino! What's Up, Android? (Android Rec 2012)

Demo

Page 28: Hello, Arduino! What's Up, Android? (Android Rec 2012)

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)

Page 29: Hello, Arduino! What's Up, Android? (Android Rec 2012)

Links úteis

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

Page 30: Hello, Arduino! What's Up, Android? (Android Rec 2012)

Hello, Arduino! What's up, Android?

Extensões com Android Open Accessory

Thiago Figueredo Cardosotfcardoso [at] gmail [dot] com