YFROBOT创客社区
标题: Arduino入门教程—RFID模块的使用(SPI接口 RC522) [打印本页]
作者: AllBlue 时间: 2013-11-6 10:10
标题: Arduino入门教程—RFID模块的使用(SPI接口 RC522)
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便依序接收解读数据, 送给应用程序做相应的处理。
模块、白卡及钥匙扣图片:
[attach]851[/attach]
本模块采用MF RC522芯片,模块与Arduino通讯方式为SPI(同步串行外设接口总线)通信,Arduino工作在主模式下,RC522工作在从模式下,模块与Arduino控制板连接方式如下:
arduino引脚 | RFID模块引脚 |
D5 | RST |
D10 | SS |
D11 | MOSI |
D12 | MISO |
D13 | SCK |
我们需要下载一个RFID-SPI库文件:备用下载 / [attach]630[/attach]
库使用方法介绍:点击这里
将库文件放到指定文件夹,重新打开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[i] >> 4),HEX);
- Serial.print(0x0F & str[i],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");
- }
复制代码 上面的代码,读出了射频卡的序列号与卡的类型,我使用的是复旦卡兼容S50的,飞利浦S50原装白卡要贵很多的,没用过~~
显示序列号代码:
Serial.print(0x0F & (str >> 4),HEX);
Serial.print(0x0F & str,HEX);
这样显示,可以避免4字节序列号中的0被省略!
串口打印数据:
[attach]631[/attach]
作者: YFRobot 时间: 2014-3-21 08:58
RC522设计资料一份:[attach]853[/attach]
作者: AllBlue 时间: 2015-3-9 08:49
你用的模块,SDA就是CS/SS引脚
作者: wubadao 时间: 2015-9-25 19:58
怎么改端口??
作者: weiqi0911 时间: 2016-1-6 18:33
路过学习一下
作者: AllBlue 时间: 2016-3-28 08:08
你程序编译过去了吗,你用的Arduino IDE 和我用的不是一家的,不知道有没有影响!
可以试试下这个IDE看看:http://www.arduino.cc
作者: SmileLing 时间: 2016-5-10 21:38
您好,我按照你的连线连接好的arduino 与 RFID模块,烧写也成功了,可是把卡放上去却一直都读不到数据,我试过了很多代码,在串口一直都没有反应,请问是什么原因呢
作者: AllBlue 时间: 2016-5-11 08:15
正确添加库,编译代码并下载至控制板(确保控制板正常工作),这步骤完成后,可能出现的原因我觉得只有接线了,接线没问题,板子坏了?
作者: 喜洋洋 时间: 2016-6-1 00:00
麻烦问一下,你用的Arduino什么板子,是不是uno?
作者: AllBlue 时间: 2016-6-1 08:09
是的,UNO R3!
作者: zhang 时间: 2016-7-19 11:14
楼主,我下载不了资料啊,能不能帮忙发一份我邮箱哈,,748382907@qq.com
作者: zhang 时间: 2016-7-19 11:18
版主能不能发我一份邮箱呀,我不能下载这个资料,748382907@qq.com
作者: hanpingx 时间: 2016-7-23 17:51
学习学学!谢谢!
作者: INSPIRER 时间: 2016-8-4 22:30
断句错误。。。
SDA\MOSI\MISO\IRQ\GND\RST\3.3V
同问。
看着引脚直接懵逼。
作者: AllBlue 时间: 2016-8-5 08:16
SDA 就是CS引脚,其他引脚对应连接
作者: wangyaominde 时间: 2016-9-16 17:57
多谢分享~
作者: lins 时间: 2016-10-2 19:52
我想通过这个做个门禁系统,想问一下,怎么存储卡号到rfid中,以实现卡的检验呐?
作者: AllBlue 时间: 2016-10-3 21:25
写到程序中,通过程序去识别。
作者: AllBlue 时间: 2017-3-3 13:45
电源错了?还是什么?
作者: 问问 时间: 2017-8-4 10:50
rfid.findCard(r) 和 Rfid: MFRC522Request()一样吗?
作者: lyb 时间: 2018-12-8 15:13
接3.3v和接地!!!!!
作者: 1610092227 时间: 2019-1-28 23:23
请问你最后一个编译错误解决了吗?
作者: 1610092227 时间: 2019-1-28 23:25
请问你最后一个编译错误解决了吗?
作者: 拉格朗日 时间: 2019-4-28 09:12
感谢分享,努力学习
作者: tiantianyouyou 时间: 2019-5-5 07:51
学习学习,谢谢分享
作者: can0can 时间: 2020-9-16 15:21
学习学习!
作者: 月亮湾 时间: 2023-5-2 03:39
下载了,谢谢版主,我用的51希望可以用。
欢迎光临 YFROBOT创客社区 (http://yfrobot.com.cn/) |
Powered by Discuz! X3.1 |