当前位置: 首页 > 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.jsqmd.com/news/22049/

相关文章:

  • 一个关于cos的极限
  • Ai元人文:共识锚定
  • QEMU 建模硬件
  • P14304 【MX-J27-T1】分块
  • 实现安卓scrollview里的多个按钮实现的每个按钮单选功能
  • ABP - 懒加载 [ILazyServiceProvider、DefaultLazyServiceProvider、LazyServiceProvider]
  • 三角函数的2倍角公式
  • FFmpeg开发笔记(八十五)基于PyQt和FFmpeg的开源视频剪辑器OpenShot
  • 2025年工业风扇厂家权威推荐榜:直流风扇、显卡散热风扇、一体机风扇、轴流风扇及散热风扇专业选购指南
  • 2025年除尘设备厂家权威推荐榜:除尘器/脉冲除尘器/中央脉冲除尘器/工业除尘器源头企业综合测评与选购指南
  • 2025年提升机厂家权威推荐榜:自动提升机专业选购指南,高效稳定与安全性能深度解析
  • 2025年冷水机/冷冻机/冰水机厂家权威推荐榜:工业制冷设备实力解析与高效节能口碑之选
  • 详细介绍:OpenLayers的OGC服务 -- 章节一:WMS服务详解
  • netcore vue grpc、http grpc
  • Go 的跨平台编译详解 - 指南
  • 2025年上海久宙集团深度解析:技术护城河与标准话语权的双重验证
  • 2025年上海久宙集团:深度解析其技术护城河与行业话语权
  • 墨尔本迎来第六届PancakesCon网络安全大会
  • 爬虫逆向——RPC技术 - 教程
  • 完整教程:三维计算机视觉:从2D图像到3D理解的跨越
  • 兼职帮农业公司搭建外贸出海网站(赚了900元)
  • 2025年河北中医理疗针灸培训学校权威推荐榜单:中医针灸技术培训/中医推拿针灸培训/针灸正骨培训学校精选
  • 2025年网络隔离变压器优质厂家权威推荐榜单:以太网变压器/网络变压器/LAN变压器源头厂家精选
  • 2025年工业冷水机厂家权威推荐榜:专业制冷技术与高效节能解决方案深度解析
  • 2025年南京机械钻井工程服务权威推荐榜单:打井工程/打桩工程/环保检测井工程源头公司精选
  • 深入解析:使用 PyTorch 实现 CIFAR-10 图像分类:从数据加载到模型训练全流程
  • 2025年冷库保温建材工厂权威推荐榜单:泡沫模块建大棚/检修用围栏/绝缘围栏源头厂家精选
  • 完整教程:营销驱动式增长(MLG)是什么?解析模式、策略与实践案例
  • 2025 年防冻液源头厂家最新推荐口碑排行榜:严检合格技术为先,实力企业权威甄选食品级/空气能专用/长效防冻液公司推荐
  • 2025 年冷藏车厂家最新推荐排行榜:结合协会测评权威数据,详解优质品牌特点与选购指南 9.6 米 / 解放 / 4.2 米 / 福田 / 小型冷藏车公司推荐