当前位置: 首页 > news >正文

感知节点@8@ ESP32+arduino+ 第六个程序 读取射频卡卡号

 一、硬件与接线

1.1  RFID  RC552

image

 

MFRC522简化功能框图:

先从RC522功能框图入手,可以从大方向上理解通讯原理。

3992be62-abc8-41f8-a5c1-73241f36d208

 

上述主机一般指的就是手上的开发板,通信接口对应天线,MFRC522与主机通讯支持UART、SPI以及IIC,本人采用SPI通讯方式。

MFRC522与主机SPI通讯引脚配置:

0b59a347-5680-4cff-8acd-4f903890df35

 

 

 

1.2 NodeMCU-32S 引脚图( 基于ESP32-32S 模组设计的一款较为经典的ESP32开发板)

image

 

 

1.3 ESP32-WROOM-32 引脚图

 

QQ_1761357799550

 1.4 引脚接线

// 接线
// ESP32开发板    RC522模块
// GPIO15          SDA
// GPIO18          SCK
// GPIO23          MOSI
// GPIO19          MISO
// 无              IRQ
// GND            GND
// GPIO4          RST
// VCC            3.3V

二、电子标签的存储数据及操作程序

2.1 MIFARE Classic 1K 基本规格

S50卡,又称Mifare 1K,是NXP公司基于MF1 IC S50芯片研发的非接触智能卡,属于MIFARE Classic EV1系列产品。该卡符合ISO14443A标准,工作频率为13.56MHz,存储容量为1K Bytes(8Kbit),支持4或7字节唯一UID识别,主要应用于门禁、公共交通代币卡、电子门票及物流管理等领域。

M1卡存储器,分为16个扇区,每个扇区对应4块(块0-块3),共64块,编号为0-63。

8d5c7fd8-eb01-4c9d-b566-e9c8300403de

第0扇区的第0块用于存放厂商代码,已经固化无法更改。其余区的第0-2块用于存放数据,块3为控制块用于存放密码A、存取控制、密码B。

块3结构举例如下:

A0 A1 A2 A3 A4 A5 FF 07 80 69 B0 B1 B2 B3 B4 B5 
(密码A 6字节) (存储控制 4字节) (密码B 6字节)

 举例如下:

image

 2.2 读取S50卡(Mifare 1K)内的存储数据

2.2.1 安装 arduino的库

3a0baf66a748f3935505a62fe8b53b5c

 2.2.2  文件-示例-MFRC522-DumpInfo程序-修改-执行

ab6ebc6a0fd4530acf86d4753b5f6cdb

 程序运行,串口打印 S50卡信息。

QQ_1761365894121

 

 

 2.2.3  复杂程序,读取并打印卡序列号

#include <SPI.h>
#include <MFRC522.h>
// 接线
// ESP32开发板    RC522模块
// GPIO15          SDA
// GPIO18          SCK
// GPIO23          MOSI
// GPIO19          MISO
// 无              IRQ
// GND            GND
// GPIO4          RST
// VCC            3.3V
#define RST_PIN         4           //  D1
#define SS_PIN          15           // D2MFRC522 mfrc522(SS_PIN, RST_PIN);   // 创建新的RFID实例
MFRC522::MIFARE_Key key;void setup() {Serial.begin(115200); // 设置串口波特率为9600SPI.begin();        // SPI开始mfrc522.PCD_Init(); // 初始化MFRC522卡Serial.println("初始化完成...");// 初始化密钥for (byte i = 0; i < 6; i++) {key.keyByte[i] = 0xFF;}
}void loop() {// 寻找新卡if (!mfrc522.PICC_IsNewCardPresent()) {//Serial.println("没有找到卡");return;}// 选择一张卡if (!mfrc522.PICC_ReadCardSerial()) {Serial.println("没有卡可选");return;}// 显示卡片的详细信息Serial.print(F("卡片 UID(十六进制):"));dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);String uidStr = "";Serial.println();for (int i = 0; i < sizeof(mfrc522.uid.uidByte); i++) {// 将每个16进制数转换为两位数的字符串char hexStr[3];sprintf(hexStr, "%02X", mfrc522.uid.uidByte[i]);uidStr += hexStr;}Serial.print(F("卡片字符串:"));Serial.println(uidStr);Serial.print(F("卡片 UID(十进制):"));// dump_byte_array_dec(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;}// 进行身份验证byte blockAddr = 1; // 选择要读取的块地址MFRC522::StatusCode status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, blockAddr, &key, &(mfrc522.uid));if (status != MFRC522::STATUS_OK) {Serial.print(F("身份验证失败?或者是卡链接失败: "));Serial.println(mfrc522.GetStatusCodeName(status));return;}// 读取数据byte buffer[18];byte size = sizeof(buffer);status = mfrc522.MIFARE_Read(blockAddr, buffer, &size);if (status != MFRC522::STATUS_OK) {Serial.print(F("读取失败: "));Serial.println(mfrc522.GetStatusCodeName(status));return;}// 停止 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);}
}/**将字节数组转储为串行的十进制值
*/
void dump_byte_array_dec(byte *buffer, byte bufferSize) {for (byte i = 0; i < bufferSize; i++) {Serial.print(buffer[i] < 10 ? " 0" : " ");Serial.print(buffer[i], DEC);}
}
View Code

 

  2.2.4  简化程序,读取并打印卡序列号

#include <SPI.h>
#include <MFRC522.h>#define RST_PIN 4     // 复位引脚
#define SS_PIN  15    // 片选引脚MFRC522 mfrc522(SS_PIN, RST_PIN);void setup() {Serial.begin(115200);SPI.begin();mfrc522.PCD_Init();Serial.println("RFID读卡器初始化完成,请刷卡...");
}void loop() {// 检测新卡if (!mfrc522.PICC_IsNewCardPresent()) return;// 读取卡序列号if (!mfrc522.PICC_ReadCardSerial()) return;// 打印卡号(十六进制)Serial.print("CardID(HEX): ");for (byte i = 0; i < mfrc522.uid.size; i++) {Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");Serial.print(mfrc522.uid.uidByte[i], HEX);}// 打印卡号(十进制)Serial.print("\nCardID(DEC): ");for (byte i = 0; i < mfrc522.uid.size; i++) {Serial.print(mfrc522.uid.uidByte[i], DEC);Serial.print(" ");}//Serial.println("\n------------------");// 停止操作
  mfrc522.PICC_HaltA();mfrc522.PCD_StopCrypto1();
}
View Code

 

http://www.hskmm.com/?act=detail&tid=38757

相关文章:

  • Ai元人文:共识锚定
  • P14304 【MX-J27-T1】分块
  • 实现安卓scrollview里的多个按钮实现的每个按钮单选功能
  • ABP - 懒加载 [ILazyServiceProvider、DefaultLazyServiceProvider、LazyServiceProvider]
  • 三角函数的2倍角公式
  • FFmpeg开发笔记(八十五)基于PyQt和FFmpeg的开源视频剪辑器OpenShot
  • 2025年服装厂家推荐排行榜:棒球帽,卫衣,羽绒服,春秋季运动休闲服饰源头厂家精选
  • 2025女丘
  • 2025年上海久宙集团:深度解析其技术护城河与行业话语权
  • Go 的跨平台编译详解 - 指南
  • netcore vue grpc、http grpc
  • 墨尔本迎来第六届PancakesCon网络安全大会
  • 实验三
  • 2025年河北中医理疗针灸培训学校权威推荐榜单:中医针灸技术培训/中医推拿针灸培训/针灸正骨培训学校精选
  • 2025年工业冷水机厂家权威推荐榜:专业制冷技术与高效节能解决方案深度解析
  • 兼职帮农业公司搭建外贸出海网站(赚了900元)
  • 2025 年防冻液源头厂家最新推荐口碑排行榜:严检合格技术为先,实力企业权威甄选食品级/空气能专用/长效防冻液公司推荐
  • 2025年南京机械钻井工程服务权威推荐榜单:打井工程/打桩工程/环保检测井工程源头公司精选
  • 深入解析:使用 PyTorch 实现 CIFAR-10 图像分类:从数据加载到模型训练全流程
  • 2025 年冷藏车厂家最新推荐排行榜:结合协会测评权威数据,详解优质品牌特点与选购指南 9.6 米 / 解放 / 4.2 米 / 福田 / 小型冷藏车公司推荐
  • 2025 年铣边机源头厂家最新推荐排行榜:含钢板 / 平板 / 板材 / 自走式 / 全自动铣边机机型,结合协会测评数据甄选实力企业
  • 2025 年载冷剂厂家推荐排行榜:无醇/安全型/SH-4/SH-5A/多元醇/高低温/超低温/乙二醇/冷库专用/食品级载冷剂公司推荐
  • 2025年盐趣科研教育深度解析:从录取数据到成果落地的全链路拆解
  • 2025年盐趣科研教育深度解析:从“科研背景”维度拆解留学突围路径
  • 2025 年房屋改造公司最新推荐榜,聚焦企业服务能力与市场口碑深度解析老房 / 旧房 / 局部 / 小户型 / 出租房房屋改造推荐
  • 2025 年桥梁防撞护栏优质厂家最新推荐榜:涵盖锌钢 / ZF01/Q235/Q355B / 景观 / 灯光 / 河道 / 公路 / 喷塑等类型,全方位解析实力企业
  • kali wsl桌面使用
  • 2025年1月暖风机口碑榜:五款主流机型对比与选购避坑
  • 2025 年最新推荐 WMS 服务商综合实力排行榜:涵盖智能仓储管理系统品牌核心技术优势及协会权威测评结果
  • 告别“求推荐”的迷茫,如何挑选一家真正专业的直播源码定制开发公司?