• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Better With Friends: Android+NFC+Arduino
 

Better With Friends: Android+NFC+Arduino

on

  • 4,877 views

 

Statistics

Views

Total Views
4,877
Views on SlideShare
4,873
Embed Views
4

Actions

Likes
5
Downloads
0
Comments
0

1 Embed 4

http://www.linkedin.com 4

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Better With Friends: Android+NFC+Arduino Better With Friends: Android+NFC+Arduino Presentation Transcript

    • 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
    • The future is already here— its just not very evenly distributed. William Gibson klab.ca/spotlightandroid
    • About meSome Comp Sci classes back there too ( Illustration created using modified output from visualize.me and my LinkedIn profile. )
    • 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 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.
    • Microcontrollers Arduino MaKey MaKey Basic Stamp1975: Microchip PIC
    • 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
    • Looking at the hardware trends• Small, yet mighty• Multi-screen• Always on• $$$ ⇾ $ Project Glass by Google Steve Mann - world’s first cyborg
    • ...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 for low-friction interactions (not related to mobile payments)• Combining with Bluetooth
    • Professional Android Sensor Programming Disclaimer: I authored chapter 11 (NFC) & co-authored 10 (AOA) (more info here) klab.ca/spotlightandroid
    • Android Open Accessory klab.ca/spotlightandroid
    • Android Open Accessory - Demo! klab.ca/spotlightandroid
    • Android Development Kit (ADK) Arduino Mega ADK klab.ca/spotlightandroid
    • More Android Development Kits! SparkFun IOIO Microchip PIC24F ADK ODroid ADK klab.ca/spotlightandroid
    • 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  }}
    • 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>
    • 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>
    • 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
    • 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
    • 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
    • Electronics components you can add Electronics inputs and outputs using LittleBits as an example of various components klab.ca/spotlightandroid
    • 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
    • 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
    • Speaking of connectors...
    • Are there wireless ADKs? Bluetooth Shields IOIO w/USB Bluetooth dongle Coming soon? Wifi Shield w/ integrated chip Coming soon? ADK2012
    • NFC(near field communications) klab.ca/spotlightandroid
    • What is NFC? NFC Scanner Radiowaves NFC Sticker: antenna and flash storage
    • 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.
    • 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
    • NFC - Demo! klab.ca/spotlightandroid
    • 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>
    • 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);
    • 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 });
    • 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)
    • 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
    • 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 phones? there? Oh, I just sent him a playlist. klab.ca/spotlightandroid
    • 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