SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
Hello, Arduino! What's up,
         Android?
 Extensões com Android Open Accessory


        Thiago Figueredo Cardoso
           tfcardoso [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
Componentes
Hardware:            Software:
● Arduino Mega ADK   ● Google API
● Google Device      ● Arduino libs:
                       ○ Android Accessory
                       ○ USB Host Shield
Passo 1: Faça o Arduino Falar
                      void setup() {
1. Estrutura mínima   }

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

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

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

                         ...
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!
Hello, Arduino! What's Up, Android? (Android Rec 2012)
Passo 3: Conexão
                         HelloArduinoActivity.java
1. Encontrar acessório
                         public void onResume() {
                         ...
                           Intent intent = getIntent();
                           UsbAccessory acc = intent.
                         getParcelableExtra(UsbManager.
                         EXTRA_ACCESSORY);
                         ...
                         }
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!
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
                           }
                         }
Passo 3: Conexão
                         HelloArduinoActivity.java
1. Encontrar acessório
2. Abrir acessório       public void onPause() {
                         ...
3. Fechar acessório        closeAccessory();
                         ...
                         }
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()
Passo 4: Comunicação
Android                      Arduino

FileInputStream              acc.write()
FileOutputStream             acc.read()

Streams do file descriptor
Hello, Arduino! What's Up, Android? (Android Rec 2012)
Demo
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)
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 Cardoso
           tfcardoso [at] gmail [dot] com

Contenu connexe

En vedette

151735700 prueba-el-dragon-color-frambuesa-final
151735700 prueba-el-dragon-color-frambuesa-final151735700 prueba-el-dragon-color-frambuesa-final
151735700 prueba-el-dragon-color-frambuesa-finalVictoria Ojeda
 
The Kennedy Years
The Kennedy YearsThe Kennedy Years
The Kennedy Yearstritill
 
The advantages and disadvantages of online learning
The advantages and disadvantages of online learningThe advantages and disadvantages of online learning
The advantages and disadvantages of online learningJanna8482
 

En vedette (7)

Secuencia didáctica
Secuencia didácticaSecuencia didáctica
Secuencia didáctica
 
Apbn dan apbd
Apbn dan apbdApbn dan apbd
Apbn dan apbd
 
151735700 prueba-el-dragon-color-frambuesa-final
151735700 prueba-el-dragon-color-frambuesa-final151735700 prueba-el-dragon-color-frambuesa-final
151735700 prueba-el-dragon-color-frambuesa-final
 
肉体改造の話
肉体改造の話肉体改造の話
肉体改造の話
 
肉体改造の話
肉体改造の話肉体改造の話
肉体改造の話
 
The Kennedy Years
The Kennedy YearsThe Kennedy Years
The Kennedy Years
 
The advantages and disadvantages of online learning
The advantages and disadvantages of online learningThe advantages and disadvantages of online learning
The advantages and disadvantages of online learning
 

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
  • 4. Android Open Accessory Hardware USB Host: devices são USB client até agora!
  • 5. Android Open Accessory Software (Arduino) Implementação do Android Accessory protocol
  • 6. Android Open Accessory Software (Android) Google API ● com.hardware.usb: 3.1+ ● com.android.future.usb: 2.3.4+
  • 7. Android Open Accessory Software (Android) Google API ● com.hardware.usb: 3.1+ ● com.android.future.usb: 2.3.4+ Fabricante decide se suporta!
  • 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()
  • 25. Passo 4: Comunicação Android Arduino FileInputStream acc.write() FileOutputStream acc.read() Streams do file descriptor
  • 27. Demo
  • 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