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

相关文章:

  • 2025年暖风机口碑排行榜:五款主流机型对比与避坑指南
  • 深入解析:LeetCode 390 消除游戏
  • 2025年暖风机评测:五款口碑机型横向对比与推荐
  • 网站做简介seo快速排名
  • 外贸网站如何做推广怎么样如何做搜索网站
  • 广州 seo的网站免费的产品推广平台
  • 长沙网页制作网站网站地址地图怎么做
  • 网站制作完工验收单html购物网站模板下载
  • 百度网站的建设目标增加网站产品
  • 简洁 网站模板佛山门户网站建设公司
  • 济南制作网站的公司哪家好山东省德州禹城住房建设厅网站
  • 外贸网站seo网站建设拍金手指谷哥14
  • 主流的网站开发语言建设网站情况说明范文
  • 购买网站域名 空间引流推广营销
  • 广告视频网站网页制作基础教程课程标准
  • 泾阳县住房和城乡建设局网站重庆建站塔山双喜
  • 网站建设验收期企业网站建设方案大全
  • 域名对网站seo的影响wordpress 谷歌广告
  • 旅游网站开发实现开题报告网站公司怎么做运营
  • 黄页网站推广服务12306网站为什么做不好使
  • 河北网站开发网站10常用的网络营销方法
  • 推荐一下网站谢谢建设银行个人网上银行登录入口
  • 章丘区当地网站建设哪家好有什么功能
  • 做网站方案做外贸生意的网站
  • 外贸网站建设哪家公司比较好asp运行wordpress
  • 食堂网站源代码php+mysqlwordpress 小工具 修改
  • 山东省建设监理网站tv域名的网站
  • 搭建网站要不要给域名对方东莞常平网站设计
  • 衡水网站建设选哪家中英文网站建设 大概要多久
  • ABP - 懒加载 [ILazyServiceProvider、DefaultLazyServiceProvider、LazyServiceProvider]