给实验室做门禁打卡、给门做NFC感应开关、给项目加个"拿卡才启动"的机制,RC522是RFID里最常见的一块。它工作在13.56MHz高频频段,能读能写,除了常见的MIFARE卡,也能识别很多NFC卡片,适合用来做刷卡开门、会员识别这类应用。它用SPI通信,接线引脚多但规律好记,这篇把每个脚对应Arduino哪个口、为什么供电偏要用3.3V讲清楚。
RC522引脚:SPI四线加上RST和IRQ
模块上一共八只脚:SDA、SCK、MOSI、MISO这四根是SPI通信线,再加RST复位、IRQ中断、VCC电源和GND地。芯片本体是MFRC522,读卡靠板上的那块白色天线线圈感应磁场。和很多5V外设不同,这张卡的核心是3.3V器件,供电用VCC接3.3V最稳妥,直接怼5V可能超压,不少模块带了稳压但别赌,老老实实接3.3V。

接线图:和Arduino Uno的SPI口对齐
在Arduino Uno上接法几乎固定:SDA接D10、SCK接D13、MOSI接D11、MISO接D12、RST接D9,VCC接3.3V,GND接地。IRQ这脚可以空着不接,用轮询读卡就够。记住SDA在这块模块上其实就是片选SS,别跟I2C的SDA搞混,它是SPI的选通信号。接好后去库管理器装MFRC522库,它把底层时序全包了。

代码:刷卡读出卡片UID
用Miguel Balboa的MFRC522库,套路固定:include头文件,声明spi和mfrc522对象,setup里SPI.begin()然后mfrc522.PCD_Init()初始化。loop里持续检查是不是有卡靠近,通过mfrc522.PICC_IsNewCardPresent()和PICC_ReadCardSerial()读到卡的UID,把四个字节的UID拼接成字符串就能当唯一ID用,判断通过后驱动继电器或蜂鸣器做开锁、提示音。要脱机当门禁,把白名单UID存在代码或EEPROM里比对即可。
常见坑:距离太近和信号干扰
RC522识别距离通常只有两三厘米,卡要贴得很近,这是高频近场RFID的特性,别指望隔老远感应。读不到卡先看供电是不是3.3V、再看接线有没有插错口,尤其SDA和MISO别装反。还有个大坑是天线上方别放金属件,硬币、螺丝刀放上去会直接干扰场强导致读卡失败。同一9组合卡要区分靠UID或扇区、密码,别只看卡面长得一样。


天线别放金属上面这条太实用,我桌上放把螺丝刀就死活读不到卡
SDA在RC522上是SPI片选不是I2C,这个混淆点讲清楚了我才没白折腾
供电用3.3V这个提醒到位,我是5V接多了觉得烫才改回来