Your SlideShare is downloading. ×
0
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Programming objects with android
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Programming objects with android

1,136

Published on

Programming Objects with Android …

Programming Objects with Android

Maurizio Caporali - "Mobile & Embedded" - GDG-Firenze

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,136
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
16
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Programming things with Android: Home automation, Digital signage and Smart Object using Android Maurizio Caporali Luca Pisani www.udoo.org Mobile&Embedded Firenze
  • 2. Programming things?!? Xerox Alto Douglas Engelbart www.udoo.org
  • 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
  • 5. 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
  • 10. Makers Revolution Xerox Alto Communities real! Douglas Engelbart make this success 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
  • 19. 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
  • 27. Programming Overview 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
  • 44. Projects www.udoo.org
  • 45. Community: www.udoo.org • Informative website • Forum • Tutorials • Projects • Wiki • Support • Faq www.udoo.org

×