Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >对于RFID-RC522 模块的读写操作【Arduino】[通俗易懂]

对于RFID-RC522 模块的读写操作【Arduino】[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-11-04 11:52:59
发布于 2022-11-04 11:52:59
2.3K06
代码可运行
举报
运行总次数:6
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

玩儿板子–

目前百度基本上搜不到RC522板子的具体操作代码,基本上贴出来的只有接线,所以这次直接放出读写操作的代码算是做贡献吧。

这个是板子

建议:

把送的两个插头 ,焊上去是最好的

焊技极渣。。。

接线: 请看准颜色喽,绿色的线对应 3.3V电源,左4口是用来中断的,可以留空

板子上接法:

绿色的线插在另一侧的3.3V口上

下面上代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN         9           // 配置针脚
#define SS_PIN          10          
MFRC522 mfrc522(SS_PIN, RST_PIN);   // 创建新的RFID实例
MFRC522::MIFARE_Key key;
void setup() {
Serial.begin(9600); // 设置串口波特率为9600
while (!Serial);    // 如果串口没有打开,则死循环下去不进行下面的操作
SPI.begin();        // SPI开始
mfrc522.PCD_Init(); // Init MFRC522 card
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
Serial.println(F("扫描卡开始进行读或者写"));
Serial.print(F("使用A和B作为键"));
dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE);
Serial.println();
Serial.println(F("注意,会把数据写入到卡在#1"));
}
void loop() {
// 寻找新卡
if ( ! mfrc522.PICC_IsNewCardPresent())
return;
// 选择一张卡
if ( ! mfrc522.PICC_ReadCardSerial())
return;
// 显示卡片的详细信息
Serial.print(F("卡片 UID:"));
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println();
Serial.print(F("卡片类型: "));
MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
Serial.println(mfrc522.PICC_GetTypeName(piccType));
// 检查兼容性
if (    piccType != MFRC522::PICC_TYPE_MIFARE_MINI
&&  piccType != MFRC522::PICC_TYPE_MIFARE_1K
&&  piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F("仅仅适合Mifare Classic卡的读写"));
return;
}
// 我们只使用第二个扇区
// 覆盖扇区4
byte sector         = 1;
byte blockAddr      = 4;
byte dataBlock[]    = {
0x01, 0x02, 0x03, 0x04, //  1,  2,   3,  4,
0x05, 0x06, 0x07, 0x08, //  5,  6,   7,  8,
0x00, 0x00, 0x00, 0x00, //  0,0,0,0
0x00, 0x00, 0x00, 0x00  // 0,0,0,0
};//写入的数据定义
byte trailerBlock   = 7;
MFRC522::StatusCode status;
byte buffer[18];
byte size = sizeof(buffer);
// 原来的数据
Serial.println(F("显示原本的数据..."));
status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print(F("身份验证失败?或者是卡链接失败"));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
// 显示整个扇区
Serial.println(F("显示所有扇区的数据"));
mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);
Serial.println();
// 从块儿读取数据
Serial.print(F("读取块儿的数据在:")); Serial.print(blockAddr);
Serial.println(F("块 ..."));
status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size);
if (status != MFRC522::STATUS_OK) {
Serial.print(F("读卡失败,没有连接上 "));
Serial.println(mfrc522.GetStatusCodeName(status));
}
Serial.print(F("数据内容在第 ")); Serial.print(blockAddr); Serial.println(F(" 块:"));
dump_byte_array(buffer, 16); Serial.println();
Serial.println();
//开始进行写入准备
Serial.println(F("开始进行写入的准备..."));
status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print(F("写入失败,没有连接上或者没有权限 "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
// Write data to the block
Serial.print(F("在第: ")); Serial.print(blockAddr);
Serial.println(F("  块中写入数据..."));
dump_byte_array(dataBlock, 16); Serial.println();
status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(blockAddr, dataBlock, 16);
if (status != MFRC522::STATUS_OK) {
Serial.print(F("写入失败... "));
Serial.println(mfrc522.GetStatusCodeName(status));
}
Serial.println();
// 再次读取卡中数据,这次是写入之后的数据
Serial.print(F("读取写入后第")); Serial.print(blockAddr);
Serial.println(F(" 块的数据 ..."));
status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size);
if (status != MFRC522::STATUS_OK) {
Serial.print(F("读取失败... "));
Serial.println(mfrc522.GetStatusCodeName(status));
}
Serial.print(F("块 ")); Serial.print(blockAddr); Serial.println(F("数据为 :"));
dump_byte_array(buffer, 16); Serial.println();
// 验证一下数据,要保证写入前后数据是相等的
// 通过计算块中的字节数量
Serial.println(F("等待验证结果..."));
byte count = 0;
for (byte i = 0; i < 16; i++) {
// 比较一下缓存中的数据(我们读出来的数据) = (我们刚刚写的数据)
if (buffer[i] == dataBlock[i])
count++;
}
Serial.print(F("匹配的字节数量 = ")); Serial.println(count);
if (count == 16) {
Serial.println(F("验证成功 :"));
} else {
Serial.println(F("失败,数据不匹配"));
Serial.println(F("也许写入的内容不恰当"));
}
Serial.println();
// 转储扇区数据
Serial.println(F("写入后的数据内容为::"));
mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);
Serial.println();
// 停止 PICC
mfrc522.PICC_HaltA();
//停止加密PCD
mfrc522.PCD_StopCrypto1();
}
/**
* 将字节数组转储为串行的十六进制值
*/
void dump_byte_array(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
}

如果上面的代码无法运行,请自行添加库文件

左上角菜单 : 项目-加载库-管理库 ,输入RC522 然后安装他,(我已经安装好了,你要做的是安装)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/191835.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月19日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
RFID-RC522的使用[通俗易懂]
射频识别技术RFID(Radio Frequency Identification),又称为电子标签、无线射频识别,是一种非接触式的自动识别技术,通过无线电讯号识别特定目标并读写相关数据而无需识别系统与特定目标之间建立机械或光学接触。可用于识别高速运动物体并可同时识别多个标签,过程中无需人工干预,操作快捷方便。可工作于各种环境,实现对各类物体或设备(人员、物品)在不同状态(移动、静止或恶劣环境)下的自动识别和管理。
全栈程序员站长
2022/07/29
1.6K0
RFID-MFRC522射频识别模块,S50卡M1
1、M1卡分为16个扇区,每个扇区由4块(块0、块1、块2、块3)组成,(我们也将16个扇区的64个块按绝对地址编号为0~63,存贮结构如下图所示:
全栈程序员站长
2022/09/14
1.5K0
RFID-MFRC522射频识别模块,S50卡M1
STM32+MFRC522完成IC卡号读取、密码修改、数据读写
完整工程源码下载: https://download.csdn.net/download/xiaolong1126626497/18905806
DS小龙哥
2022/01/17
4.6K0
STM32+MFRC522完成IC卡号读取、密码修改、数据读写
STM32–RFID无线射频技术(RC522刷卡模块)
 射频识别,即RFID是Radio Frequency Ident ificat ion的缩写,又称无线射频识别,是一.种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触。一套完整RFID硬件统由Reader 与Transponder 两部份组成,其动作原理为由Reader 发射一特定频率之无限电波能量给Transponder,用以驱动Transponder电路将內部之ID Code送出,此时Reader便接收此ID Code Transponder的特殊在于免用电池、免接触、免刷卡故不怕脏污,且晶片密码为世界唯一无法复制, 安全性高、长寿命。
全栈程序员站长
2022/09/17
3.6K0
STM32–RFID无线射频技术(RC522刷卡模块)
RC522(RFID模块)实践总结
此次使用RC522模块和S50卡实现近场通讯功能(开发板与RC522通讯方式为硬件SPI),就实践过程中的一些知识点进行总结:
全栈程序员站长
2022/07/22
3.5K0
RC522(RFID模块)实践总结
ESP32开发之旅——RC522模块的使用
​ 射频识别RFID(Radio Frequency Identification)是一种无线数据传输系统,用于在标签和读取器设备之间传输数据,而RC522模块则是用于读取和写入RFID卡和标签,该模块的工作频率为13.56MHz。
全栈程序员站长
2022/09/14
2.1K0
rfid-rc522使用教程_RFID读写方式是什么
我们常见的RC522大概如下所示,PCB部分是主机,然后白色的和绿色的都是IC卡,IC卡可以存储信息,通过靠近PCB主机部分就可以被感应到从而触发主机做出相应的动作,比如读取IC卡信息,写入数据等操作。
全栈程序员站长
2022/10/02
2.3K0
rfid-rc522使用教程_RFID读写方式是什么
RFID RC522门禁系统「建议收藏」
RFID RC522门禁系统说明: 基于51单片机的RFID RC522门禁系统的主要功能是,在本系统中主要是演示了RFID RC522门禁系统,在单片机内部的RAM中IDBUFFER中存了学号:1505106001对应 16进制就是5b b6 18 51 ;然后在RFID RC522开卡系统中,为第一张卡在块地址0x08处,写入了学号,当卡中的内容和单片机上的内容相配时,门打开。 具体程序如下所示: MAIN.C
全栈程序员站长
2022/10/02
9010
rc522 nfc_基于单片机的门禁系统
(2021/11/1编辑) 在项目需要做一个NFC门禁功能的时候,突然发现有个RC522丢在我的桌面,甚至不知道它上面的引脚什么意思(还不会SPI通讯),搜索关键词“RC522”去看博客搜索资料,发现了很多都在说扇区,块,S50(M1)卡,然后就给代码,一开始我还以为S50是内嵌在这个模块里面的一个存储器,然后越看越怪,后面去淘宝搜索S50,才发现S50其实是我们的门禁卡,RC522是用来感应和判断的。
全栈程序员站长
2022/09/29
1.1K0
rc522 nfc_基于单片机的门禁系统
STM32F103+RFID-RC522模块 实现简单读卡写卡demo「建议收藏」
本文不含任何广告性质,仅供学习参考。写卡需谨慎!!!,不然可能会玩崩了。血的教训!!!
全栈程序员站长
2022/07/23
3.7K0
STM32F103+RFID-RC522模块 实现简单读卡写卡demo「建议收藏」
RFID-RC522/STM32F103RB/KEIL5 简单实现读取卡片ID[通俗易懂]
在这篇文章【 https://blog.csdn.net/qq_28877125/article/details/80437095 】的基础上修改完成!
全栈程序员站长
2022/09/29
1.6K0
RFID-RC522/STM32F103RB/KEIL5 简单实现读取卡片ID[通俗易懂]
rfid-rc522模块中文资料_驱动模块
1.每张卡有唯一的序列号,32位 2.卡的容量是8Kbit的EEPROM 3.分为16个扇区,每个扇区分为4块,每块16个字节,以块为存取单位 4.每个扇区都有独立的一组密码和访问控制
全栈程序员站长
2022/11/04
3.5K1
rfid-rc522模块中文资料_驱动模块
单片机_MFRC522射频模块使用方法(含代码)
522模块总共有8个引脚,除去复位、GND接地、3.3V电源、NC端悬空、SCK时钟端,剩余3个引脚,起数据作用。
全栈程序员站长
2022/09/17
2.2K0
单片机_MFRC522射频模块使用方法(含代码)
基于HL-1开发板开发RFID(RC522模块)射频电路基础
图片中重点写出引脚的相应接口名称。 —————————————————————手动分割线———————————————————–
全栈程序员站长
2022/09/14
1.2K0
基于HL-1开发板开发RFID(RC522模块)射频电路基础
PS2手柄遥控Arduino小车[通俗易懂]
使用手柄遥控小车是经常要用到的,看到PS2手柄很6,就拿来尝试一下。 PS2手柄是索尼的PlayStation2游戏机的遥控手柄,因为这款手柄性价比较高,按键丰富,方便扩展到其它应用中,后来有人将其通讯协议破解,使得手柄可以用在遥控其他电器上,比如遥控控制机器人小车。
全栈程序员站长
2022/07/01
2.8K0
PS2手柄遥控Arduino小车[通俗易懂]
基于esp8266开发板实现宿舍门禁
菜菜有点菜
2023/12/11
2190
STM32F103ZET–RFID-RC522使用例程(战舰版)
每每有陌生人加我就是问我要这个的工程,心累,文末有工程下载链接。希望再有人加我QQ是跟我聊技术,而不是:“大神,能发个工程给我吗?”
全栈程序员站长
2022/07/22
6510
基于STM32的RC522模块读写数据块以及电子钱包充值扣款系统的设计
本人也是正在学习单片机知识的萌新一枚,在这里记录下自己完成这个小设计的过程跟大家分享一下,也请大家指出我哪里还有不足可以改进的地方。秉着和大家一起学习进步发布了这篇文章
全栈程序员站长
2022/10/02
3K2
基于STM32的RC522模块读写数据块以及电子钱包充值扣款系统的设计
基于stm32门禁系统_老式门禁
RC522射频门禁识别模块非常常用,某宝卖家提供的程序基本都是使用软件模拟SPI的方式进行驱动的,但是实测使用软件模拟SPI识别速率、准确性没有硬件SPI驱动时高,因此本篇博客用于记录使用STM32硬件SPI驱动RC522门禁模块。
全栈程序员站长
2022/09/30
9750
基于stm32门禁系统_老式门禁
翻译:使用红外传感器与Arduino进行简单动作与手势检测
译注:昨天看 Adruino 的 Twitter 推了这篇项目,第一眼就觉得非常有趣,翻译给大家看看。文中的红外传感器比较高级,和淘宝上5块钱的那种只能输出0和1的不一样, TPA81 是可以输出温度的,还是8个连续点。 MLX90614 可以输出一点的温度,还卖将近三十,可以想象 TPA81 的价格……而且淘宝上并没有卖 TPA81 的,可见国内还没有仿的。文章也给出了另一个解决方案,使用8个 HC-SR505 来替代,这就便宜了很多。我想了一下,如果要只是实现像文章那样的增减手势,3个 HC-SR505 即可,只不过检测没那么精准罢了。只可惜手头没有3个 HC-SR505 ,没法尝试了哈哈😂。关于最后一个巨长的代码示例,大部分都是 OLED 的字符定义,挑着看即可。
张高兴
2025/05/21
910
翻译:使用红外传感器与Arduino进行简单动作与手势检测
推荐阅读
相关推荐
RFID-RC522的使用[通俗易懂]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验