介绍FRID-RC522模块的使用

RF/无线

1813人已加入

描述

射频识别「Radio Frequency IDentification,简称RFID」技术,又称为无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触,普遍应用于企业/校园一卡通、公交储值卡、高速公路收费、停车场、小区管理等。本篇介绍FRID-RC522模块的使用。

1

RFID模块

RFID 技术利用无线射频方式在阅读器和射频卡之间进行非接触双向数据传输,以达到目标识别和数据交换的目的。

  • 标签(Tag,即射频卡),耦合元件及芯片组成,标签含有内置天线,用于和射频天线间进行通信。
  • 阅读器:读取(在读写卡中还可以写入)标签信息的设备。
  • 天线:在标签和读取器间传递射频信号。

本实验使用的RFID-RC522模块采用MFRC522芯片,SPI通讯方式,支持Mifarel S50、S70 、Pro、Desfire等类型的卡,附带的白卡和钥匙扣是S50卡,每张卡都有自己的标识(UID)。

2

安装驱动库

Arduino有RC522驱动库,点击「项目」—「加载库」—「管理库」,查找选择「MFC522」最新版本进行安装。

射频识别技术

安装库

3

实验材料

  • Uno R3开发板
  • 配套USB数据线
  • 面包板及配套连接线
  • RFID-RC522模块及配套S50白卡和异形卡

4

实验步骤

1.根据原理图搭建电路图。

RC522模块的3.3V、GND分别对应连接开发板的3.3V、GND,模块的MOSI、MISO、SCK分别连接开发板的SPI接口11、12、13,模块的SDA、RST分别连接开发板数字管脚10、9。

实验原理图如下图所示:

射频识别技术

实验原理图

2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

1#include < SPI.h >
 2#include < MFRC522.h >
 3
 4#define SS_PIN 10
 5#define RST_PIN 9
 6
 7MFRC522 rfid(SS_PIN, RST_PIN);
 8
 9byte nuidPICC[4]; //存储读取的UID
10
11void setup() {
12  Serial.begin(9600);
13  SPI.begin();
14  rfid.PCD_Init();
15  Serial.println("RC522初始化完成...");
16}
17
18void loop() {
19  //搜索新卡
20  if ( ! rfid.PICC_IsNewCardPresent())
21    return;
22
23  // 验证NUID是否可读
24  if ( ! rfid.PICC_ReadCardSerial())
25    return;
26
27  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
28
29  // 检查是否MIFARE卡类型
30  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
31      piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
32      piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
33    Serial.println("不支持读取此卡类型");
34    return;
35  }
36
37  // 保存读取到的UID
38  for (byte i = 0; i < 4; i++) {
39    nuidPICC[i] = rfid.uid.uidByte[i];
40  }
41
42  Serial.print("十六进制UID:");
43  printHex(rfid.uid.uidByte, rfid.uid.size);
44  Serial.println();
45
46  Serial.print("十进制UID:");
47  printDec(rfid.uid.uidByte, rfid.uid.size);
48  Serial.println();
49
50  // 使放置在读卡区的IC卡进入休眠状态,不再重复读卡
51  rfid.PICC_HaltA();
52
53  // 停止读卡模块编码
54  rfid.PCD_StopCrypto1();
55}
56
57// 十六进制输出
58void printHex(byte *buffer, byte bufferSize) {
59  for (byte i = 0; i < bufferSize; i++) {
60    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
61    Serial.print(buffer[i], HEX);
62  }
63}
64
65//十进制输出
66void printDec(byte *buffer, byte bufferSize) {
67  for (byte i = 0; i < bufferSize; i++) {
68    Serial.print(buffer[i] < 0x10 ? " 0" : "");
69    Serial.print(buffer[i], DEC);
70  }
71}

3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

射频识别技术

程序下载

5

实验现象

打开串口监视器,波特率设置成与程序中相一致的9600。将卡靠近模块天线感应区,可读出卡片ID。

射频识别技术

实验现象

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分