Arduino + RFID 读取 IC 卡 Arduino uno中获得RFID的UID 并通过串口转发RFID卡号

时间:2023-03-09 08:08:16
Arduino + RFID 读取 IC 卡  Arduino uno中获得RFID的UID 并通过串口转发RFID卡号

RFID简介:射频识别即RFID(Radio Frequency IDentification)技术,又称无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触。常用的有低频(125k~134.2K)、高频(13.56Mhz)、超高频,微波等技术。RFID读写器也分移动式的和固定式的,目前RFID技术应用很广,如:图书馆,门禁系统,食品安全溯源等。

硬件准备

(基于Arduino的开发板、MFRC522读卡器模块)

Arduino Uno * 1

Arduino + RFID 读取 IC 卡  Arduino uno中获得RFID的UID 并通过串口转发RFID卡号

RFID-RC522 模块 * 1

Arduino + RFID 读取 IC 卡  Arduino uno中获得RFID的UID 并通过串口转发RFID卡号

IC卡 * 1-2

Arduino + RFID 读取 IC 卡  Arduino uno中获得RFID的UID 并通过串口转发RFID卡号

RFID技术现在都非常成熟和应用广泛,今天我们就来看看这个RFID如何实现读取里面的数据

接线

Arduino Uno <—> RFID-RC522

10 <—> SDA

13 <—> SCK

11 <—> MOSI

12 <—> MISO

null <—> IRQ

GND <—> GND

9 <—> RST

3.3V <—> 3.3V

需要用到RFID-RC522的库

法一、下载:https://github.com/miguelbalboa/rfid

下载解压到Arduino IDE的安装路径里的库文件夹libraries

https://download.****.net/download/v86337286/11813061

法二、点开管理库,在搜索栏里输入RC522,找到图中的库,

Arduino + RFID 读取 IC 卡  Arduino uno中获得RFID的UID 并通过串口转发RFID卡号

Arduino + RFID 读取 IC 卡  Arduino uno中获得RFID的UID 并通过串口转发RFID卡号

点击安装(我这图是已经安装过)

Arduino + RFID 读取 IC 卡  Arduino uno中获得RFID的UID 并通过串口转发RFID卡号

示例代码 .

Arduino + RFID 读取 IC 卡信息

读取 IC 卡信息后并通过串口将卡号及0扇区卡号数据打印出来,其他15个扇区不显示扇区内容

代码如下

/*
* --------------------------------------------------------------------------------------------------------------------
* Example sketch/program showing how to read data from a PICC to serial.
* --------------------------------------------------------------------------------------------------------------------
* This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid
*
* 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.
*
* @license Released into the public domain.
*
* Typical pin layout used:
* -----------------------------------------------------------------------------------------
* MFRC522 Arduino Arduino Arduino Arduino Arduino
* Reader/PCD Uno/101 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 // Configurable, see typical pin layout above
#define SS_PIN 10 // Configurable, see typical pin layout above 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
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));
}

运行此代码并将其中一张卡放入RFID卡时,很多信息显示在Arduino IDE的串行监视器上

Arduino + RFID 读取 IC 卡  Arduino uno中获得RFID的UID 并通过串口转发RFID卡号

看完了上面那如何在Arduino中获得RFID的UID?

Arduino uno中只获得RFID的UID 并通过串口转发

法一

创建了另一个函数: PICC_DumpDetailsToSerialUid(Uid *uid)

函数如下

//This is just for read UID!

void MFRC522::PICC_DumpDetailsToSerialUid(Uid *uid){

Serial.print(F(“Card JUST UID :”));

for (byte i = 0; i < uid->size; i++) {

if(uid->uidByte[i] < 0x10)

Serial.print(F(" 0"));

else

Serial.print(F(" "));

Serial.print(uid->uidByte[i], HEX);

}

Serial.println();

}

可以把它放在你需要的任何地方

示例:

Arduino + RFID 读取 IC 卡  Arduino uno中获得RFID的UID 并通过串口转发RFID卡号

添加该功能后,您需要进入第410行的 MFRC522.h 库并添加

void PICC_DumpDetailsToSerialUid(Uid *uid);

在该库中进行了这两次编辑后,您可以在任意位置调用该函数 .

示例:

Arduino + RFID 读取 IC 卡  Arduino uno中获得RFID的UID 并通过串口转发RFID卡号

用Arduino调用它: mfrc522.PICC_DumpDetailsToSerialUid(&(mfrc522.uid)); 只仅且只有一个函数用于uid读取

效果

Arduino + RFID 读取 IC 卡  Arduino uno中获得RFID的UID 并通过串口转发RFID卡号

法二

返回UID的函数 .

/**
* mfrc522.PICC_IsNewCardPresent() should be checked before
* @return the card UID
*/
unsigned long getID(){
if ( ! mfrc522.PICC_ReadCardSerial()) { //Since a PICC placed get Serial and continue
return -1;
}
unsigned long hex_num;
hex_num = mfrc522.uid.uidByte[0] << 24;
hex_num += mfrc522.uid.uidByte[1] << 16;
hex_num += mfrc522.uid.uidByte[2] << 8;
hex_num += mfrc522.uid.uidByte[3];
mfrc522.PICC_HaltA(); // Stop reading
return hex_num;
}

例如这样使用:

if(mfrc522.PICC_IsNewCardPresent()) {
unsigned long uid = getID();
if(uid != -1){
Serial.print("Card detected, UID: "); Serial.println(uid);
}
}

Arduino + RFID 读取 IC 卡  Arduino uno中获得RFID的UID 并通过串口转发RFID卡号