FloIancu
FloIancu

Reputation: 2725

Android external accessories development library?

I want to build a device with sensors (either with an Arduino or a homemade circuit with a microcontroller) and I want to send data from it to an Android device via an USB cable. What is the library required to connect devices via USB? Is there any documentation I could read for it? The problem is that whenever I search for this I only get results about the ADK and their board, not for other devices. Are there things I should know beforehand? I'm not new to either field, but it's my first project with the two connected.

Thank you.

Upvotes: 1

Views: 1855

Answers (3)

netpork
netpork

Reputation: 554

This works great on my Nexus7 which is connected over the OTG to Arduino Mega.

Android USB host serial driver library for CDC, FTDI, Arduino and other devices.

Hope it helps!

Upvotes: 2

Sébastien Rinsoz
Sébastien Rinsoz

Reputation: 41

You have two solution

1: Your Arduino board act as a USB host and power the Android device.

With this solution you have to implement and USB Host stack on your Arduino board and must implement Android Open Accessory Protocol. Your Arduino board must power the Android device. Then you app must use the USB Accessory API to communicate with your board.

Avantage:

  • work with almost all Android Devices (no need for an USB Host port on Android device)

Disavantage:

  • The device board is more complicated (must provide power for both devices)
  • Firmware is more complicated (must implement USB Accessory mode)

    2. your Arduino board act as a USB device and the Android device powers you board.

With this solution your do not have to implement a specific USB protocol. Your board will act as a standard USB device. Since you act as a device you can power your board directly from the USB cable (the Android device will power itself and your baord). To communicate with your board you will use the USB host API of Android.

Avantage:

  • the device board is very simple
  • the firmware is simple and easier to debug (you can even test it with you PC)

Disavantage:

  • Works only with Android devices that have an USB Host port
  • On most device you will need a specific cable or adapter (ex :otg usb host cable)

I have experience with solution 2, and it works pretty well. All source code for the Android source is available from the link below. I have verified that it works with sensor devices from the company where I work on the following Android devices:

  • Samsung Galaxy S3
  • Acer Iconia tab a200
  • Asus Tranformer Pad TF300T

But it should work on most tablets and recent phones you can see this post if you want look at our experience.

Upvotes: 1

Code Painters
Code Painters

Reputation: 7275

The first thing to check is if your Android device is equipped with USB host interface. In such case you can connect a regular USB device to your Android and use this API to communicate with the device.

However, typical Android device (virtually every mobile phone) is only equipped with USB device interface, for connecting to PC or another USB host. In such case you have to use the Android's USB Accessory support. The most important idea behind Android Open Accessory protocol is that it swaps (logically) USB device and USB host roles. It's the USB host that looks for the device with particular vendor/product ID, selects particular USB protocol interface, and then simply uses the in/out bulk endpoints found to communicate - pretty smart, isn't it?

To build Android Open Accessory compatible device you then need a CPU with USB host interface. If you want to use Arduino, this shield is probably a good starting point, given its firmware implements Android Open Accessory Protocol already. There are some example applications as well.

Upvotes: 2

Related Questions