xufeng 发表于 2020-4-17 23:11:52

基于Arduino使用RFID射频 IC感应卡模块

基于Arduino使用RFID射频 IC感应卡模块

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

(MFRC-522 RC522 RFID射频模块+S50复旦卡钥匙扣)
接线方式
(MFRC-522 正面)
Arduino Uno   <------>   RFID-RC522            10         <------>       SDA            13         <------>       SCK            11         <------>      MOSI            12         <------>       MISO      --null--       <------>       IRQ         GND      <------>       GND             9            <------>   RST            3.3V      <------>      3.3V
程序库
我们需要用到RFID-RC522的库下载:https://github.com/miguelbalboa/rfid下载解压到Arduino IDE的安装路径里的库文件夹libraries   
程序测试——读取ID值
Mixly图形化编程程序
(图形化程序)
打开串口监视器,将ID卡放置RFID射频IC感应卡上,串口监视器会显示ID卡数值。
(串口ID显示)
程序实现代码
读取ID
#include <SPI.h>
#include <RFID.h>
RFID rfid(10,5);
unsigned char i,tmp;
unsigned char status;
unsigned char str;
unsigned char RC_size;
unsigned char blockAddr;      //选择操作的块地址0~63
//4字节卡序列号,第5字节为校验字节
unsigned char serNum;
//写卡数据
//原扇区A密码,16个扇区,每个扇区密码6Byte
unsigned char sectorKeyA = {
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},};
//新扇区A密码,16个扇区,每个扇区密码6Byte
unsigned char sectorNewKeyA = {
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},};
String RFID_readcardnum() {

rfid.readCardSerial();
String stringserNum=String(rfid.serNum, HEX)+String(rfid.serNum, HEX)+String(rfid.serNum, HEX)+String(rfid.serNum, HEX)+String(rfid.serNum, HEX);
      //选卡,返回卡容量(锁定卡片,防止多次读写)
      rfid.selectTag(rfid.serNum);
return stringserNum;
}
void setup(){
Serial.begin(9600);
SPI.begin();
rfid.init();
Serial.begin(9600);
}
void loop(){
if ( rfid.isCard()) {
    Serial.println(RFID_readcardnum());
}
}
页: [1]
查看完整版本: 基于Arduino使用RFID射频 IC感应卡模块