MFRC5C522 is a combined reader and writer for RFID tags that comply with ISO/IEC 14443 like A/MIFARE and NTAG. The commonly available inexpensive boards have an SPI interface, we will make it talk with Explore M3 in this tutorial.
Hookup
The default SPI interface for Explore M3 is mapped to SPI1 of the controller. It simply means whenever you're interfacing an SPI device you used use these pins and functions like SPI.begin() will use these pins.
Explore M3 | MFRC522 Breakout | Description | |
---|---|---|---|
10 | MOSI | Master Out Slave In | |
11 | MISO | Master In Slave Out | |
12 | SCK | Serial Clock | |
13 | SDA | This is wrongly labelled, this should have been SS | |
5 | RESET | SPI reset signal |
Code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <SPI.h> | |
#include <MFRC522.h> | |
#define RST_PIN 5 // Configurable, see typical pin layout above | |
#define SS_PIN 13 // Configurable, see typical pin layout above | |
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance | |
void setup() { | |
// delay(5000); | |
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) | |
Serial.println("in setup"); | |
SPI.begin(); // Init SPI bus | |
Serial.print("spi intialized"); | |
mfrc522.PCD_Init(); // Init MFRC522 | |
Serial.print("card intialized intialized"); | |
mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details | |
Serial.println(F("Scan PICC to see UID, SAK, 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)); | |
} |
Demo
Credits
A big thanks to Miguel for writing beautiful library with various examples right from dumping card info to reading and writing data to it.