YFROBOT创客社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 57604|回复: 34

Arduino入门教程—RFID模块的使用(SPI接口 RC522)

  [复制链接]

签到天数: 866 天

[LV.10]以坛为家III

发表于 2013-11-6 10:10:41 | 显示全部楼层 |阅读模式
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


我们需要下载一个RFID-SPI库文件:备用下载  /

库使用方法介绍:点击这里

将库文件放到指定文件夹,重新打开IDE即可调用该库文件,文件中有两个例程,下面是其中一个 SerialNumberRead :

  1. #include <SPI.h>
  2. #include <RFID.h>

  3. //D10 - 读卡器CS引脚、D5 - 读卡器RST引脚
  4. RFID rfid(10,5);   
  5. unsigned char status;
  6. unsigned char str[MAX_LEN];  //MAX_LEN为16,数组最大长度

  7. void setup()
  8. {
  9.   Serial.begin(9600);
  10.   SPI.begin();
  11.   rfid.init(); //初始化
  12. }

  13. void loop()
  14. {
  15.   //Search card, return card types
  16.   if (rfid.findCard(PICC_REQIDL, str) == MI_OK) {
  17.     Serial.println("Find the card!");
  18.     // Show card type
  19.     ShowCardType(str);
  20.     //防冲突检测,读取卡序列号
  21.     if (rfid.anticoll(str) == MI_OK) {
  22.       Serial.print("The card's number is  : ");
  23.       //显示卡序列号
  24.       for(int i = 0; i < 4; i++){
  25.         Serial.print(0x0F & (str[i] >> 4),HEX);
  26.         Serial.print(0x0F & str[i],HEX);
  27.       }
  28.       Serial.println("");
  29.     }
  30.     //选卡(锁定卡片,防止多数读取,去掉本行将连续读卡)
  31.     rfid.selectTag(str);
  32.   }
  33.   rfid.halt();  //命令卡片进入休眠状态
  34. }

  35. void ShowCardType(unsigned char * type)
  36. {
  37.   Serial.print("Card type: ");
  38.   if(type[0]==0x04&&type[1]==0x00)
  39.     Serial.println("MFOne-S50");
  40.   else if(type[0]==0x02&&type[1]==0x00)
  41.     Serial.println("MFOne-S70");
  42.   else if(type[0]==0x44&&type[1]==0x00)
  43.     Serial.println("MF-UltraLight");
  44.   else if(type[0]==0x08&&type[1]==0x00)
  45.     Serial.println("MF-Pro");
  46.   else if(type[0]==0x44&&type[1]==0x03)
  47.     Serial.println("MF Desire");
  48.   else
  49.     Serial.println("Unknown");
  50. }
复制代码
上面的代码,读出了射频卡的序列号与卡的类型,我使用的是复旦卡兼容S50的,飞利浦S50原装白卡要贵很多的,没用过~~
显示序列号代码:

Serial.print(0x0F & (str >> 4),HEX);

Serial.print(0x0F & str,HEX);


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

签到天数: 7 天

[LV.3]偶尔看看II

发表于 2014-3-21 08:58:39 | 显示全部楼层
RC522设计资料一份:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 2 反对 0

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

 楼主| 发表于 2015-3-9 08:49:01 | 显示全部楼层
你用的模块,SDA就是CS/SS引脚
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2015-9-25 19:58:01 | 显示全部楼层
怎么改端口??
回复 支持 反对

使用道具 举报

签到天数: 2 天

[LV.1]初来乍到

发表于 2016-1-6 18:33:58 | 显示全部楼层
路过学习一下
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

 楼主| 发表于 2016-3-28 08:08:05 | 显示全部楼层
dongbryant 发表于 2016-3-26 21:44
楼主,读不到卡号是怎么回事啊

你程序编译过去了吗,你用的Arduino IDE 和我用的不是一家的,不知道有没有影响!
可以试试下这个IDE看看:http://www.arduino.cc
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2016-5-10 21:38:45 | 显示全部楼层
您好,我按照你的连线连接好的arduino 与 RFID模块,烧写也成功了,可是把卡放上去却一直都读不到数据,我试过了很多代码,在串口一直都没有反应,请问是什么原因呢
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

 楼主| 发表于 2016-5-11 08:15:20 | 显示全部楼层
SmileLing 发表于 2016-5-10 21:38
您好,我按照你的连线连接好的arduino 与 RFID模块,烧写也成功了,可是把卡放上去却一直都读不到数据,我 ...

正确添加库,编译代码并下载至控制板(确保控制板正常工作),这步骤完成后,可能出现的原因我觉得只有接线了,接线没问题,板子坏了?
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2016-6-1 00:00:25 来自手机 | 显示全部楼层
麻烦问一下,你用的Arduino什么板子,是不是uno?
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

 楼主| 发表于 2016-6-1 08:09:32 | 显示全部楼层
喜洋洋 发表于 2016-6-1 00:00
麻烦问一下,你用的Arduino什么板子,是不是uno?

是的,UNO R3!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|联系我们|YFROBOT ( 苏ICP备20009901号-2  

GMT+8, 2024-7-14 01:28 , Processed in 0.269022 second(s), 28 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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