SlideShare a Scribd company logo
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

What's hot (20)

Android App development and test environment, Understaing android app structure
Android App development and test environment, Understaing android app structure
Vijay Rastogi
 
Crosswalk and the Intel XDK
Crosswalk and the Intel XDK
Intel® Software
 
Mobile Day - Intel XDK & Testing
Mobile Day - Intel XDK & Testing
Software Guru
 
Ci for Android
Ci for Android
Alexey Ustenko
 
Mobile development
Mobile development
Sayed Ahmed
 
Arduino - Android Workshop Presentation
Arduino - Android Workshop Presentation
Hem Shrestha
 
Android Things Linux Day 2017
Android Things Linux Day 2017
Stefano Sanna
 
Mobile development
Mobile development
Sayed Ahmed
 
Windows 10 IoT Core on Raspberry Pi 2 Usine IO
Windows 10 IoT Core on Raspberry Pi 2 Usine IO
Alex Danvy
 
Getting started with android dev and test perspective
Getting started with android dev and test perspective
Gunjan Kumar
 
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Xavier Hallade
 
Make manual testing to automated by Sikuli bug daybkk2013
Make manual testing to automated by Sikuli bug daybkk2013
Tumit Watcharapol
 
Dload mobile development
Dload mobile development
Sayed Ahmed
 
Android Open Accessory APIs
Android Open Accessory APIs
Pearl Chen
 
Customize and control connected devices
Customize and control connected devices
Codemotion
 
Android Open Accessory Protocol - Turn Your Linux machine as ADK
Android Open Accessory Protocol - Turn Your Linux machine as ADK
Rajesh Sola
 
Flutter 1
Flutter 1
Warren Lin
 
Flutter Intro
Flutter Intro
Vladimir Parfenov
 
Sikuli
Sikuli
SATISH GORRIPOTU
 
Project presentation (Loginradius SDK for Android)
Project presentation (Loginradius SDK for Android)
shwetarathi Rathi
 
Android App development and test environment, Understaing android app structure
Android App development and test environment, Understaing android app structure
Vijay Rastogi
 
Crosswalk and the Intel XDK
Crosswalk and the Intel XDK
Intel® Software
 
Mobile Day - Intel XDK & Testing
Mobile Day - Intel XDK & Testing
Software Guru
 
Mobile development
Mobile development
Sayed Ahmed
 
Arduino - Android Workshop Presentation
Arduino - Android Workshop Presentation
Hem Shrestha
 
Android Things Linux Day 2017
Android Things Linux Day 2017
Stefano Sanna
 
Mobile development
Mobile development
Sayed Ahmed
 
Windows 10 IoT Core on Raspberry Pi 2 Usine IO
Windows 10 IoT Core on Raspberry Pi 2 Usine IO
Alex Danvy
 
Getting started with android dev and test perspective
Getting started with android dev and test perspective
Gunjan Kumar
 
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Xavier Hallade
 
Make manual testing to automated by Sikuli bug daybkk2013
Make manual testing to automated by Sikuli bug daybkk2013
Tumit Watcharapol
 
Dload mobile development
Dload mobile development
Sayed Ahmed
 
Android Open Accessory APIs
Android Open Accessory APIs
Pearl Chen
 
Customize and control connected devices
Customize and control connected devices
Codemotion
 
Android Open Accessory Protocol - Turn Your Linux machine as ADK
Android Open Accessory Protocol - Turn Your Linux machine as ADK
Rajesh Sola
 
Project presentation (Loginradius SDK for Android)
Project presentation (Loginradius SDK for Android)
shwetarathi Rathi
 

Viewers also liked (18)

Understanding PHP objects
Understanding PHP objects
julien pauli
 
Visual guide to selling software as a service by @prezly
Visual guide to selling software as a service by @prezly
Prezly
 
10 commandments for better android development
10 commandments for better android development
Trey Robinson
 
Object Calisthenics Applied to PHP
Object Calisthenics Applied to PHP
Guilherme Blanco
 
We Built It, And They Didn't Come!
We Built It, And They Didn't Come!
Lukas Fittl
 
Rethinking Best Practices
Rethinking Best Practices
floydophone
 
Your code sucks, let's fix it
Your code sucks, let's fix it
Rafael Dohms
 
Kicking the Bukkit: Anatomy of an open source meltdown
Kicking the Bukkit: Anatomy of an open source meltdown
RyanMichela
 
Composer The Right Way - 010PHP
Composer The Right Way - 010PHP
Rafael Dohms
 
Clean code
Clean code
Bulat Shakirzyanov
 
How to Design Indexes, Really
How to Design Indexes, Really
Karwin Software Solutions LLC
 
Integrating React.js with PHP projects
Integrating React.js with PHP projects
Ignacio Martín
 
Enterprise PHP: mappers, models and services
Enterprise PHP: mappers, models and services
Aaron Saray
 
From development environments to production deployments with Docker, Compose,...
From development environments to production deployments with Docker, Compose,...
Jérôme Petazzoni
 
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
Aaron Saray
 
Functional Programming Patterns (BuildStuff '14)
Functional Programming Patterns (BuildStuff '14)
Scott Wlaschin
 
From Idea to Execution: Spotify's Discover Weekly
From Idea to Execution: Spotify's Discover Weekly
Chris Johnson
 
Linux Profiling at Netflix
Linux Profiling at Netflix
Brendan Gregg
 
Understanding PHP objects
Understanding PHP objects
julien pauli
 
Visual guide to selling software as a service by @prezly
Visual guide to selling software as a service by @prezly
Prezly
 
10 commandments for better android development
10 commandments for better android development
Trey Robinson
 
Object Calisthenics Applied to PHP
Object Calisthenics Applied to PHP
Guilherme Blanco
 
We Built It, And They Didn't Come!
We Built It, And They Didn't Come!
Lukas Fittl
 
Rethinking Best Practices
Rethinking Best Practices
floydophone
 
Your code sucks, let's fix it
Your code sucks, let's fix it
Rafael Dohms
 
Kicking the Bukkit: Anatomy of an open source meltdown
Kicking the Bukkit: Anatomy of an open source meltdown
RyanMichela
 
Composer The Right Way - 010PHP
Composer The Right Way - 010PHP
Rafael Dohms
 
Integrating React.js with PHP projects
Integrating React.js with PHP projects
Ignacio Martín
 
Enterprise PHP: mappers, models and services
Enterprise PHP: mappers, models and services
Aaron Saray
 
From development environments to production deployments with Docker, Compose,...
From development environments to production deployments with Docker, Compose,...
Jérôme Petazzoni
 
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
Aaron Saray
 
Functional Programming Patterns (BuildStuff '14)
Functional Programming Patterns (BuildStuff '14)
Scott Wlaschin
 
From Idea to Execution: Spotify's Discover Weekly
From Idea to Execution: Spotify's Discover Weekly
Chris Johnson
 
Linux Profiling at Netflix
Linux Profiling at Netflix
Brendan Gregg
 
Ad

Similar to Programming objects with android (20)

Lab Handson: Power your Creations with Intel Edison!
Lab Handson: Power your Creations with Intel Edison!
Codemotion
 
Smartphone++
Smartphone++
mharkus
 
Better With Friends: Android+NFC+Arduino
Better With Friends: Android+NFC+Arduino
Pearl Chen
 
Android Programming made easy
Android Programming made easy
Lars Vogel
 
Arduino
Arduino
Madugula Kumar
 
Manish Chasta - Securing Android Applications
Manish Chasta - Securing Android Applications
Positive Hack Days
 
IRJET- IOT Dune Buggy –Control it from Anywhere
IRJET- IOT Dune Buggy –Control it from Anywhere
IRJET Journal
 
IRJET- IOT Dune Buggy –Control it from Anywhere
IRJET- IOT Dune Buggy –Control it from Anywhere
IRJET Journal
 
.Net Gadgeteer
.Net Gadgeteer
Wade Zhu
 
Java Meetup - 12-03-15 - Android Development Workshop
Java Meetup - 12-03-15 - Android Development Workshop
Kasun Dananjaya Delgolla
 
Android Things - The IoT platform for everyone.
Android Things - The IoT platform for everyone.
DVT - Smart people. Smart solutions.
 
Android Introduction on Java Forum Stuttgart 11
Android Introduction on Java Forum Stuttgart 11
Lars Vogel
 
Android Internals and Toolchain
Android Internals and Toolchain
Vladimir Kotov
 
arduino 320126512170.pptx
arduino 320126512170.pptx
priyaanaparthy
 
aoa-adk-osidays-rajeshsola
aoa-adk-osidays-rajeshsola
Rajesh Sola
 
Arduino presentation by_warishusain
Arduino presentation by_warishusain
student
 
Hack the Real World with ANDROID THINGS
Hack the Real World with ANDROID THINGS
DevFest DC
 
androidPramming.ppt
androidPramming.ppt
BijayKc16
 
Mobile application and Game development
Mobile application and Game development
Women In Digital
 
Usb Drive Protector
Usb Drive Protector
Aashiq Ahamed N
 
Lab Handson: Power your Creations with Intel Edison!
Lab Handson: Power your Creations with Intel Edison!
Codemotion
 
Smartphone++
Smartphone++
mharkus
 
Better With Friends: Android+NFC+Arduino
Better With Friends: Android+NFC+Arduino
Pearl Chen
 
Android Programming made easy
Android Programming made easy
Lars Vogel
 
Manish Chasta - Securing Android Applications
Manish Chasta - Securing Android Applications
Positive Hack Days
 
IRJET- IOT Dune Buggy –Control it from Anywhere
IRJET- IOT Dune Buggy –Control it from Anywhere
IRJET Journal
 
IRJET- IOT Dune Buggy –Control it from Anywhere
IRJET- IOT Dune Buggy –Control it from Anywhere
IRJET Journal
 
.Net Gadgeteer
.Net Gadgeteer
Wade Zhu
 
Java Meetup - 12-03-15 - Android Development Workshop
Java Meetup - 12-03-15 - Android Development Workshop
Kasun Dananjaya Delgolla
 
Android Introduction on Java Forum Stuttgart 11
Android Introduction on Java Forum Stuttgart 11
Lars Vogel
 
Android Internals and Toolchain
Android Internals and Toolchain
Vladimir Kotov
 
arduino 320126512170.pptx
arduino 320126512170.pptx
priyaanaparthy
 
aoa-adk-osidays-rajeshsola
aoa-adk-osidays-rajeshsola
Rajesh Sola
 
Arduino presentation by_warishusain
Arduino presentation by_warishusain
student
 
Hack the Real World with ANDROID THINGS
Hack the Real World with ANDROID THINGS
DevFest DC
 
androidPramming.ppt
androidPramming.ppt
BijayKc16
 
Mobile application and Game development
Mobile application and Game development
Women In Digital
 
Ad

More from firenze-gtug (20)

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

Recently uploaded (20)

PyData - Graph Theory for Multi-Agent Integration
PyData - Graph Theory for Multi-Agent Integration
barqawicloud
 
War_And_Cyber_3_Years_Of_Struggle_And_Lessons_For_Global_Security.pdf
War_And_Cyber_3_Years_Of_Struggle_And_Lessons_For_Global_Security.pdf
biswajitbanerjee38
 
FIDO Seminar: Perspectives on Passkeys & Consumer Adoption.pptx
FIDO Seminar: Perspectives on Passkeys & Consumer Adoption.pptx
FIDO Alliance
 
Edge-banding-machines-edgeteq-s-200-en-.pdf
Edge-banding-machines-edgeteq-s-200-en-.pdf
AmirStern2
 
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Alliance
 
Mastering AI Workflows with FME - Peak of Data & AI 2025
Mastering AI Workflows with FME - Peak of Data & AI 2025
Safe Software
 
cnc-drilling-dowel-inserting-machine-drillteq-d-510-english.pdf
cnc-drilling-dowel-inserting-machine-drillteq-d-510-english.pdf
AmirStern2
 
Your startup on AWS - How to architect and maintain a Lean and Mean account
Your startup on AWS - How to architect and maintain a Lean and Mean account
angelo60207
 
Supporting the NextGen 911 Digital Transformation with FME
Supporting the NextGen 911 Digital Transformation with FME
Safe Software
 
Viral>Wondershare Filmora 14.5.18.12900 Crack Free Download
Viral>Wondershare Filmora 14.5.18.12900 Crack Free Download
Puppy jhon
 
Integration of Utility Data into 3D BIM Models Using a 3D Solids Modeling Wor...
Integration of Utility Data into 3D BIM Models Using a 3D Solids Modeling Wor...
Safe Software
 
“From Enterprise to Makers: Driving Vision AI Innovation at the Extreme Edge,...
“From Enterprise to Makers: Driving Vision AI Innovation at the Extreme Edge,...
Edge AI and Vision Alliance
 
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
NTT DATA Technology & Innovation
 
National Fuels Treatments Initiative: Building a Seamless Map of Hazardous Fu...
National Fuels Treatments Initiative: Building a Seamless Map of Hazardous Fu...
Safe Software
 
Oracle Cloud Infrastructure AI Foundations
Oracle Cloud Infrastructure AI Foundations
VICTOR MAESTRE RAMIREZ
 
Agentic AI: Beyond the Buzz- LangGraph Studio V2
Agentic AI: Beyond the Buzz- LangGraph Studio V2
Shashikant Jagtap
 
FME for Good: Integrating Multiple Data Sources with APIs to Support Local Ch...
FME for Good: Integrating Multiple Data Sources with APIs to Support Local Ch...
Safe Software
 
Oracle Cloud Infrastructure Generative AI Professional
Oracle Cloud Infrastructure Generative AI Professional
VICTOR MAESTRE RAMIREZ
 
FME for Distribution & Transmission Integrity Management Program (DIMP & TIMP)
FME for Distribution & Transmission Integrity Management Program (DIMP & TIMP)
Safe Software
 
Enabling BIM / GIS integrations with Other Systems with FME
Enabling BIM / GIS integrations with Other Systems with FME
Safe Software
 
PyData - Graph Theory for Multi-Agent Integration
PyData - Graph Theory for Multi-Agent Integration
barqawicloud
 
War_And_Cyber_3_Years_Of_Struggle_And_Lessons_For_Global_Security.pdf
War_And_Cyber_3_Years_Of_Struggle_And_Lessons_For_Global_Security.pdf
biswajitbanerjee38
 
FIDO Seminar: Perspectives on Passkeys & Consumer Adoption.pptx
FIDO Seminar: Perspectives on Passkeys & Consumer Adoption.pptx
FIDO Alliance
 
Edge-banding-machines-edgeteq-s-200-en-.pdf
Edge-banding-machines-edgeteq-s-200-en-.pdf
AmirStern2
 
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Alliance
 
Mastering AI Workflows with FME - Peak of Data & AI 2025
Mastering AI Workflows with FME - Peak of Data & AI 2025
Safe Software
 
cnc-drilling-dowel-inserting-machine-drillteq-d-510-english.pdf
cnc-drilling-dowel-inserting-machine-drillteq-d-510-english.pdf
AmirStern2
 
Your startup on AWS - How to architect and maintain a Lean and Mean account
Your startup on AWS - How to architect and maintain a Lean and Mean account
angelo60207
 
Supporting the NextGen 911 Digital Transformation with FME
Supporting the NextGen 911 Digital Transformation with FME
Safe Software
 
Viral>Wondershare Filmora 14.5.18.12900 Crack Free Download
Viral>Wondershare Filmora 14.5.18.12900 Crack Free Download
Puppy jhon
 
Integration of Utility Data into 3D BIM Models Using a 3D Solids Modeling Wor...
Integration of Utility Data into 3D BIM Models Using a 3D Solids Modeling Wor...
Safe Software
 
“From Enterprise to Makers: Driving Vision AI Innovation at the Extreme Edge,...
“From Enterprise to Makers: Driving Vision AI Innovation at the Extreme Edge,...
Edge AI and Vision Alliance
 
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
NTT DATA Technology & Innovation
 
National Fuels Treatments Initiative: Building a Seamless Map of Hazardous Fu...
National Fuels Treatments Initiative: Building a Seamless Map of Hazardous Fu...
Safe Software
 
Oracle Cloud Infrastructure AI Foundations
Oracle Cloud Infrastructure AI Foundations
VICTOR MAESTRE RAMIREZ
 
Agentic AI: Beyond the Buzz- LangGraph Studio V2
Agentic AI: Beyond the Buzz- LangGraph Studio V2
Shashikant Jagtap
 
FME for Good: Integrating Multiple Data Sources with APIs to Support Local Ch...
FME for Good: Integrating Multiple Data Sources with APIs to Support Local Ch...
Safe Software
 
Oracle Cloud Infrastructure Generative AI Professional
Oracle Cloud Infrastructure Generative AI Professional
VICTOR MAESTRE RAMIREZ
 
FME for Distribution & Transmission Integrity Management Program (DIMP & TIMP)
FME for Distribution & Transmission Integrity Management Program (DIMP & TIMP)
Safe Software
 
Enabling BIM / GIS integrations with Other Systems with FME
Enabling BIM / GIS integrations with Other Systems with FME
Safe Software
 

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