With the development of the Apple iPad I felt that it could potentially be a great interface for the electronic devices I was experimenting with, such as the Bus Pirate tool from Dangerous Prototypes (http://dangerousprototypes.com/bus-pirate-manual/). Instead of having to source touch-screens and design the control electronics I could buy an iPad and write the interface software to connect it to my custom electronics. I made a cursory attempt to get access to the tools and information required to develop accessories for the iPad but found that, as a hobbyist, it was not an easy process. There are alternative methods to communicate with the iPad but all add additional complexity to the design of the hardware.
Recently during their annual IO conference Google announced the Adroid Open Accessory Development Kit (ADK) (http://www.google.com/events/io/2011/sessions/android-momentum-mobile-and-more-at-google-i-o.html). The details start at the 36-minute mark in the presentation found at the link. Google took a different approach with their design. Instead of restrictive licenses coupled with restrictions on the hardware they went with open hardware and software.
They based the initial ADK on the popular Arduino Mega platform. Coupling the Android platform with a popular development platform for DIY developers means that there is almost no limit to the possibilities that will come from this. The combination means that an ecosystem of unique and unexpected devices will quickly develop. There will probably be a significant number of devices that never grow beyond experimental stages but history has shown that successful products can come from unexpected areas.
The design of the ADK uses a USB device that is running in Host Mode. That means that the accessory device is acting as the “master” instead of the Android device. This is the same way Android devices function when plugged into a computer. It is somewhat backwards from what is expected but it means that Android devices that have USB chipsets that lack Host Mode capabilities can use the accessory kit APIs if they are able to run the required version of the Android OS. The required version is 2.3.4 for phone devices and 3.1 for Tablet devices.
There are already several options available to get started with the ADK. Many of these devices are currently sold out but that will not be for long and there will be boards available from many more sources. Options include boards from RT (http://www.rt-net.jp/shop/index.php?main_page=product_info&cPath=3_4&products_id=1), DIYDrones (https://store.diydrones.com/ProductDetails.asp?ProductCode=BR-PhoneDrone) and Modern Devices (http://shop.moderndevice.com/products/freeduino-usb-host-board).
Seeedstudio (http://www.seeedstudio.com/depot/seeeduino-adk-main-board-p-846.html?cPath=132_133&zenid=2ac938bb9a89fe91123535bd1f8a1a10) has started pre-orders on their board and SparkFun (http://www.sparkfun.com) is also working on a board.
Another alternative is to use a USB Host shield to allow an existing Arduino to communicate with an Android device. One option is from Circuits@Home (http://www.circuitsathome.com/products-page/arduino-shields/usb-host-shield-2-0-for-arduino), which has updated libraries to make it compatible with the ADK APIs.
In addition to the API code being an open source project the hardware design is open. All the files for the hardware design are available. You can use them to order your own boards and build them yourself or use that as the basis of your own hardware design.
Information on the ADK is available at http://developer.android.com/guide/topics/usb/adk.html. In addition to documentation on the API there is a zip file that contains all the code you need to get started writing ADK applications. The zip file also contains the hardware design and the firmware code for the Atmel AVR Microcontroller used in the Arduino. You can open the hardware design files in Eagle for review or if you want to use them for the basis of your own hardware design.
The API has several methods available for an application developer to work with accessories. You can detect accessories when they are plugged in, you can identify accessories that are already plugged in or you can have a list of specific accessories that your application will work with.
The lower level API functions do a decent job of abstracting the communication with the USB device. From the developers perspective you can use standard file input streams and file output streams. If you are comfortable with Java programming everything is very straightforward.
The progress with the ADK is already impressive. Almost every day something new is coming from the community that is quickly building up. The code is being ported to alternative platforms like the Microchip microcontroller products. Google had a display at Makerfaire (http://android-developers.blogspot.com/2011/05/adk-at-maker-faire.html) showing several interesting devices that were already created.
Do you have any ideas for interesting or unusual Android accessories? What would you build, or would like to see someone build, using the Android Accessory Developers Kit?
With the development of the Apple iPad I felt that it could potentially be a great interface for the electronic devices I was experimenting with, such as the Bus Pirate tool from Dangerous Prototypes (http://dangerousprototypes.com/bus-pirate-manual). Instead of having to source touch-screens and design the control electronics I could buy an iPad and write the interface software to connect it to my custom electronics. I made a cursory attempt to get access to the tools and information required to develop accessories for the iPad but found that, as a hobbyist, it was not an easy process. There are alternative methods to communicate with the iPad but all add additional complexity to the design of the hardware.
Recently during their annual IO conference Google announced the Adroid Open Accessory Development Kit (ADK) (http://www.google.com/events/io/2011/sessions/android-momentum-mobile-and-more-at-google-i-o.html). The details start at the 36-minute mark in the presentation found at the link. Google took a different approach with their design. Instead of restrictive licenses coupled with restrictions on the hardware they went with open hardware and software.
They based the initial ADK on the popular Arduino Mega platform. Coupling the Android platform with a popular development platform for DIY developers means that there is almost no limit to the possibilities that will come from this. The combination means that an ecosystem of unique and unexpected devices will quickly develop. There will probably be a significant number of devices that never grow beyond experimental stages but history has shown that successful products can come from unexpected areas.
The design of the ADK uses a USB device that is running in Host Mode. That means that the accessory device is acting as the “master” instead of the Android device. This is the same way Android devices function when plugged into a computer. It is somewhat backwards from what is expected but it means that Android devices that have USB chipsets that lack Host Mode capabilities can use the accessory kit APIs if they are able to run the required version of the Android OS. The required version is 2.3.4 for phone devices and 3.1 for Tablet devices.
There are already several options available to get started with the ADK. Many of these devices are currently sold out but that will not be for long and there will be boards available from many more sources. Options include boards from RT (http://www.rt-net.jp/shop/index.php?main_page=product_info&cPath=3_4&products_id=1), DIYDrones (https://store.diydrones.com/PhoneDrone_Board_p/br-phonedrone.htm) and Modern Devices (http://shop.moderndevice.com/products/freeduino-usb-host-board).
Seeedstudio (http://www.seeedstudio.com/depot/seeeduino-adk-main-board-p-846.html?cPath=132_133&zenid=2ac938bb9a89fe91123535bd1f8a1a10) has started pre-orders on their board and SparkFun (http://www.sparkfun.com) is also working on a board.
Another alternative is to use a USB Host shield to allow an existing Arduino to communicate with an Android device. One option is from Circuits@Home (http://www.circuitsathome.com/products-page/arduino-shields/usb-host-shield-2-0-for-arduino), which has updated libraries to make it compatible with the ADK APIs.
In addition to the API code being an open source project the hardware design is open. All the files for the hardware design are available. You can use them to order your own boards and build them yourself or use that as the basis of your own hardware design.
Information on the ADK is available at http://developer.android.com/guide/topics/usb/adk.html. In addition to documentation on the API there is a zip file that contains all the code you need to get started writing ADK applications. The zip file also contains the hardware design and the firmware code for the Atmel AVR Microcontroller used in the Arduino. You can open the hardware design files in Eagle for review or if you want to use them for the basis of your own hardware design.
The API has several methods available for an application developer to work with accessories. You can detect accessories when they are plugged in, you can identify accessories that are already plugged in or you can have a list of specific accessories that your application will work with.
The lower level API functions do a decent job of abstracting the communication with the USB device. From the developers perspective you can use standard file input streams and file output streams. If you are comfortable with Java programming everything is very straightforward.
The progress with the ADK is already impressive. Almost every day something new is coming from the community that is quickly building up. The code is being ported to alternative platforms like the Microchip microcontroller products. Google had a display at Makerfaire (http://android-developers.blogspot.com/2011/05/adk-at-maker-faire.html) showing several interesting devices that were already created.
Do you have any ideas for interesting or unusual Android accessories? What would you build, or would like to see someone build, using the Android Accessory Developers Kit?
Top Comments