实验六:RFID单模块实验
一、实验目的
通过ML-RC522读取S50IC卡的用户身份证明信息使用SPI通信协议传送给ESP32,ESP32接受到信息后与自身设定的可用的用户身份证明信息进行对比,并显示是否验证通过。
二、实验内容
1.连接ESP32和ML-RC522的引脚
2.将程序上传到ESP32
3.使用ML-RC522读取S50的用户身份证明并打印验证信息
三、实验设备
ML-RC522 RFID模块
S50 异性IC卡
ESP32开发板
杜邦线
四、实验步骤
1)连接引脚
RC522:
RC522的引脚:
引脚依次为:SDA SCK MOSI MISO SCL GND RST 3.3V
ESP32:
ESP32的引脚图:
连接:
将RC522与ESP32上对应的引脚连接:
2)上传程序
程序中需要MFRC522的库,在arduino上方工具->管理库中搜索MFRC522下载库
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 21 //定义RC522的SDA引脚的接线位置。
#define RST_PIN 22 //定义RC522的RST引脚的接线位置。
struct RFIDTag { //Tag标签结构体
uint8_t uid[4];
char *name;
};
MFRC522 rfid(SS_PIN, RST_PIN); //实例化类
struct RFIDTag tags[20] = { // 初始化结构资料,请自行修改RFID识别码
{{233, 232, 210, 126}, "Mini_Tag"},
{{0, 0, 0, 0}, "Mini_Tag1"},
{{1, 1, 1, 1}, "Mini_Tag2"},
};
byte totalTags = sizeof(tags) / sizeof(RFIDTag); //计算结构资料的数量
bool foundTag; //匹配标签
void setup() {
Serial.begin(115200);
SPI.begin(); // 初始化SPI总线
rfid.PCD_Init(); // 初始化 MFRC522
}
void loop() {
// 找卡
if ( ! rfid.PICC_IsNewCardPresent())
return;
// 验证NUID是否可读
if ( ! rfid.PICC_ReadCardSerial())
return;
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
// 检查是否MIFARE卡类型
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println("不支持读取此卡类型");
return;
}
Serial.print("十进制UID:");
printDec(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
byte *id = rfid.uid.uidByte; // 取得卡片的UID
byte idSize = rfid.uid.size; // 取得UID的長度
//对读取的卡号进行比较,注意数据类型。
for (byte i = 0; i < totalTags; i++) {
if (memcmp(tags[i].uid, id, idSize) == 0) { // 比对阵列资料值
Serial.println(tags[i].name); //显示标签名字
foundTag = true;
break;
}
if(i==totalTags-1){
Serial.println("验证失败");
}
}
// 使放置在读卡区的IC卡进入休眠状态,不再重复读卡
rfid.PICC_HaltA();
// 停止读卡模块编码
rfid.PCD_StopCrypto1();
}
void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++){
//Serial.print(buffer[i] < 0x10 ? " 0" : "");
Serial.print(buffer[i]);
Serial.print(" ");
}
}
3)读取S50信息并验证
将注册过的标签接近ML-RC522串口监视器打印验证结果,显示卡片名字。
若为其他卡片,则显示"验证失败"。