Hello, Arduino! What's Up, Android? (Android Rec 2012)1. Hello, Arduino! What's up,
Android?
Extensões com Android Open Accessory
Thiago Figueredo Cardoso
tfcardoso [at] gmail [dot] com
9. Componentes
Hardware: Software:
● Arduino Mega ADK ● Google API
● Google Device ● Arduino libs:
○ Android Accessory
○ USB Host Shield
10. Passo 1: Faça o Arduino Falar
void setup() {
1. Estrutura mínima }
void loop() {
}
11. Passo 1: Faça o Arduino Falar
#include <Max3421e.h>
1. Estrutura mínima #include <Usb.h>
2. Incluir bibliotecas #include <AndroidAccessory.
h>
void setup() {
}
void loop() {
}
12. Passo 1: Faça o Arduino Falar
#include <Max3421e.h>
1. Estrutura mínima #include <Usb.h>
2. Incluir bibliotecas #include <AndroidAccessory.h>
3. Definir acessório
AndroidAccessory acc(
"Robolivre.org",
"Hello",
"Hello, Android!",
"http://www.robolivre.
org",
"0000000000000001");
void setup() {
...
13. Passo 1: Faça o Arduino Falar
...
1. Estrutura mínima
2. Incluir bibliotecas AndroidAccessory acc(
3. Definir acessório "Robolivre.org",
"Hello",
4. Inicializar "Hello, Android!",
"http://www.robolivre.
org",
"0000000000000001");
void setup() {
acc.powerOn();
}
...
14. Passo 1: Faça o Arduino Falar
...
1. Estrutura mínima
2. Incluir bibliotecas void setup() {
3. Definir acessório acc.powerOn();
}
4. Inicializar
5. Esperar conexão void loop() {
if (acc.isConnected()) {
// Connected
} else {
// Not connected
}
}
16. 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>
...
17. Passo 2: Faça o Android Responder
AndroidManifest.xml
1. Intent filter
2. Especificação do ...
<intent-filter>
filtro <action
android:name= "android.hardware.usb.
action.USB_ACCESSORY_ATTACHED" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.
action.USB_ACCESSORY_ATTACHED"
android:resource="
@xml/accessory_filter"
/>
...
18. Passo 2: Faça o Android Responder
accessory_filter.xml
1. Intent filter
2. Especificação do <?xml version="1.0" encoding="UTF-8">
<resources>
filtro <usb-accessory
model="Hello"
manufacturer="Robolivre.org"
version="1.0" />
</resources>
Mesmos dados utilizados no Arduino!
20. Passo 3: Conexão
HelloArduinoActivity.java
1. Encontrar acessório
public void onResume() {
...
Intent intent = getIntent();
UsbAccessory acc = intent.
getParcelableExtra(UsbManager.
EXTRA_ACCESSORY);
...
}
21. Passo 3: Conexão
HelloArduinoActivity.java
1. Encontrar acessório
2. Abrir acessório 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!
22. Passo 3: Conexão
HelloArduinoActivity.java
1. Encontrar acessório
2. Abrir acessório private void openAccessory(UsbAccessory
acc) {
UsbManager man = (UsbManager)
getSystemService(Context.USB_SERVICE);
ParcelFileDescriptor fd = man.
openAccessory(acc);
if (fd != null) {
// Opened
}
}
23. Passo 3: Conexão
HelloArduinoActivity.java
1. Encontrar acessório
2. Abrir acessório public void onPause() {
...
3. Fechar acessório closeAccessory();
...
}
24. Passo 3: Conexão
HelloArduinoActivity.java
1. Encontrar acessório
2. Abrir acessório private void closeAccessory() {
try {
3. Fechar acessório if (fd != null) {
fd.close();
}
...
}
fd é o file descriptor aberto em
openAccessory()
28. Dicas
● É possível conectar a um acessório não
informado no AndroidManifest.xml
a. Enumerar acessórios
b. Pedir permissão para acessar
● Android é Java (Unicode), Arduino é C
(ASCII)
29. Links úteis
● Android Open Accessory Development Kit
● USB Accessory
● Arduino
● Open Accessories for Android
30. Hello, Arduino! What's up,
Android?
Extensões com Android Open Accessory
Thiago Figueredo Cardoso
tfcardoso [at] gmail [dot] com