Wednesday, October 28, 2015

Abusing the Internet of Things: Blackouts, Freakouts, and Stakeouts

Abusing the Internet of Things: Blackouts, Freakouts, and Stakeouts

A future with billions of connected "things" includes monumental security concerns. This practical book explores how malicious attackers can abuse popular IoT-based devices, including wireless LED lightbulbs, electronic door locks, baby monitors, smart TVs, and connected cars.

If you’re part of a team creating applications for Internet-connected devices, this guide will help you explore security solutions. You’ll not only learn how to uncover vulnerabilities in existing IoT devices, but also gain deeper insight into an attacker’s tactics.
  • Analyze the design, architecture, and security issues of wireless lighting systems
  • Understand how to breach electronic door locks and their wireless mechanisms
  • Examine security design flaws in remote-controlled baby monitors
  • Evaluate the security design of a suite of IoT-connected home products
  • Scrutinize security vulnerabilities in smart TVs
  • Explore research into security weaknesses in smart cars
  • Delve into prototyping techniques that address security in initial designs
  • Learn plausible attacks scenarios based on how people will likely use IoT devices

Friday, October 23, 2015

Bluno Beetle Development Workshop

Bluno Beetle Development Workshop

Bluno Beetle is another milestone in wearable electronics device area based Arduino platform, which makes DIY users have more options in the project design. This book helps you to get started with Bluno Beetle development. The following is highlight topics:
* Preparing Development Environment
* Sketch Programming
* Setting up BLE
* Sketch Wireless Programming via BLE
* Bluetooth iBeacon

Tuesday, October 20, 2015

Building a Home Security System with Arduino

Design, build and maintain a home security system with Arduino Uno

Building a Home Security System with Arduino

About This Book
  • Learn what a security system is, how it works and create one for yourself
  • Develop a security system by setting up security cameras and motion detector systems
  • Manage and analyze all the data collected by the sensors from the security system, using a graphical application
Who This Book Is For
This book is for novice programmers and hobbyists who want to understand how Arduino can be used to program a home security system as well as to those who want to delve deeper into the world of Arduino.

What You Will Learn
  • Run cables and electricity to support home security infrastructure
  • Connect Arduino to your programming environment
  • Learn to interact with output devices – alarms, locks, shutters
  • Understand different parts of electronics circuit (MOSFET, resistor, capacitor)
  • Integrate home monitoring and security notifications with monitoring systems
  • Use logical level shifter with Arduino to send and receive data to and from Raspberry PI
In Detail
Arduino is an open source micro-controller built on a single circuit board that is capable of receiving sensory input from the environment and controlling interactive physical objects. It is also a development environment that allows the writing of software to the board, and is programmed in the Arduino programming language. It is used for a variety of different purposes and projects, from simple projects such as building a thermostat, to more advanced ones such as robotics, web servers, seismographs, home security systems and synthesizers.

This book will demonstrate how the Arduino can be used to develop a highly connected home security system by mobilizing a network of sensors which can feed alerts back to an Arduino when alarms are triggered. You will know the current state of security systems, well supported by the designs that fit best for your environment. Also, we will see some current technologies such as NFC, Wi-Fi and Bluetooth, and will finally create a complete web interface that will allow us to remotely manage our system, and even send daily bulletins with the summary of activity.

Towards the end, we'll develop a wireless home security system by setting up security cameras and motion detectors (door and gate trips, temperature sensors). We will then set up a centralized remote access hub (powered by the Arduino) that allows sensors to connect to the wireless home network that can be viewed and interacted by the user.

Style and approach
A step-by-step guide with numerous examples focusing on providing the practical skills required to build home security applications using Arduino.

Sunday, October 18, 2015

Arduino iOS Blueprints

Integrate the Arduino and iOS platforms to design amazing real-world projects to sense and control external devices

Arduino iOS Blueprints

About This Book
  • Cover the most widely used methods in the Internet of Things using Arduino and iOS integration through Wi-Fi Shield and the BLE Breakout board
  • Design five real-world projects including of electronics, Arduino code, and an iOS application that seamlessly work together
  • A detailed guide that covers various sensors and actuators through which Arduino interacts with the world including a light sensor, hall effect sensor, accelerometer, servo motor, DC motor, and TRIAC for power line loads
Who This Book Is For
This book is a technical guide for Arduino and iOS developers who have a basic knowledge of the two platforms but want to learn how to integrate them. The book includes a lot of external references to additional documentation and learning materials, so even if you are less experienced, you can improve your knowledge on the subjects covered.

What You Will Learn
  • Design circuits with Arduino using sensors and actuators
  • Write code to handle analog and digital sensors with the most used protocols including OneWire, I2C, and SPI)
  • Store data on SD Card and in EEPROM
  • Build iOS applications using the MCV pattern and the UIKit components
  • Allow your applications to control Arduino and its hooked-up devices
  • Manage TCP/IP, UDP, and Bluetooth BLE communication between Arduino and iOS devices
  • Make your iOS application take advantage of the sensors available in the iOS devices including accelerometer, gyroscope, and compass
  • Develop iOS applications that use iBeacons
In Detail
Arduino and iOS devices have reached wide popularity due to their simple way of use and flexibility. Hence, their integration opens up new opportunities, allowing everyone to build devices that are extremely useful in everyday life.

You will first learn how to control Arduino from an iPhone or iPad by writing the Arduino sketch, the iOS application, and integrating everything together via Wi-Fi or Bluetooth BLE. You will then learn about various components that interact with the Arduino such as digital and analog I/O, Wi-Fi shield, Bluetooth BLE, SD card, OneWire, I2C, and so on. You will also learn about iOS, which includes the development of an application from scratch, GUI design and MVC, UIKit, iOS sensors, TCP and Bluetooth BLE communication, and more.

All the projects are described in detail, providing you with a learning tool, not just some sketches or some iOS code to copy.

Style and approach
This is a project-based book with a step-by-step guide that covers everything that you need to build an Arduino-iOS project, right from defining the basic requirements to the coding and testing the entire project. Each chapter ends with ideas on how to improve the project and to constantly learn the topics covered.

Thursday, October 15, 2015

BBC micro:bit - a pocket-sized, codeable computer that allows children to get creative with technology.

Android control Arduino Due LED, using ADK (Accessory Development Kit)

I have old posts of "Android code sending command to Arduino Due to turn LED On/Off (Android side)" and "Control Arduino Due LED from Android using ADK (Arduino Due side)" to show a simple control from Android to Arduino Due using ADK (Accessory Development Kit), at 2013. At both Android and Arduino development tools updated, I re-visit the example code again.



Arduino Due Side:

In current Arduino IDE 1.6.5, both Arduino Due and ADK library are not include by default, so you have to:
- Install Arduino Due to Arduino IDE
- Install USBHost library to Arduino IDE

DurAdkLed.ino (same as before)
#include "variant.h"
#include <stdio.h>
#include <adk.h>

// Accessory descriptor. It's how Arduino identifies itself to Android.
char applicationName[] = "HelloADKLED"; // the app on your phone
char accessoryName[] = "Arduino Due"; // your Arduino board
char companyName[] = "Arduino-er";
 
// Make up anything you want for these
char versionNumber[] = "0.1";
char serialNumber[] = "1";
char url[] = "https://sites.google.com/site/arduinosite/exercise/androidadkled/AndroidADKLED_0.1.apk";
 
USBHost Usb;
ADK adk(&Usb, companyName, applicationName, accessoryName,versionNumber,url,serialNumber);
 
// Pin 13 has an LED connected on most Arduino boards.
int led = 13;
 
void setup() {
    Serial.begin(9600);
    cpu_irq_enable();
   
    pinMode(led, OUTPUT);
    //Indicate start of program
    digitalWrite(led, LOW);
    delay(2000);
    digitalWrite(led, HIGH);
    for(int i = 0; i <= 2; i++){
        digitalWrite(led, HIGH);
        delay(250);
        digitalWrite(led, LOW);
        delay(250);
    }
}
 
#define RCVSIZE 128
 
void loop() {
   
    char helloworld[] = "Hello World!\r\n";
   
    uint8_t buf[RCVSIZE];
    uint32_t nbread = 0;
   
    Usb.Task();
     
    if (adk.isReady()){
      
        adk.read(&nbread, RCVSIZE, buf);
        if (nbread > 0){
            adk.write(nbread, buf);
            
            //Convert nbread to String
            String s = "";
            for (uint32_t i = 0; i < nbread; ++i) {
              s += (char)buf[i];
            }
            
            if(s == "LEDON"){
              digitalWrite(led, HIGH);
            }else if(s == "LEDOFF"){
              digitalWrite(led, LOW);
            }
        }
         
    }
     
}


Android Side:

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.blogspot.android_er.androidadkled" >

    <uses-feature android:name="android.hardware.usb.accessory"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <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/myfilter"/>
        </activity>
    </application>

</manifest>


xml/myfilter.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <usb-accessory
        manufacturer="Arduino-er"
        model="HelloADKLED"
        version="0.1"/>
</resources>

layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:autoLink="web"
        android:text="http://android-er.blogspot.com/"
        android:textStyle="bold" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:autoLink="web"
        android:text="http://arduino-er.blogspot.com/"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <RadioGroup
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <RadioButton
            android:id="@+id/LedOn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="LED On" />
        <RadioButton
            android:id="@+id/LedOff"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="LED Off" />
    </RadioGroup>
</LinearLayout>


AbstractAdkActivity.java
package com.blogspot.android_er.androidadkled;

import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.usb.UsbAccessory;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.support.v7.app.AppCompatActivity;

import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public abstract  class AbstractAdkActivity extends AppCompatActivity {

    private static int RQS_USB_PERMISSION = 0;
    private static final String ACTION_USB_PERMISSION = "arduino-er.usb_permission";
    private PendingIntent PendingIntent_UsbPermission;

    private UsbManager myUsbManager;
    private UsbAccessory myUsbAccessory;
    private ParcelFileDescriptor myAdkParcelFileDescriptor;
    private FileInputStream myAdkInputStream;
    private FileOutputStream myAdkOutputStream;
    boolean firstRqsPermission;

    //do something in onCreate()
    protected abstract void doOnCreate(Bundle savedInstanceState);
    //do something after adk read
    protected abstract void doAdkRead(String stringIn);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);

        myUsbManager = (UsbManager)getSystemService(Context.USB_SERVICE);
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED);
        registerReceiver(myUsbReceiver, intentFilter);

        //Ask USB Permission from user
        Intent intent_UsbPermission = new Intent(ACTION_USB_PERMISSION);
        PendingIntent_UsbPermission = PendingIntent.getBroadcast(
                this,      //context
                RQS_USB_PERMISSION,  //request code
                intent_UsbPermission, //intent
                0);      //flags
        IntentFilter intentFilter_UsbPermission = new IntentFilter(ACTION_USB_PERMISSION);
        registerReceiver(myUsbPermissionReceiver, intentFilter_UsbPermission);

        firstRqsPermission = true;
        doOnCreate(savedInstanceState);
    }

    @Override
    protected void onResume() {
        super.onResume();

        if(myAdkInputStream == null || myAdkOutputStream == null){

            UsbAccessory[] usbAccessoryList = myUsbManager.getAccessoryList();
            UsbAccessory usbAccessory = null;
            if(usbAccessoryList != null){
                usbAccessory = usbAccessoryList[0];

                if(usbAccessory != null){
                    if(myUsbManager.hasPermission(usbAccessory)){
                        //already have permission
                        OpenUsbAccessory(usbAccessory);
                    }else{

                        if(firstRqsPermission){

                            firstRqsPermission = false;

                            synchronized(myUsbReceiver){
                                myUsbManager.requestPermission(usbAccessory,
                                        PendingIntent_UsbPermission);
                            }
                        }

                    }
                }
            }
        }
    }

    //Write String to Adk
    void WriteAdk(String text){

        byte[] buffer = text.getBytes();

        if(myAdkOutputStream != null){

            try {
                myAdkOutputStream.write(buffer);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        closeUsbAccessory();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myUsbReceiver);
        unregisterReceiver(myUsbPermissionReceiver);
    }

    Runnable runnableReadAdk = new Runnable(){

        @Override
        public void run() {
            int numberOfByteRead = 0;
            byte[] buffer = new byte[255];

            while(numberOfByteRead >= 0){

                try {
                    numberOfByteRead = myAdkInputStream.read(buffer, 0, buffer.length);
                    final StringBuilder stringBuilder = new StringBuilder();
                    for(int i=0; i<numberOfByteRead; i++){
                        stringBuilder.append((char)buffer[i]);
                    }

                    runOnUiThread(new Runnable(){

                        @Override
                        public void run() {
                            doAdkRead(stringBuilder.toString());
                        }});


                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    break;
                }
            }
        }

    };

    private BroadcastReceiver myUsbReceiver = new BroadcastReceiver(){

        @Override
        public void onReceive(Context context, Intent intent) {

            String action = intent.getAction();
            if(action.equals(UsbManager.ACTION_USB_ACCESSORY_DETACHED)){

                UsbAccessory usbAccessory =
                        (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);

                if(usbAccessory!=null && usbAccessory.equals(myUsbAccessory)){
                    closeUsbAccessory();
                }
            }
        }
    };

    private BroadcastReceiver myUsbPermissionReceiver = new BroadcastReceiver(){

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if(action.equals(ACTION_USB_PERMISSION)){

                synchronized(this){

                    UsbAccessory usbAccessory =
                            (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);

                    if(intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)){
                        OpenUsbAccessory(usbAccessory);
                    }else{
                        finish();
                    }
                }
            }
        }

    };

    private void OpenUsbAccessory(UsbAccessory acc){
        myAdkParcelFileDescriptor = myUsbManager.openAccessory(acc);
        if(myAdkParcelFileDescriptor != null){

            myUsbAccessory = acc;
            FileDescriptor fileDescriptor = myAdkParcelFileDescriptor.getFileDescriptor();
            myAdkInputStream = new FileInputStream(fileDescriptor);
            myAdkOutputStream = new FileOutputStream(fileDescriptor);

            Thread thread = new Thread(runnableReadAdk);
            thread.start();
        }
    }

    private void closeUsbAccessory(){

        if(myAdkParcelFileDescriptor != null){
            try {
                myAdkParcelFileDescriptor.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        myAdkParcelFileDescriptor = null;
        myUsbAccessory = null;
    }
}


MainActivity.java
package com.blogspot.android_er.androidadkled;

import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AbstractAdkActivity  {

    TextView textIn;
    RadioButton ledOn, ledOff;

    @Override
    protected void doOnCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);
        textIn = (TextView)findViewById(R.id.textin);
        ledOn = (RadioButton)findViewById(R.id.LedOn);
        ledOff = (RadioButton)findViewById(R.id.LedOff);

        ledOn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){

            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                                         boolean isChecked) {
                if(isChecked){
                    WriteAdk("LEDON");
                    Toast.makeText(getApplicationContext(),
                            "LEDON", Toast.LENGTH_LONG).show();
                }
            }});

        ledOff.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){

            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                                         boolean isChecked) {
                if(isChecked){
                    WriteAdk("LEDOFF");
                    Toast.makeText(getApplicationContext(),
                            "LEDOFF", Toast.LENGTH_SHORT).show();
                }
            }});

    }

    @Override
    protected void doAdkRead(String stringIn) {
        textIn.setText(stringIn);
    }
}


download filesDownload the files (Android Studio Format) .
download filesDownload APK.

adk.h: No such file or directory and Install USBHost library to Arduino IDE


adk.h (Accessory Development Kit) is part of USBHost library. In current Arduino IDE 1.6.5, it's not included by default.

To install USBHost:
> Sketch > Include Library > Manage Libraries
> Search to install USBHost.



Wednesday, October 14, 2015

No Arduino Due in Arduino Software


In current Arduino Software (IDE) 1.6.5, Arduino Due is not in default Board list. To install Arduino Due:
> Tools > Board > Boards Manager
> Select to install the item for Arduino Due


Make: 3D Printing Projects: Toys, Bots, Tools, and Vehicles To Print Yourself (Make : Technology on Your Time)

Make: 3D Printing Projects: Toys, Bots, Tools, and Vehicles To Print Yourself (Make : Technology on Your Time)

Even if you've never touched a 3D printer, these projects will excite and empower you to learn new skills, extend your current abilities, and awaken your creative impulses. Each project uses a unique combination of electronics, hand assembly techniques, custom 3D-printed parts, and software, while teaching you how to think through and execute your own ideas.

Written by the founder of Printrbot, his staff, and veteran DIY authors, this book of projects exemplifies the broad range of highly personalized, limit-pushing project possibilities of 3D printing when combined with affordable electronic components and materials.

In Make: 3D Printing Projects, you'll:
  • Print and assemble a modular lamp that's suitable for beginners--and quickly gets you incorporating electronics into 3D-printed structures.
  • Learn about RC vehicles by fabricating--and driving--your own sleek, shiny, and fast Inverted Trike.
  • Model a 1950s-style Raygun Pen through a step-by-step primer on how to augment an existing object through rapid prototyping.
  • Fabricate a fully functional, battery-powered screwdriver, while learning how to tear down and reconstruct your own tools.
  • Get hands-on with animatronics by building your own set of life-like mechanical eyes.
  • Make a Raspberry Pi robot that rides a monorail of string, can turn corners, runs its own web server, streams video, and is remote-controlled from your phone.
  • Build and customize a bubble-blowing robot, flower watering contraption, and a DIY camera gimbal.

Make: Design for 3D Printing: Scanning, Creating, Editing, Remixing, and Making in Three Dimensions (Make : Technology on Your Time)

Make: Design for 3D Printing: Scanning, Creating, Editing, Remixing, and Making in Three Dimensions (Make : Technology on Your Time)

France's Le FabShop has extensive experience testing 3D printers and creating digital models for them. From an articulated Makey Robot to a posable elephant model, Samuel N. Bernier and the rest of Le FabShop's team have created some of the most-printed designs in the 3D printing world. This book uses their work to teach you how to get professional results out of a desktop 3D printer without needing to be trained in design. Through a series of tutorials and case studies, this book gives you the techniques to turn a product idea into a 3D model and a prototype. Focusing on free design software and affordable technologies, the exercises in this book are the perfect boost to any beginner looking to start designing for 3D printing.

Designing for the tool and finding a good tool to fit the design--these are at the core of the product designer's job, and these are the tools this book will help you master.

Foreword by Carl Bass, Autodesk's CEO, a passionate and prolific Maker.

In Design For 3D Printing, you'll:
  • Learn the different 3D printing technologies
  • Choose the best desktop 3D printer
  • Discover free 3D modeling software
  • Become familiar with 3D scanning solutions
  • Find out how to go from a bad to a good 3D source file, one that's ready-to-print

Monday, October 5, 2015

Arduino Uno + RFID-RC522, MFRC522 library example DumpInfo




This post show how Arduino Uno + RFID-RC522 (RFID reader) to dump info of RFID key and RFID card, using Arduino RFID Library for MFRC522.

Arduino library for MFRC522 and other RFID RC522 based modules (https://github.com/miguelbalboa/rfid) read and write different types of Radio-Frequency IDentification (RFID) cards on your Arduino using a RC522 based reader connected via the Serial Peripheral Interface (SPI) interface.

Install MFRC522 library to Arduino IDE:

You can download ZIP file from the library web page, and it to Arduino library, read the video below. After library added, it will be in the folder your_Documents\Arduino\libraries\,


and fritzing parts is in your_Documents\Arduino\libraries\rfid-master\doc\fritzing\.


Connect Arduino Uno and RFID-RF522 module:


In Arduino IDE, Open Example of DumpInfo in MFRC522:



/*
 * ----------------------------------------------------------------------------
 * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid
 * for further details and other examples.
 * 
 * NOTE: The library file MFRC522.h has a lot of useful info. Please read it.
 * 
 * Released into the public domain.
 * ----------------------------------------------------------------------------
 * Example sketch/program showing how to read data from a PICC (that is: a RFID
 * Tag or Card) using a MFRC522 based RFID Reader on the Arduino SPI interface.
 * 
 * When the Arduino and the MFRC522 module are connected (see the pin layout
 * below), load this sketch into Arduino IDE then verify/compile and upload it.
 * To see the output: use Tools, Serial Monitor of the IDE (hit Ctrl+Shft+M).
 * When you present a PICC (that is: a RFID Tag or Card) at reading distance
 * of the MFRC522 Reader/PCD, the serial output will show the ID/UID, type and
 * any data blocks it can read. Note: you may see "Timeout in communication"
 * messages when removing the PICC from reading distance too early.
 * 
 * If your reader supports it, this sketch/program will read all the PICCs
 * presented (that is: multiple tag reading). So if you stack two or more
 * PICCs on top of each other and present them to the reader, it will first
 * output all details of the first and then the next PICC. Note that this
 * may take some time as all data blocks are dumped, so keep the PICCs at
 * reading distance until complete.
 * 
 * Typical pin layout used:
 * -----------------------------------------------------------------------------------------
 *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
 *             Reader/PCD   Uno           Mega      Nano v3    Leonardo/Micro   Pro Micro
 * Signal      Pin          Pin           Pin       Pin        Pin              Pin
 * -----------------------------------------------------------------------------------------
 * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
 * SPI SS      SDA(SS)      10            53        D10        10               10
 * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
 * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
 * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
 */

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN     9       // 
#define SS_PIN      10      //

MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance

void setup() {
    Serial.begin(9600);     // Initialize serial communications with the PC
    while (!Serial);        // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
    SPI.begin();            // Init SPI bus
    mfrc522.PCD_Init();     // Init MFRC522
    ShowReaderDetails();    // Show details of PCD - MFRC522 Card Reader details
    Serial.println(F("Scan PICC to see UID, type, and data blocks..."));
}

void loop() {
    // Look for new cards
    if ( ! mfrc522.PICC_IsNewCardPresent()) {
        return;
    }

    // Select one of the cards
    if ( ! mfrc522.PICC_ReadCardSerial()) {
        return;
    }

    // Dump debug info about the card; PICC_HaltA() is automatically called
    mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}

void ShowReaderDetails() {
    // Get the MFRC522 software version
    byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg);
    Serial.print(F("MFRC522 Software Version: 0x"));
    Serial.print(v, HEX);
    if (v == 0x91)
        Serial.print(F(" = v1.0"));
    else if (v == 0x92)
        Serial.print(F(" = v2.0"));
    else
        Serial.print(F(" (unknown)"));
    Serial.println("");
    // When 0x00 or 0xFF is returned, communication probably failed
    if ((v == 0x00) || (v == 0xFF)) {
        Serial.println(F("WARNING: Communication failure, is the MFRC522 properly connected?"));
    }
}



- Similarly example run on Android: Android NFC: readBlock() for MifareClassic, to dump data in RFID tag
Step-by-step to make MFRC522-python work on Raspberry Pi 2/raspbian Jessie, read RFID tags using RFID Reader, RFID-RC522.
Raspberry Pi 2 + MFRC522-python - Dump RFID Tag data using mxgxw/MFRC522-python

Thursday, October 1, 2015

Install Arduino driver on Windows 10


Due to any reason, you cannot install the Arduino driver on Windows, you can try to update the driver manually in your Device Manager.
  • Plug in your board and wait for Windows to begin it's driver installation process. After a few moments, the process will fail, despite its best efforts
  • Click on the Start Menu, and open up the Control Panel.
  • While in the Control Panel, navigate to System and Security. Next, click on System. Once the System window is up, open the Device Manager.
  • Look under Ports (COM & LPT). You should see an open port named "Arduino UNO (COMxx)". If there is no COM & LPT section, look under "Other Devices" for "Unknown Device".
  • Right click on the "Arduino UNO (COmxx)" port and choose the "Update Driver Software" option.
  • Next, choose the "Browse my computer for Driver software" option.
  • Finally, navigate to and select the driver file named "arduino.inf", located in the "Drivers" folder of the Arduino Software download (not the "FTDI USB Drivers" sub-directory). If you are using an old version of the IDE (1.0.3 or older), choose the Uno driver file named "Arduino UNO.inf"
  • Windows will finish up the driver installation from there.

reference: Getting Started with Arduino on Windows - Install the drivers