This sketch shows how to use the most important features of the RFID/NFC module in Waspmote. First, the program looks for tags. After a tag was found, the program tries to authenticate a sector and writes in one block. Finally, it reads the content of that block.
Required Materials
1 x Waspmote
1 x Battery
1 x Coin cell
1 x RFID 13.56MHz board
1 x RFID 13.56MHz antenna
1 x RFID Tag
Notes
- Remember to connect the battery to Waspmote for proper operation.
- Don't write address 0, 3, 7, 11, 15, ... if you are not an advanced user. You could leave your tag unaccessible.
- Address 0 contains the IC manufacturer data. This block has read-only access.
- Address 3, 7, 11 contains the secret keys A and B. Writing in them will change access keys and conditions.
- This example can be executed in Waspmote v12 and Waspmote v15
Code
/* * ------ [RFID1356_01] RFID/NFC Basic Example -------- * * Explanation: This sketch shows how to use the most important features * of the RFID/NFC module in Waspmote. First, the program looks for tags. * After a tag was found, the program tries to authenticate a sector and * writes in one block. Finally, it reads the content of that block. * * Copyright (C) 2015 Libelium Comunicaciones Distribuidas S.L. * http://www.libelium.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Version: 0.4 * Design: David Gascon * Implementation: Ahmad Saad, Javier Solobera */#include<WaspRFID13.h>// stores the 16 bytes data to be written in a block: blockData writeData = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};// stores the 16 bytes data read from a block: blockData readData; // stores the key or password: KeyAccess key = { 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF }; // 'address' stores the block address: uint8_t address =0x09; // stores the UID (unique identifier) of a card: UIdentifier UID; // stores the answer to request: ATQ ans; // define variable to store authentication process resultuint8_t authentication;// define variable to store init process resultuint8_t state;voidsetup() { USB.ON();USB.println(F("RFID_01 Example")); ///////////////////////////////////////////////////////////////////// switch on the RFID/NFC @ 13.56 MHz module, and select the socket /////////////////////////////////////////////////////////////////// RFID13.ON(SOCKET0); USB.println(F("RFID/NFC @ 13.56 MHz module started")); } voidloop() { USB.println(); USB.println(F("Waiting for card...")); //////////////////////////// 1. Init the RFID reader ////////////////////////// state =RFID13.init(UID, ans); if (state ==0) {USB.print(F("The UID: ")); RFID13.print(UID,4); }else {USB.println(F("Card not found")); } ///////////////////////////////////////////////////////////////////// 2. Authenticate sector number 4 with its access key (2nd sector) /////////////////////////////////////////////////////////////////// authentication =RFID13.authenticate(UID, address, key);if( authentication ==0&& state ==0 ) { USB.println(F("Authentication OK")); } // init succeeded, authentication failedelseif ( authentication ==1&& state ==0 ) { USB.println(F("Authentication failed")); } ////////////////////////////////////////////////////////////////// 3. If authentication is OK, write 'writeData' array in the block ////////////////////////////////////////////////////////////////if( authentication ==0 ) { // Write processif( RFID13.write(address, writeData) ==1 ) { USB.println(F("Write failed")); } else { USB.println(F("Write block OK")); // Read from address after write processif (RFID13.read(address, readData) ==1) { USB.println(F("Read failed")); } else // success { USB.println(F("Read block OK")); USB.print(F("Data read: ")); RFID13.print(readData,16); } } } USB.println(); delay(1000); // wait some time each loop }
Output
The UID: 2E F6 6F 4A
Authentication OK
Write block OK
Read block OK
Data read: 0 1 2 3 4 5 6 7 8 9 A B C D E F