网站首页 > 技术教程 正文
通过以下步骤连接ESP32和RC522模块:
- 准备好ESP32开发板,RC522读写器模块,以及一些杜邦线。
- 将ESP32和RC522模块的引脚按照下表进行连接:
Signal | SCK | MOSI | MISO | RST | CS (SDA) |
ESP32 | P0 | P2 | P4 | P5 | P14 |
- 在Arduino IDE中安装MFRC522库,
- 将程序上传到ESP32,并打开串口监视器。
- 将Mifare卡靠近RC522模块,观察串口监视器中显示的卡片信息,如UID,类型,数据等。
- 根据需要修改程序中的读写指令,实现自定义的功能。
以下的示例代码,实现使用ESP32和RC522模块对Mifare卡的读写操作。该代码使用了Arduino IDE和MFRC522库,可以在ESP32上运行。代码的功能是:
- 读取Mifare卡的UID和类型,并在串口监视器上显示。
- 如果Mifare卡是Mifare Classic类型,尝试使用默认密码(0xFFFFFFFFFFFF)对第一个扇区进行鉴权。
- 如果鉴权成功,读取第一个扇区的第一个数据块,并在串口监视器上显示。
- 如果鉴权成功,尝试向第一个扇区的第一个数据块写入一些数据,并在串口监视器上显示写入结果。
示例代码如下:
// 引入MFRC522库
#include <MFRC522.h>
// 定义ESP32和RC522模块的引脚
#define SS_PIN 5 // ESP32 pin GIOP5
#define RST_PIN 27 // ESP32 pin GIOP27
// 创建MFRC522对象
MFRC522 rfid (SS_PIN, RST_PIN);
// 定义Mifare Classic卡的默认密码
byte key[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
void setup() {
// 初始化串口通信
Serial.begin(115200);
// 初始化SPI通信
SPI.begin();
// 初始化RFID模块
rfid.PCD_Init();
// 打印提示信息
Serial.println("RFID Reader Ready");
}
void loop() {
// 检测是否有新卡片靠近
if (rfid.PICC_IsNewCardPresent()) {
// 读取卡片的UID和类型
if (rfid.PICC_ReadCardSerial()) {
// 打印卡片的UID
Serial.print("Card UID: ");
for (byte i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i], HEX);
Serial.print(" ");
}
Serial.println();
// 打印卡片的类型
byte piccType = rfid.PICC_GetType(rfid.uid.sak);
Serial.print("Card Type: ");
Serial.println(rfid.PICC_GetTypeName(piccType));
// 如果卡片是Mifare Classic类型,尝试进行读写操作
if (piccType == MFRC522::PICC_TYPE_MIFARE_1K || piccType == MFRC522::PICC_TYPE_MIFARE_4K) {
// 定义要访问的扇区和数据块
byte sector = 1;
byte block = sector * 4;
// 尝试使用默认密码对扇区进行鉴权
MFRC522::StatusCode status = rfid.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key[0], &(rfid.uid));
// 如果鉴权成功,打印提示信息
if (status == MFRC522::STATUS_OK) {
Serial.println("Authentication success");
// 定义一个缓冲区用于存储读取或写入的数据
byte buffer[18];
byte size = sizeof(buffer);
// 尝试读取数据块,并打印结果
status = rfid.MIFARE_Read(block, buffer, &size);
if (status == MFRC522::STATUS_OK) {
Serial.print("Read data: ");
for (byte i = 0; i < size; i++) {
Serial.print(buffer[i], HEX);
Serial.print(" ");
}
Serial.println();
} else {
Serial.println("Read failed");
}
// 定义一些要写入的数据
byte data[16] = {0x01, 0x02, 0x03, 0x04,
0x05, 0x06, 0x07, 0x08,
0x09, 0x0A, 0x0B, 0x0C,
0x0D, 0x0E, 0x0F, 0x10};
// 尝试写入数据块,并打印结果
status = rfid.MIFARE_Write(block, data, 16);
if (status == MFRC522::STATUS_OK) {
Serial.println("Write success");
} else {
Serial.println("Write failed");
}
} else {
// 如果鉴权失败,打印提示信息
Serial.println("Authentication failed");
}
}
// 停止对卡片的加密通信
rfid.PICC_HaltA();
// 停止对卡片的读写操作
rfid.PCD_StopCrypto1();
}
}
}
猜你喜欢
- 2024-11-07 超值一篇分享,Docker:从入门到实战过程全记录
- 2024-11-07 首创引入蛋白动态信息的AI模型,高效预测药物-蛋白亲和力
- 2024-11-07 这个高中女生建立了一个道德黑客站,让人们进入数据安全
- 2024-11-07 「洞幺邦」智能停车场车位管理系统
- 2024-11-07 基于ARM的商用车信息系统的设计 基于arm的车辆中控娱乐系统报告
- 2024-11-07 CrowPi2树莓派4教育笔记本电脑的评测
- 2024-11-07 浅谈嵌入式开发朋友的身边事 嵌入式开发实例
- 2024-11-07 校园一卡通系统中RFID读写器的设计
- 2024-11-07 学生设计——小区门禁系统设计 小区门禁系统安装图教程
- 2024-11-07 电容式触控开关实验(二):触控式LED调光器
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)