NFC                Bluetooth                         Open                       Accessory  Better with Friends(Or "Android...
The future is already here— its just not very evenly        distributed.                                      William Gibs...
About meSome Comp Sci classes back there too                                       ( Illustration created using modified ou...
Some of my web projects
Some of non-web my projects
What inspires me                   A-Nerve by CuteCircuit
The Third Industrial Revolution                                     From The Economist, April 2012A number of remarkable t...
Microcontrollers                          Arduino                                    MaKey MaKey            Basic Stamp197...
Hardware startups becoming viable                                             Pebble Kickstarter campaign as of June 2012 ...
Looking at the hardware trends• Small, yet mighty• Multi-screen• Always on• $$$ ⇾ $                                       ...
...and the software trends           Location, location, location.            Context, context, context.
And how is this related to Android?This talk will cover:• External hardware integration  with Android Open Accessory• NFC ...
Professional Android Sensor Programming           Disclaimer: I authored chapter 11 (NFC)                   & co-authored ...
Android Open Accessory    klab.ca/spotlightandroid
Android Open Accessory - Demo!                 klab.ca/spotlightandroid
Android Development Kit (ADK)                                            Arduino Mega ADK                 klab.ca/spotligh...
More Android Development Kits!                 SparkFun IOIO                                                       Microch...
Basic firmware/sketch on Arduino ADKNote: You can get a fully working but barebones Arduino ADK sketch here: iheartrobotics...
Accessory Filter ResourceIn xml/accessory_filter.xml:<resources>  <usb-accessory    manufacturer="Manufacturer"    model="M...
Android ManifestIn AndroidManifest.xml (3.1+):<manifest ...>   <uses-sdk android:minSdkVersion="12" />   <uses-feature and...
ActivityIn the .java file for your Activity (3.1+):import com.android.hardware.usb.UsbAccessory;import com.android.hardware...
Project ideasSo what can you make with the Open Accessory APIsand an Arduino?     Things already                      1+1=...
Things already available on your phone    accelerometer                                   touch screen              GPS   ...
Electronics components you can add            Electronics inputs and outputs using LittleBits as an example of various com...
Super awesome stuff!      Music Beta: “Now Playing” by Chris Juergen                      Aerogarden Monitor by Sam Steele...
Why Open Accessories are “open”• iOS developer fees: $99/yr.                  • Fill out zero forms to start              ...
Speaking of connectors...
Are there wireless ADKs?                                                    Bluetooth Shields             IOIO w/USB Bluet...
NFC(near field communications)          klab.ca/spotlightandroid
What is NFC?               NFC Scanner                                  Radiowaves                             NFC Sticker...
How is it different than RFID?                       Low frequency radio waves                       can travel far distan...
How is it different than RFID?Storage with RFID is also limited to simple IDsversus the complex data NFC tags can hold.NFC...
NFC - Demo!              klab.ca/spotlightandroid
Android ManifestIn AndroidManifest.xml (4.0+):<manifest ...>   <uses-sdk android:minSdkVersion="10" />   <uses-feature and...
Activity - Reacting to NFC scansIn the .java file for your Activity:import android.nfc.NfcAdapter;import android.nfc.NfcAda...
Activity - Formatting to NDEF FormatIn the .java file for your Activity:import     android.nfc.NdefMessage;import     andro...
Activity - Reading NDEF FormatIn the .java file for your Activity:import android.nfc.Tag;//...Parcelable[] rawMsgs =      i...
A case for NFC• Create low friction interactions• Augment physical objects (even offline)• Make your software app more tan...
Mobile OS support for NFC                Chart updated for Sept 27, 2012                   klab.ca/spotlightandroid
Don’t worry, this isn’t Apple bashing...  Hey! What                                    By touchingdid you just do         ...
Thank you! Oh, and check out some upcoming Arduino workshops!    Sign up for mailing list on karma-laboratory.com.        ...
Upcoming SlideShare
Loading in...5
×

Better With Friends: Android+NFC+Arduino

4,926

Published on

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,926
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Better With Friends: Android+NFC+Arduino

  1. 1. NFC Bluetooth Open Accessory Better with Friends(Or "Android: The Loveable Mobile Platform That Plays Well with External Devices") Pearl Chen Google+: klab.ca/+ pearl@karma-laboratory.com Twitter: @PearlChen klab.ca/spotlightandroid
  2. 2. The future is already here— its just not very evenly distributed. William Gibson klab.ca/spotlightandroid
  3. 3. About meSome Comp Sci classes back there too ( Illustration created using modified output from visualize.me and my LinkedIn profile. )
  4. 4. Some of my web projects
  5. 5. Some of non-web my projects
  6. 6. What inspires me A-Nerve by CuteCircuit
  7. 7. The Third Industrial Revolution From The Economist, April 2012A number of remarkable technologies are converging: clever software, novel materials, more dexterous robots, new processes (notably 3Dprinting) and a whole range of web-based services. The factory of the past was based on cranking out zillions of identical products. The factory of the future will focus on mass customisation.
  8. 8. Microcontrollers Arduino MaKey MaKey Basic Stamp1975: Microchip PIC
  9. 9. Hardware startups becoming viable Pebble Kickstarter campaign as of June 2012 [The founder] also shared a photo of the first Pebble prototype using an Arduino and some similarly cobbled-together hardware. That was four years ago. via Slashgear
  10. 10. Looking at the hardware trends• Small, yet mighty• Multi-screen• Always on• $$$ ⇾ $ Project Glass by Google Steve Mann - world’s first cyborg
  11. 11. ...and the software trends Location, location, location. Context, context, context.
  12. 12. And how is this related to Android?This talk will cover:• External hardware integration with Android Open Accessory• NFC for low-friction interactions (not related to mobile payments)• Combining with Bluetooth
  13. 13. Professional Android Sensor Programming Disclaimer: I authored chapter 11 (NFC) & co-authored 10 (AOA) (more info here) klab.ca/spotlightandroid
  14. 14. Android Open Accessory klab.ca/spotlightandroid
  15. 15. Android Open Accessory - Demo! klab.ca/spotlightandroid
  16. 16. Android Development Kit (ADK) Arduino Mega ADK klab.ca/spotlightandroid
  17. 17. More Android Development Kits! SparkFun IOIO Microchip PIC24F ADK ODroid ADK klab.ca/spotlightandroid
  18. 18. Basic firmware/sketch on Arduino ADKNote: You can get a fully working but barebones Arduino ADK sketch here: iheartrobotics.com/2011/07/arduino-mega-adk-setup-notes.html#include <Max3421e.h> USB and USB host libraries#include <Usb.h>#include <AndroidAccessory.h> Google-supplied C++ library Create a new instance of the AndroidAccessoryAndroidAccessory acc("Manufacturer", "Model",                     "Description", "1.0",                     "http://www.android.com",                     "0000000012345678");void setup() { Convenience method that simply calls the acc.powerOn(); powerOn() method in the Max3421e library.}void loop() { byte msg[0]; Continually check for connection to Android app  if (acc.isConnected()) {    //send something to the Android app acc.write(msg, 1); Create data that the Android app can read    //or read something int len = acc.read(msg, sizeof(msg), 1); Read data from Android app into msg variable  }}
  19. 19. Accessory Filter ResourceIn xml/accessory_filter.xml:<resources> <usb-accessory manufacturer="Manufacturer" model="Model" Needs to match the Arduino sketch exactly version="1.0" /></resources>
  20. 20. Android ManifestIn AndroidManifest.xml (3.1+):<manifest ...> <uses-sdk android:minSdkVersion="12" /> <uses-feature android:name="android.hardware.usb.accessory" /> <application ...> <activity ...> <meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" android:resource="@xml/accessory_filter" /> From previous slide <intent-filter> <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"/> </intent-filter> Use intent filter to launch this activity when ADK is plugged in </activity> </application></manifest>
  21. 21. ActivityIn the .java file for your Activity (3.1+):import com.android.hardware.usb.UsbAccessory;import com.android.hardware.usb.UsbManager;//...UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);ParcelFileDescriptor fileDescriptor = manager.openAccessory(accessory);FileDescriptor fd = fileDescriptor.getFileDescriptor();FileInputStream inputStream = new FileInputStream(fd);byte[] buffer = new byte[16384]; Read data from the Arduinoint ret = inputStream.read(buffer); via a FileInputStreamFileOutputStream outputStream = new FileOutputStream(fd);mOutputStream.write(buffer); Write data to the Arduino via a FileOutputStream
  22. 22. Project ideasSo what can you make with the Open Accessory APIsand an Arduino? Things already 1+1=3 available Super on your phone awesome stuff! Electronics components you can add
  23. 23. Things already available on your phone accelerometer touch screen GPS camera wifi/3G mass storage proximity/light temperature sensor sensors microphone NFC klab.ca/spotlightandroid
  24. 24. Electronics components you can add Electronics inputs and outputs using LittleBits as an example of various components klab.ca/spotlightandroid
  25. 25. Super awesome stuff! Music Beta: “Now Playing” by Chris Juergen  Aerogarden Monitor by Sam Steele  Space Spheres by NASA Floating Sensor Project by UC Berkeley klab.ca/spotlightandroid
  26. 26. Why Open Accessories are “open”• iOS developer fees: $99/yr. • Fill out zero forms to start developing.• Approval required to be in MFi program; must sign NDAs. • Pay nothing to Google -- now or ever.• Additional Apple licensing fees and 3rd party certification. • No approval process from Google to go to market.• Final product needs to be approved by Apple • USB connectors and drivers are readily available.• One supplier (Avent) produces the connectors. klab.ca/spotlightandroid
  27. 27. Speaking of connectors...
  28. 28. Are there wireless ADKs? Bluetooth Shields IOIO w/USB Bluetooth dongle Coming soon? Wifi Shield w/ integrated chip Coming soon? ADK2012
  29. 29. NFC(near field communications) klab.ca/spotlightandroid
  30. 30. What is NFC? NFC Scanner Radiowaves NFC Sticker: antenna and flash storage
  31. 31. How is it different than RFID? Low frequency radio waves can travel far distances. 13.56MHz = NFC High frequency waves cannot. NFC works within 10cm only.
  32. 32. How is it different than RFID?Storage with RFID is also limited to simple IDsversus the complex data NFC tags can hold.NFC Forum Popular Products Operations Rewrite Capabilities Available Memory Communication Price RangeType of This Type Specifications Speed (price per unit)1 Broadcom Topaz ISO 14443A User rewritable; can be 96 bytes, expandable to 2KB 106kbit/s Low marked as read-only by (~$1-2 USD) user2 MIFARE ISO 14443A User rewritable; can be 48 bytes, 144 bytes is 106kbit/s Low UltraLight marked as read-only by common, expandable to 2KB (~$1-2 USD) user3 Sony FeliCa JIS X 6319-4 Manufacture pre- variable, theoretical 1MB 212kbit/s or High configured to be read- 424kbit/s (~$8-10 USD or only or re-writable. higher)4 NXP DESFire, NXP ISO 14443A, Manufacture pre- 4KBfor DESFire, up to Up to 424kbit/s Medium-High SmartFX ISO 14443B configured to be read- 32KBfor SmartFX (~$3-4 USD) only or rewritable.MIFARE Operations Specifications Rewrite Capabilities Available Memory Communicatio Price RangeType n Speed (price per unit)Classic 1K ISO 14443A compatible, but NDEF User rewritable; only 752 bytes 106kbit/s Low is formatted using a proprietary manufacturer can mark (~$1 USD) protocol as read-onlyClassic 4K ISO 14443A compatible, but NDEF User rewritable; only 3440 bytes 106kbit/s Low-Medium is formatted using a proprietary manufacturer can mark (~$2 USD) protocol as read-only
  33. 33. NFC - Demo! klab.ca/spotlightandroid
  34. 34. Android ManifestIn AndroidManifest.xml (4.0+):<manifest ...> <uses-sdk android:minSdkVersion="10" /> <uses-feature android:name="android.hardware.nfc" android:required="true" /> <uses-permission android:name="android.permission.NFC" /> <application ...> <activity ...> <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> Could be custom MIME Type like: </intent-filter> application/root.gast.playground.nfc </activity> </application></manifest>
  35. 35. Activity - Reacting to NFC scansIn the .java file for your Activity:import android.nfc.NfcAdapter;import android.nfc.NfcAdapter.CreateNdefMessageCallback;import android.nfc.NfcEvent;//...NfcAdapter mNfcAdapter = NfcAdapter.getDefaultAdapter(this);Boolean nfcEnabled = mNfcAdapter.isEnabled(); Give priority to the foregroundmNfcAdapter.enableForegroundDispatch(this, activity to receive NFC scan intents. mNfcPendingIntent, mReadTagFilters, null); Enable Android Beam for peer-to-peermNfcAdapter.setNdefPushMessageCallback(this,this);
  36. 36. Activity - Formatting to NDEF FormatIn the .java file for your Activity:import android.nfc.NdefMessage;import android.nfc.NdefRecord;import android.nfc.tech.Ndef;import android.nfc.tech.NdefFormatable;//...// get the values from the forms text fields:Editable nameField = mName.getText();JSONObject computerSpecs = new JSONObject(); JSON for readability, not performancecomputerSpecs.put("name", nameField);String data = computerSpecs.toString();// create a new NDEF record w/ NDEF message using the apps custom MIME type:String mimeType = "application/root.gast.playground.nfc"; Unique to your appbyte[] mimeBytes = mimeType.getBytes(Charset.forName("UTF-8"));byte[] dataBytes = data.getBytes(Charset.forName("UTF-8"));byte[] id = new byte[0];NdefRecord record = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, mimeBytes, id, dataBytes); Not hard at all!NdefMessage m = new NdefMessage(new NdefRecord[] { record });
  37. 37. Activity - Reading NDEF FormatIn the .java file for your Activity:import android.nfc.Tag;//...Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);NdefMessage[] msgs = new NdefMessage[rawMsgs.length];for (int i = 0; i < rawMsgs.length; i++) { msgs[i] = (NdefMessage) rawMsgs[i];}NdefRecord record = msgs[0].getRecords()[0]; The info you wanted.byte[] payload = record.getPayload(); (e.g. string or json)
  38. 38. A case for NFC• Create low friction interactions• Augment physical objects (even offline)• Make your software app more tangible• Engage others to share and connect• Increase the viralness of your app• Possibility to be platform agnostic klab.ca/spotlightandroid
  39. 39. Mobile OS support for NFC Chart updated for Sept 27, 2012 klab.ca/spotlightandroid
  40. 40. Don’t worry, this isn’t Apple bashing... Hey! What By touchingdid you just do phones? there? Oh, I just sent him a playlist. klab.ca/spotlightandroid
  41. 41. Thank you! Oh, and check out some upcoming Arduino workshops! Sign up for mailing list on karma-laboratory.com. Pearl Chen Google+: klab.ca/+pearl@karma-laboratory.com Twitter: @PearlChen klab.ca/spotlightandroid

×