Programming things with Android:
Home automation, Digital signage and Smart Object
using Android

Maurizio Caporali
Luca Pisani

www.udoo.org

Mobile&Embedded Firenze
Programming things?!?

Xerox
Alto

Douglas
Engelbart

www.udoo.org
Developers are changing
Programming Desktop
Computer
Programming Mobile Device
Xerox
Alto

Douglas
Engelbart

Programming Things
Prototyping Lab, FabLab, Hackathon
www.udoo.org
Computer Interaction is changing
Screen interaction

Xerox
Alto

Douglas
Engelbart

Interactive Things

www.udoo.org
www.udoo.org
Programming Things
It’s a complex
activity
Xerox
Alto

Douglas
Engelbart

Electronic Engineer, Mechanical Engineer, Computer
Engineer, ...
www.udoo.org
Programming Things: rapid prototyping tools

Arduino
*
Open Source
How to create the interaction
Open Source Software

Community
Xerox
Alto

Douglas
Engelbart

Linux

Android

www.udoo.org
Open Hardware
How to create Physical Mock Up quickly
Open Source Hardware

Community

Xerox
Alto

Douglas
Engelbart

Raspberry Pi
3D Printing
Arduino
www.udoo.org
Makers Revolution

Xerox
Alto

Communities

real!

Douglas
Engelbart

make this success
www.udoo.org
Arduino + Android: Android ADK

*
Applications
Ambient Devices
Home Automation
Smart Cities
Automotive
Urban Furniture
Digital Signage
Robot
*
What do you need?

+
Android Smartphone/Tablet

Arduino DUE

or

+
ARM single board computer

UDOO

Arduino DUE

www.udoo.org
What’s UDOO?
UDOO is a mini PC that could run either
Android or Linux, with an Arduinocompatible board embedded.
UDOO is a collective effort of a
multidisciplinary team spread between
North America and Europe, with expertise
in interaction design, embedded electronics
and sensor networks.
UDOO is a co-founded project by SECO
(www.seco.com) and Aidilab (www.aidilab.
com).
www.udoo.org
All-in-one solution
For the first time, a powerful ARM
cortex-A9 CPU for heavy tasks
with great performance, and a
dedicated ARM processor for the
GPIO are brought together in one
single board computer.

www.udoo.org
Arduino-compatible
UDOO is compatible with all the
sketches, tutorials and resources
available
on
the
Arduino
community as well as all the
shields, sensors and actuators for
Arduino DUE available on the
market.

www.udoo.org
Open Source and Community
UDOO is a proper open source
project where both hardware
designs and software are open
source.
Community development support
Schematics,
2D/3D
drawings,
Kernels and U-Boot sources are
available to the community in order
to improve and extend UDOO
capabilities and functionalities.
www.udoo.org
Power and flexibility for any kind of projects

www.udoo.org
www.udoo.org
Android on UDOO
Android 4.2.2 Jelly Beans runs
smoothly on UDOO giving you all
the features of an Android device.
Apps interface with Arduinocompatible
embedded
board
through Accessory Development
Kit (ADK) connection for building
accessories and smart devices
based on Android.
www.udoo.org
Android on UDOO
• Android Jelly Beans 4.2.2 AOSP
• up-to-date ASAP
• GAPPS could be installed: http://www.
udoo.org/guide-how-to-install-gappson-udoo-running-android/

www.udoo.org
Program Arduino App for UDOO
To program UDOO under Android we need the standard
tools:
● Eclipse + ADT plugin
● Android SDK Tools
● Android Platform-tools
We also need:
● Arduino IDE 1.5.4
● UDOO patch for Arduino IDE (bossac programmer)
www.udoo.org
UDOO Overview
● Android 4.2.2 runs on Freescale i.Mx6
(dual or quad core - 1 GB)
● UDOO is equipped with micro Atmel
SAM3X, the same of Arduino Due
● They are connected through bus USB
OTG
● We program the two CPUs separately
using Android SDK and Arduino IDE
www.udoo.org
UDOO Overview OTG - bus
● To allow the communication between Android and the SAM3X the
ADK protocol is needed. A set of libraries that authorize Android to
communicate with an external accessory.
● It's basically a bidirectional stream of data between the two parts
● Usually to communicate, install applications and debug the ADB
protocol is used through the USB OTG port on the android device.
● Also the microcontroller communicates using the OTG bus
www.udoo.org
UDOO Overview OTG - bus switch
The i.Mx6 processor can be connected with:
● the external USB port (debug app Android)
● the SAM3X microcontroller (usage)
It’s possible to switch via software between the 2 options

www.udoo.org
Programming Arduino
We need to program SAM3X microcontroller
with Arduino IDE downloadable from arduino.
cc
The Sketches have a standard structure, we
only need to add a library for OTG
communication.
We program the SAM3X through microUSB
serial port.

www.udoo.org
Programming Overview

www.udoo.org
AndroidManifest.xml
● Include a <uses-feature> element that declares that your
application uses the accessory feature.
<uses-feature android:name="android.hardware.usb.accessory" />

● Declare min(12) e target(17) SDK version
<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="17" />

www.udoo.org
AndroidManifest.xml
● If you want your application to be notified of an attached USB
accessory, specify an <intent-filter> and<meta-data>
<activity
……
<intent-filter>
<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" />
</activity>

www.udoo.org
accessory_filter.xml
In the XML resource file, declare <usb-accessory> elements for the
accessories that you want to filter. Each<usb-accessory> can have
the following attributes:
● manufacturer
● model
● version
<?xml version="1.0" encoding="utf-8"?>
<resources>
<usb-accessory manufacturer="Aidilab" model="UDOO_ADK" version="1.0" />
</resources>

www.udoo.org
Activity.java
The package you need to import is android.hardware.usb. This
contain the classes to support the accessory mode
import android.hardware.usb.UsbAccessory;
import android.hardware.usb.UsbManager;

Here is a summary of the relevant code for handling USB
connections:
mUSBManager = (UsbManager) getSystemService(Context.USB_SERVICE);
...
UsbAccessory acc = (UsbAccessory)intent.getParcelableExtra(UsbManager.
EXTRA_ACCESSORY);

www.udoo.org
Activity.java
To explicitly obtain permission, first create a broadcast receiver. This receiver
listens for the intent that gets broadcast when you call requestPermission(). The call
to requestPermission() displays a dialog to the user asking for permission to connect
to the accessory
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action)) {
synchronized (this) {
UsbAccessory accessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
if (intent.getBooleanExtra(
UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
openAccessory(accessory);
} else {
Log.d(TAG, "permission denied for accessory "+ accessory);
}
mPermissionRequestPending = false;
}
}

www.udoo.org
Activity.java
To register the broadcast receiver, put this in your onCreate()
method in your activity:
mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent
(ACTION_USB_PERMISSION), 0);
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
registerReceiver(mUsbReceiver, filter);

To display the dialog that asks users for permission to connect to the
accessory, call the requestPermission() method:
mUsbManager.requestPermission(accessory,mPermissionIntent);
www.udoo.org
Activity.java
To communicate with the accessory you need a file descriptor to set
up input and output streams to read and write data:
private void openAccessory(UsbAccessory accessory) {
mFileDescriptor = mUsbManager.openAccessory(accessory);
if (mFileDescriptor != null) {
mAccessory = accessory;
FileDescriptor fd = mFileDescriptor.getFileDescriptor();
mInputStream = new FileInputStream(fd);
mOutputStream = new FileOutputStream(fd);
}
}
www.udoo.org
Activity.java
We use the output and input stream to send and receive messages to
the Arduino processors of UDOO.
byte[] message = new byte[1];
message[0] = (byte)1;
mOutputStream.write(message);
...
byte[] buffer = new byte[4];
running = true;
ret = mInputStream.read(buffer);
www.udoo.org
Programming Arduino
To program SAM3X we need to download Arduino IDE based on
Processing project.
Arduino programming language is based on C / C++ with specific
objects that provides main arduino’s functions.
It provides an interface with the microcontroller low level C
programming language.
It allows to avoid “unfriendly” low level difficulties (write or read
registers, manage signals timings, non objects).
www.udoo.org
Programming Arduino
Arduino sketches have a defined structure based on two main
functions:
- void setup()
- void loop()
Setup method is executed at the beginning of the sketch, and it’s
used to initialize objects.
Loop method is executed continuously after first setup execution. It
contains the core of the code.
www.udoo.org
Programming Arduino
Example for blinkin LED:
int led = 13;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000);
// wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000);
// wait for a second
}
www.udoo.org
Arduino .ino
The accessory code must make a few calls to initialize USB
connectivity, including setting the accessory identification strings:
char descriptionName[] = "UDOOAndroidADKDemo";
char modelName[] = "UDOO_ADK";
char manufacturerName[] = "Aidilab";
char versionNumber[] = "1.0";
char serialNumber[] = "1";
char url[] = "http://www.udoo.org";
USBHost Usb;
ADK adk(&Usb, manufacturerName, modelName, descriptionName, versionNumber, url,
serialNumber);
www.udoo.org
Arduino .ino
read data from Android App into buffer:
void loop(){
uint8_t bufRead[BUFSIZE];
uint32_t nbread = 0;
uint8_t bufWrite[1];
if (adk.isReady()) {
adk.read(&nbread, BUFSIZE, buf); // read data into buf array
if (nbread > 0) {
... // do stuff

www.udoo.org
Arduino .ino

write data to Android App:
void loop(){
uint8_t bufWrite[BUFSIZE];
...
...
adk.write(sizeof(bufWrite), (uint8_t *)bufWrite);

www.udoo.org
Android ADK useful links
● Android ADK Documentation
http://developer.android.
com/guide/topics/connectivity/usb/accessory.html
http://developer.android.com/tools/adk/adk2.html
● Toolkit to help beginners to be up and running with ADK 2012:
https://github.com/palazzem/adk-toolkit
by Emanuele Palazzetti (GDG Perugia)
www.udoo.org
Arduino Resources & Community
Downloads:
http://arduino.cc/en/Main/Software
http://www.udoo.org/downloads/
Resources:
http://arduino.cc/en/Tutorial/HomePage
http://arduino.cc/en/Reference/HomePage
Community:
http://forum.arduino.cc/
more… more.. and more
www.udoo.org
Projects

www.udoo.org
Community: www.udoo.org
• Informative

website

• Forum
• Tutorials
• Projects
• Wiki
• Support
• Faq
www.udoo.org

More Related Content

PDF
Intel ndk - a few Benchmarks
PDF
Android tutorial1
PDF
Wearables + Azure development
PPTX
Appcelerator Titanium - An Introduction to the Titanium Ecosystem
PDF
Hands-on Labs: Raspberry Pi 2 + Windows 10 IoT Core
PDF
Raspberry Pi 2 + Windows 10 IoT Core + Node.js
PDF
WinJS, Apache Cordova & NFC - HTML5 apps for Android and Windows Phone
PDF
Windows 10 IoT Core, a real sample
Intel ndk - a few Benchmarks
Android tutorial1
Wearables + Azure development
Appcelerator Titanium - An Introduction to the Titanium Ecosystem
Hands-on Labs: Raspberry Pi 2 + Windows 10 IoT Core
Raspberry Pi 2 + Windows 10 IoT Core + Node.js
WinJS, Apache Cordova & NFC - HTML5 apps for Android and Windows Phone
Windows 10 IoT Core, a real sample

What's hot (20)

PDF
Android App development and test environment, Understaing android app structure
PPTX
Crosswalk and the Intel XDK
PDF
Mobile Day - Intel XDK & Testing
ODP
Ci for Android
PPT
Mobile development
PPTX
Arduino - Android Workshop Presentation
PDF
Android Things Linux Day 2017
PPTX
Mobile development
PPTX
Windows 10 IoT Core on Raspberry Pi 2 Usine IO
PPT
Getting started with android dev and test perspective
PDF
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
PPTX
Make manual testing to automated by Sikuli bug daybkk2013
PPTX
Dload mobile development
PPTX
Android Open Accessory APIs
PDF
Customize and control connected devices
PDF
Android Open Accessory Protocol - Turn Your Linux machine as ADK
PPTX
Flutter 1
PPTX
Flutter Intro
PDF
PPTX
Project presentation (Loginradius SDK for Android)
Android App development and test environment, Understaing android app structure
Crosswalk and the Intel XDK
Mobile Day - Intel XDK & Testing
Ci for Android
Mobile development
Arduino - Android Workshop Presentation
Android Things Linux Day 2017
Mobile development
Windows 10 IoT Core on Raspberry Pi 2 Usine IO
Getting started with android dev and test perspective
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Make manual testing to automated by Sikuli bug daybkk2013
Dload mobile development
Android Open Accessory APIs
Customize and control connected devices
Android Open Accessory Protocol - Turn Your Linux machine as ADK
Flutter 1
Flutter Intro
Project presentation (Loginradius SDK for Android)
Ad

Viewers also liked (18)

PDF
Understanding PHP objects
PDF
Visual guide to selling software as a service by @prezly
PDF
10 commandments for better android development
KEY
Object Calisthenics Applied to PHP
PDF
We Built It, And They Didn't Come!
PPTX
Rethinking Best Practices
PDF
Your code sucks, let's fix it
PDF
Kicking the Bukkit: Anatomy of an open source meltdown
PDF
Composer The Right Way - 010PHP
PDF
Clean code
PDF
How to Design Indexes, Really
PDF
Integrating React.js with PHP projects
PDF
Enterprise PHP: mappers, models and services
PDF
From development environments to production deployments with Docker, Compose,...
PDF
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
PDF
Functional Programming Patterns (BuildStuff '14)
PDF
From Idea to Execution: Spotify's Discover Weekly
PDF
Linux Profiling at Netflix
Understanding PHP objects
Visual guide to selling software as a service by @prezly
10 commandments for better android development
Object Calisthenics Applied to PHP
We Built It, And They Didn't Come!
Rethinking Best Practices
Your code sucks, let's fix it
Kicking the Bukkit: Anatomy of an open source meltdown
Composer The Right Way - 010PHP
Clean code
How to Design Indexes, Really
Integrating React.js with PHP projects
Enterprise PHP: mappers, models and services
From development environments to production deployments with Docker, Compose,...
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
Functional Programming Patterns (BuildStuff '14)
From Idea to Execution: Spotify's Discover Weekly
Linux Profiling at Netflix
Ad

Similar to Programming objects with android (20)

ODP
Physical Computing with Android and IOIO
PDF
Smartphone++
PPT
Development, debug and deploy hardware/software solutions based on Android an...
PPT
ARDUINO_presentation_by_Ravishankar_Pati.ppt
PPT
ARDUINO_presentation
PDF
introductiontoarduino-111120102058-phpapp02.pdf
PPT
ARDUINO presentation by Bamidele Samuel.ppt
PDF
The document proceeds to explain the main components of an Arduino Uno board ...
PPT
Arduino presentation by_warishusain
PPTX
1.Arduino Ecosystem.pptx
PDF
arduino
PDF
Better With Friends: Android+NFC+Arduino
PPTX
Android meets Arduino
PPTX
arduinoedit.pptx
ODP
Android Based Robots
PPTX
PEQUEÑO CURSO DE ARDUINO DESDE SEÑALES HASTA PROGRAMACIÓN
PPT
Arduino Platform with C programming.
DOCX
Arduino seminar report
PPTX
Arduino
Physical Computing with Android and IOIO
Smartphone++
Development, debug and deploy hardware/software solutions based on Android an...
ARDUINO_presentation_by_Ravishankar_Pati.ppt
ARDUINO_presentation
introductiontoarduino-111120102058-phpapp02.pdf
ARDUINO presentation by Bamidele Samuel.ppt
The document proceeds to explain the main components of an Arduino Uno board ...
Arduino presentation by_warishusain
1.Arduino Ecosystem.pptx
arduino
Better With Friends: Android+NFC+Arduino
Android meets Arduino
arduinoedit.pptx
Android Based Robots
PEQUEÑO CURSO DE ARDUINO DESDE SEÑALES HASTA PROGRAMACIÓN
Arduino Platform with C programming.
Arduino seminar report
Arduino

More from firenze-gtug (20)

PDF
Html5 apps - GWT oriented
PDF
Android ndk - ottimizzazione su dispositivi Intel
PDF
Gwt kickoff - Alberto Mancini & Francesca Tosi
PDF
Youtube broadcast live - Massimiliano D'Ambrosio
PDF
Intro BeagleBone Black - Massimiliano D'Ambrosio
PDF
Arduino - Massimiliano D'Ambrosio
PDF
Introduzione a GAE - Alessandro Aglietti e Lorenzo Bugiani
PDF
RFID: What & Why - Stefano Coluccini
PDF
GWT - AppDays - (25 aprile 2014, pordenone)
PDF
Presentazione Google App Engine
PDF
Android chat in the cloud
PDF
Clean android code
PPT
#Html2Native
PDF
EE Incremental Store
PDF
Apertura "Mobile & Embedded" - 13 febbraio 2014
PDF
Maven from dummies
PPTX
Apps fuel oct2012
PDF
Dev fest android application case study
PDF
google drive and the google drive sdk
PDF
You tube api overview
Html5 apps - GWT oriented
Android ndk - ottimizzazione su dispositivi Intel
Gwt kickoff - Alberto Mancini & Francesca Tosi
Youtube broadcast live - Massimiliano D'Ambrosio
Intro BeagleBone Black - Massimiliano D'Ambrosio
Arduino - Massimiliano D'Ambrosio
Introduzione a GAE - Alessandro Aglietti e Lorenzo Bugiani
RFID: What & Why - Stefano Coluccini
GWT - AppDays - (25 aprile 2014, pordenone)
Presentazione Google App Engine
Android chat in the cloud
Clean android code
#Html2Native
EE Incremental Store
Apertura "Mobile & Embedded" - 13 febbraio 2014
Maven from dummies
Apps fuel oct2012
Dev fest android application case study
google drive and the google drive sdk
You tube api overview

Recently uploaded (20)

PDF
OpenACC and Open Hackathons Monthly Highlights July 2025
PPTX
Custom Battery Pack Design Considerations for Performance and Safety
PPT
What is a Computer? Input Devices /output devices
PDF
Enhancing emotion recognition model for a student engagement use case through...
PDF
Five Habits of High-Impact Board Members
PDF
Architecture types and enterprise applications.pdf
PPTX
Modernising the Digital Integration Hub
PDF
NewMind AI Weekly Chronicles – August ’25 Week III
PDF
Credit Without Borders: AI and Financial Inclusion in Bangladesh
PDF
Getting started with AI Agents and Multi-Agent Systems
PPTX
Configure Apache Mutual Authentication
PDF
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
PPT
Geologic Time for studying geology for geologist
PDF
TrustArc Webinar - Click, Consent, Trust: Winning the Privacy Game
PPTX
The various Industrial Revolutions .pptx
PPTX
2018-HIPAA-Renewal-Training for executives
PDF
sbt 2.0: go big (Scala Days 2025 edition)
PDF
UiPath Agentic Automation session 1: RPA to Agents
PDF
Consumable AI The What, Why & How for Small Teams.pdf
PDF
CloudStack 4.21: First Look Webinar slides
OpenACC and Open Hackathons Monthly Highlights July 2025
Custom Battery Pack Design Considerations for Performance and Safety
What is a Computer? Input Devices /output devices
Enhancing emotion recognition model for a student engagement use case through...
Five Habits of High-Impact Board Members
Architecture types and enterprise applications.pdf
Modernising the Digital Integration Hub
NewMind AI Weekly Chronicles – August ’25 Week III
Credit Without Borders: AI and Financial Inclusion in Bangladesh
Getting started with AI Agents and Multi-Agent Systems
Configure Apache Mutual Authentication
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
Geologic Time for studying geology for geologist
TrustArc Webinar - Click, Consent, Trust: Winning the Privacy Game
The various Industrial Revolutions .pptx
2018-HIPAA-Renewal-Training for executives
sbt 2.0: go big (Scala Days 2025 edition)
UiPath Agentic Automation session 1: RPA to Agents
Consumable AI The What, Why & How for Small Teams.pdf
CloudStack 4.21: First Look Webinar slides

Programming objects with android

  • 1. Programming things with Android: Home automation, Digital signage and Smart Object using Android Maurizio Caporali Luca Pisani www.udoo.org Mobile&Embedded Firenze
  • 3. Developers are changing Programming Desktop Computer Programming Mobile Device Xerox Alto Douglas Engelbart Programming Things Prototyping Lab, FabLab, Hackathon www.udoo.org
  • 4. Computer Interaction is changing Screen interaction Xerox Alto Douglas Engelbart Interactive Things www.udoo.org
  • 6. Programming Things It’s a complex activity Xerox Alto Douglas Engelbart Electronic Engineer, Mechanical Engineer, Computer Engineer, ... www.udoo.org
  • 7. Programming Things: rapid prototyping tools Arduino *
  • 8. Open Source How to create the interaction Open Source Software Community Xerox Alto Douglas Engelbart Linux Android www.udoo.org
  • 9. Open Hardware How to create Physical Mock Up quickly Open Source Hardware Community Xerox Alto Douglas Engelbart Raspberry Pi 3D Printing Arduino www.udoo.org
  • 11. Arduino + Android: Android ADK *
  • 12. Applications Ambient Devices Home Automation Smart Cities Automotive Urban Furniture Digital Signage Robot *
  • 13. What do you need? + Android Smartphone/Tablet Arduino DUE or + ARM single board computer UDOO Arduino DUE www.udoo.org
  • 14. What’s UDOO? UDOO is a mini PC that could run either Android or Linux, with an Arduinocompatible board embedded. UDOO is a collective effort of a multidisciplinary team spread between North America and Europe, with expertise in interaction design, embedded electronics and sensor networks. UDOO is a co-founded project by SECO (www.seco.com) and Aidilab (www.aidilab. com). www.udoo.org
  • 15. All-in-one solution For the first time, a powerful ARM cortex-A9 CPU for heavy tasks with great performance, and a dedicated ARM processor for the GPIO are brought together in one single board computer. www.udoo.org
  • 16. Arduino-compatible UDOO is compatible with all the sketches, tutorials and resources available on the Arduino community as well as all the shields, sensors and actuators for Arduino DUE available on the market. www.udoo.org
  • 17. Open Source and Community UDOO is a proper open source project where both hardware designs and software are open source. Community development support Schematics, 2D/3D drawings, Kernels and U-Boot sources are available to the community in order to improve and extend UDOO capabilities and functionalities. www.udoo.org
  • 18. Power and flexibility for any kind of projects www.udoo.org
  • 20. Android on UDOO Android 4.2.2 Jelly Beans runs smoothly on UDOO giving you all the features of an Android device. Apps interface with Arduinocompatible embedded board through Accessory Development Kit (ADK) connection for building accessories and smart devices based on Android. www.udoo.org
  • 21. Android on UDOO • Android Jelly Beans 4.2.2 AOSP • up-to-date ASAP • GAPPS could be installed: http://www. udoo.org/guide-how-to-install-gappson-udoo-running-android/ www.udoo.org
  • 22. Program Arduino App for UDOO To program UDOO under Android we need the standard tools: ● Eclipse + ADT plugin ● Android SDK Tools ● Android Platform-tools We also need: ● Arduino IDE 1.5.4 ● UDOO patch for Arduino IDE (bossac programmer) www.udoo.org
  • 23. UDOO Overview ● Android 4.2.2 runs on Freescale i.Mx6 (dual or quad core - 1 GB) ● UDOO is equipped with micro Atmel SAM3X, the same of Arduino Due ● They are connected through bus USB OTG ● We program the two CPUs separately using Android SDK and Arduino IDE www.udoo.org
  • 24. UDOO Overview OTG - bus ● To allow the communication between Android and the SAM3X the ADK protocol is needed. A set of libraries that authorize Android to communicate with an external accessory. ● It's basically a bidirectional stream of data between the two parts ● Usually to communicate, install applications and debug the ADB protocol is used through the USB OTG port on the android device. ● Also the microcontroller communicates using the OTG bus www.udoo.org
  • 25. UDOO Overview OTG - bus switch The i.Mx6 processor can be connected with: ● the external USB port (debug app Android) ● the SAM3X microcontroller (usage) It’s possible to switch via software between the 2 options www.udoo.org
  • 26. Programming Arduino We need to program SAM3X microcontroller with Arduino IDE downloadable from arduino. cc The Sketches have a standard structure, we only need to add a library for OTG communication. We program the SAM3X through microUSB serial port. www.udoo.org
  • 28. AndroidManifest.xml ● Include a <uses-feature> element that declares that your application uses the accessory feature. <uses-feature android:name="android.hardware.usb.accessory" /> ● Declare min(12) e target(17) SDK version <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="17" /> www.udoo.org
  • 29. AndroidManifest.xml ● If you want your application to be notified of an attached USB accessory, specify an <intent-filter> and<meta-data> <activity …… <intent-filter> <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" /> </activity> www.udoo.org
  • 30. accessory_filter.xml In the XML resource file, declare <usb-accessory> elements for the accessories that you want to filter. Each<usb-accessory> can have the following attributes: ● manufacturer ● model ● version <?xml version="1.0" encoding="utf-8"?> <resources> <usb-accessory manufacturer="Aidilab" model="UDOO_ADK" version="1.0" /> </resources> www.udoo.org
  • 31. Activity.java The package you need to import is android.hardware.usb. This contain the classes to support the accessory mode import android.hardware.usb.UsbAccessory; import android.hardware.usb.UsbManager; Here is a summary of the relevant code for handling USB connections: mUSBManager = (UsbManager) getSystemService(Context.USB_SERVICE); ... UsbAccessory acc = (UsbAccessory)intent.getParcelableExtra(UsbManager. EXTRA_ACCESSORY); www.udoo.org
  • 32. Activity.java To explicitly obtain permission, first create a broadcast receiver. This receiver listens for the intent that gets broadcast when you call requestPermission(). The call to requestPermission() displays a dialog to the user asking for permission to connect to the accessory private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (ACTION_USB_PERMISSION.equals(action)) { synchronized (this) { UsbAccessory accessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY); if (intent.getBooleanExtra( UsbManager.EXTRA_PERMISSION_GRANTED, false)) { openAccessory(accessory); } else { Log.d(TAG, "permission denied for accessory "+ accessory); } mPermissionRequestPending = false; } } www.udoo.org
  • 33. Activity.java To register the broadcast receiver, put this in your onCreate() method in your activity: mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent (ACTION_USB_PERMISSION), 0); IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); registerReceiver(mUsbReceiver, filter); To display the dialog that asks users for permission to connect to the accessory, call the requestPermission() method: mUsbManager.requestPermission(accessory,mPermissionIntent); www.udoo.org
  • 34. Activity.java To communicate with the accessory you need a file descriptor to set up input and output streams to read and write data: private void openAccessory(UsbAccessory accessory) { mFileDescriptor = mUsbManager.openAccessory(accessory); if (mFileDescriptor != null) { mAccessory = accessory; FileDescriptor fd = mFileDescriptor.getFileDescriptor(); mInputStream = new FileInputStream(fd); mOutputStream = new FileOutputStream(fd); } } www.udoo.org
  • 35. Activity.java We use the output and input stream to send and receive messages to the Arduino processors of UDOO. byte[] message = new byte[1]; message[0] = (byte)1; mOutputStream.write(message); ... byte[] buffer = new byte[4]; running = true; ret = mInputStream.read(buffer); www.udoo.org
  • 36. Programming Arduino To program SAM3X we need to download Arduino IDE based on Processing project. Arduino programming language is based on C / C++ with specific objects that provides main arduino’s functions. It provides an interface with the microcontroller low level C programming language. It allows to avoid “unfriendly” low level difficulties (write or read registers, manage signals timings, non objects). www.udoo.org
  • 37. Programming Arduino Arduino sketches have a defined structure based on two main functions: - void setup() - void loop() Setup method is executed at the beginning of the sketch, and it’s used to initialize objects. Loop method is executed continuously after first setup execution. It contains the core of the code. www.udoo.org
  • 38. Programming Arduino Example for blinkin LED: int led = 13; void setup() { pinMode(led, OUTPUT); } void loop() { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } www.udoo.org
  • 39. Arduino .ino The accessory code must make a few calls to initialize USB connectivity, including setting the accessory identification strings: char descriptionName[] = "UDOOAndroidADKDemo"; char modelName[] = "UDOO_ADK"; char manufacturerName[] = "Aidilab"; char versionNumber[] = "1.0"; char serialNumber[] = "1"; char url[] = "http://www.udoo.org"; USBHost Usb; ADK adk(&Usb, manufacturerName, modelName, descriptionName, versionNumber, url, serialNumber); www.udoo.org
  • 40. Arduino .ino read data from Android App into buffer: void loop(){ uint8_t bufRead[BUFSIZE]; uint32_t nbread = 0; uint8_t bufWrite[1]; if (adk.isReady()) { adk.read(&nbread, BUFSIZE, buf); // read data into buf array if (nbread > 0) { ... // do stuff www.udoo.org
  • 41. Arduino .ino write data to Android App: void loop(){ uint8_t bufWrite[BUFSIZE]; ... ... adk.write(sizeof(bufWrite), (uint8_t *)bufWrite); www.udoo.org
  • 42. Android ADK useful links ● Android ADK Documentation http://developer.android. com/guide/topics/connectivity/usb/accessory.html http://developer.android.com/tools/adk/adk2.html ● Toolkit to help beginners to be up and running with ADK 2012: https://github.com/palazzem/adk-toolkit by Emanuele Palazzetti (GDG Perugia) www.udoo.org
  • 43. Arduino Resources & Community Downloads: http://arduino.cc/en/Main/Software http://www.udoo.org/downloads/ Resources: http://arduino.cc/en/Tutorial/HomePage http://arduino.cc/en/Reference/HomePage Community: http://forum.arduino.cc/ more… more.. and more www.udoo.org
  • 45. Community: www.udoo.org • Informative website • Forum • Tutorials • Projects • Wiki • Support • Faq www.udoo.org