找回密码
 注册
搜索
查看: 1161|回复: 0

[资料] Arduino入门教程—RFID模块的使用(MF RC522)

[复制链接]
发表于 2017-8-4 10:47:04 | 显示全部楼层 |阅读模式

RFID模块的使用
RFID简介:射频识别即RFID(Radio Frequency IDentification)技术,又称无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触。常用的有低频(125k~134.2K)、高频(13.56Mhz)、超高频,微波等技术。RFID读写器也分移动式的和固定式的,目前RFID技术应用很广,如:图书馆,门禁系统,食品安全溯源等。
RFID技术的基本工作原理并不复杂:标签进入磁场后,接收解读器发出的射频信号,凭借感应电流所获得的能量发送出存储在芯片中的产品信息(Passive Tag,无源标签或被动标签),或者由标签主动发送某一频率的信号(Active Tag,有源标签或主动标签),解读器读取信息并解码后,送至中央信息系统进行有关数据处理。
一套完整的RFID系统, 是由阅读器(Reader)与电子标签(TAG)也就是所谓的应答器(Transponder)及应用软件系统三个部份所组成,其工作原理是Reader发射一特定频率的无线电波能量给Transponder,用以驱动Transponder电路将内部的数据送出,此时Reader便依序接收解读数据, 送给应用程序做相应的处理。
模块、白卡及钥匙扣图片:

本模块采用MF RC522芯片,模块与Arduino通讯方式为SPI(同步串行外设接口总线)通信,Arduino工作在主模式下,RC522工作在从模式下,模块与Arduino控制板连接方式如下:
arduino引脚
RFID模块引脚
D5
RST
D10
SS
D11
MOSI
D12
MISO
D13
SCK

模块连接图片:

Arduino SPI 库文件官方软件自带,我们需要下载一个RFID库文件:  RFID.zip (8.97 KB, 下载次数: 3377)
   下载地址2
库使用方法介绍:点击这里
将库文件放到指定文件夹,重新打开IDE即可调用该库文件,文件中有两个例程,下面是其中一个 SerialNumberRead :
#include <SPI.h>
#include <RFID.h>
//D10 - 读卡器CS引脚、D5 - 读卡器RST引脚
RFID rfid(10,5);
unsigned char status;
unsigned char str[MAX_LEN];  //MAX_LEN为16,数组最大长度
void setup()
{
  Serial.begin(9600);
  SPI.begin();
  rfid.init(); //初始化
}
void loop()
{
  //Search card, return card types
  if (rfid.findCard(PICC_REQIDL, str) == MI_OK) {
    Serial.println("Find the card!");
    // Show card type
    ShowCardType(str);
    //防冲突检测,读取卡序列号
    if (rfid.anticoll(str) == MI_OK) {
      Serial.print("The card's number is  : ");
      //显示卡序列号
      for(int i = 0; i < 4; i++){
        Serial.print(0x0F & (str >> 4),HEX);
        Serial.print(0x0F & str,HEX);
      }
      Serial.println("");
    }
    //选卡(锁定卡片,防止多数读取,去掉本行将连续读卡)
    rfid.selectTag(str);
  }
  rfid.halt();  //命令卡片进入休眠状态
}
void ShowCardType(unsigned char * type)
{
  Serial.print("Card type: ");
  if(type[0]==0x04&&type[1]==0x00)
    Serial.println("MFOne-S50");
  else if(type[0]==0x02&&type[1]==0x00)
    Serial.println("MFOne-S70");
  else if(type[0]==0x44&&type[1]==0x00)
    Serial.println("MF-UltraLight");
  else if(type[0]==0x08&&type[1]==0x00)
    Serial.println("MF-Pro");
  else if(type[0]==0x44&&type[1]==0x03)
    Serial.println("MF Desire");
  else
    Serial.println("Unknown");
}

[color=rgb(51, 102, 153) !important]复制代码
上面的代码,读出了射频卡的序列号与卡的类型,我使用的是复旦卡兼容S50的,飞利浦S50原装白卡要贵很多的,没用过~~
显示序列号代码:
Serial.print(0x0F & (str >> 4),HEX);
Serial.print(0x0F & str,HEX);

这样显示,可以避免4字节序列号中的0被省略!
串口打印数据:

月底出国产pin对pin直接替代品
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-6-18 21:37 , Processed in 0.050194 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表