ESP32开发板(Arduino)------RFID RC522

1.设备材料:

2.连接说明:

ESP32RC522
GPIO15SDA
GPIO18SCK
GPIO23MOSI
GPIO19MISO
IRQ
GNDGND
GPIO4RST
VCC3.3V

注意:我看了很多教程,SDA连接GPIO21和RST连接22发现都不行,改成连接GPIO15和GPIO4就可以。


3.代码:

先安装MFRC522库

#include <SPI.h>
#include <MFRC522.h>
 
#define RST_PIN         4           //  D1
#define SS_PIN          15           // D2
 
MFRC522 mfrc522(SS_PIN, RST_PIN);   // 创建新的RFID实例
MFRC522::MIFARE_Key key;
 
void setup() {
  Serial.begin(115200); // 设置串口波特率为9600
  SPI.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);
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值