问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于Arduino Uno和RFID-RC522的RFID卡号读取技术详解

创作时间:
作者:
@小白创作中心

基于Arduino Uno和RFID-RC522的RFID卡号读取技术详解

引用
CSDN
1.
https://blog.csdn.net/2301_78925693/article/details/145371775

射频识别(RFID)技术因其非接触式、高效性和低成本的特点,广泛应用于门禁系统、物流管理和智能设备等领域。本文将通过Arduino Uno和MFRC522 RFID模块,手把手教你实现RFID卡号的读取,并提供完整的代码解析和硬件配置指南。

第一部分:硬件介绍

1.1 Arduino Uno

Arduino Uno是一款基于ATmega328P微控制器的开源开发板,具备14个数字I/O引脚和6个模拟输入引脚,是快速原型开发的理想选择。其兼容性强,支持SPI、I2C等多种通信协议。

1.2 RFID-RC522模块

MFRC522是基于NXP芯片的RFID读卡器模块,支持ISO/IEC 14443A标准的RFID卡和标签。

  • 工作频率:13.56 MHz
  • 通信接口:SPI(默认)、I2C、UART
  • 有效读取距离:3~5 cm

第二部分:工作原理

2.1 RFID技术基础

RFID系统由读卡器(Reader)和标签(Tag)组成。读卡器通过天线发射电磁波激活标签,标签返回存储的数据(如唯一UID)。

  • UID:每张RFID卡的唯一标识符(4~7字节)。

2.2 SPI通信协议

RC522模块默认使用SPI协议与Arduino通信。SPI的优点是高速、全双工,需要以下引脚:

  • SCK(时钟)、MOSI(主机输出)、MISO(主机输入)、SS(片选)。

第三部分:实现步骤

3.1 所需材料

  • Arduino Uno ×1
  • RFID-RC522模块 ×1
  • RFID卡片或标签 ×1
  • 杜邦线若干

3.2 硬件连接

按照下表连接Arduino与RC522模块:

RC522引脚
Arduino Uno引脚
SDA
10 (SS)
SCK
13
MOSI
11
MISO
12
GND
GND
RST
9
3.3V
3.3V

注意事项

  • RC522必须使用3.3V电源,否则可能损坏模块!
  • 确保SPI引脚(10~13)未被其他设备占用。

3.3 安装依赖库

在Arduino IDE中安装MFRC522库:

  1. 点击工具管理库,搜索MFRC522
  2. 选择最新版本并安装。

第四部分:代码解析

4.1 完整代码

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN 9    // 复位引脚
#define SS_PIN 10     // 片选引脚

MFRC522 mfrc522(SS_PIN, RST_PIN);  // 创建RC522实例

void setup() {
  Serial.begin(9600);   // 初始化串口
  SPI.begin();          // 初始化SPI总线
  mfrc522.PCD_Init();   // 初始化RC522
  delay(4);             // 等待模块稳定
  Serial.println("RFID Reader Ready!");
}

void loop() {
  // 检测是否有新卡片
  if (!mfrc522.PICC_IsNewCardPresent()) {
    return;
  }
  // 读取卡片UID
  if (!mfrc522.PICC_ReadCardSerial()) {
    return;
  }
  // 输出UID到串口
  Serial.print("Card UID:");
  dumpByteArray(mfrc522.uid.uidByte, mfrc522.uid.size);
  Serial.println();
  // 停止卡片通信
  mfrc522.PICC_HaltA();
}

// 辅助函数:以十六进制格式输出字节数组
void dumpByteArray(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }
}

实物展示:

通过串口监视器查看卡号:

4.2 关键代码解析

  1. 初始化阶段
  • SPI.begin():启动SPI总线通信。
  • mfrc522.PCD_Init():配置RC522的寄存器,使其进入工作状态。
  1. 卡片检测逻辑
  • PICC_IsNewCardPresent():通过天线检测是否有新卡片进入磁场范围。
  • PICC_ReadCardSerial():读取卡片的UID和SAK(选择应答)信息。
  1. UID输出
  • uid.uidByte:存储卡片UID的字节数组(例如0x01 0xFE 0xA3 0x1B)。
  • dumpByteArray():将字节数组转换为十六进制字符串,便于人类阅读。

第五部分:应用场景

5.1 门禁系统

将合法卡片的UID存储在Arduino的EEPROM中,当读取到匹配的UID时,控制继电器打开电磁锁。

5.2 资产追踪

结合LCD屏幕和SD卡模块,记录RFID标签的扫描时间和位置。

5.3 交互式项目

制作一个“魔法书”道具,当特定RFID卡片靠近时,触发音效或灯光效果。

第六部分:常见问题与解决

6.1 无法读取卡片

  • 检查电源:确保RC522使用3.3V供电。
  • 调整距离:卡片需贴近读卡器(<5cm)。
  • 验证接线:重点检查SDA(SS)、SCK、MOSI、MISO是否接触良好。

6.2 串口输出乱码

  • 确认串口波特率设置为9600。
  • 检查是否有多个程序占用串口。

6.3 扩展多张卡片

在代码中添加UID比对逻辑:

byte authorizedUID[4] = {0x01, 0x02, 0x03, 0x04}; // 合法卡片UID
if (memcmp(mfrc522.uid.uidByte, authorizedUID, 4) == 0) {
  Serial.println("Access Granted!");
}

通过本文,您已经掌握了使用Arduino Uno和RC522模块读取RFID卡号的核心技术。此项目不仅适合物联网入门学习,还可作为更复杂系统(如智能家居控制、仓储管理)的基础模块。下一步可以尝试结合Wi-Fi模块(如ESP8266)将UID数据上传到云端,或设计基于UID的个性化交互逻辑。

扩展学习建议

  • 研究MIFARE Classic 1K卡片的数据块读写
  • 探索RFID与Web API的集成(如HTTP请求)

希望本文能为您的IoT开发之旅提供扎实的起点!如有疑问,欢迎在评论区留言讨论!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号
基于Arduino Uno和RFID-RC522的RFID卡号读取技术详解