本文共 2396 字,大约阅读时间需要 7 分钟。
RFID-RC522 模块是一种常用的射频识别(RFID)解决方案,能够通过短距离无线通信实现卡片识别。该模块采用 SPI 通信接口,与Arduino 开发板兼容,是构建门禁系统的经济实用选择。本文将从硬件接线到软件编程的全流程进行详细说明。
RC522 模块支持多种卡片类型,包括 MIFARE Mini、1K、4K 等。其主要特点是:
RC522 模块具有以下主要引脚:
接线示例:
在 Arduino IDE 中:
以下是读取卡片 UID 的典型代码:
#include#include #define SS_PIN 10#define RST_PIN 9MFRC522 rfid(SS_PIN, RST_PIN);void setup() { Serial.begin(9600); SPI.begin(); rfid.PCD_Init();}void loop() { if (!rfid.PICC_IsNewCardPresent()) return; if (!rfid.PICC_ReadCardSerial()) return; // 验证卡片类型 MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { Serial.println("不支持读取此卡类型"); return; } // 读取 UID 并输出 for (byte i = 0; i < 4; i++) { nuidPICC[i] = rfid.uid.uidByte[i]; } Serial.print("十六进制UID:"); printHex(rfid.uid.uidByte, rfid.uid.size); Serial.println(); Serial.print("十进制UID:"); printDec(rfid.uid.uidByte, rfid.uid.size); Serial.println(); rfid.PICC_HaltA(); rfid.PCD_StopCrypto1();}
PCD_Init 函数完成模块和 SPI 总线的初始化setup 函数中启动串口通信和 SPIPICC_IsNewCardPresent 检查是否有新卡片进入读卡区PICC_ReadCardSerial 获取卡片的唯一标识符PICC_GetType 确认卡片类型,避免支持不符合的卡片通过以上配置和编程,开发者可以轻松实现基于 RC522 模块的智能识别系统,满足多种实际场景需求。
转载地址:http://imnd.baihongyu.com/