使用ESP32C3
硬件连接:
MFRC522 | ESP32C3 |
3.3V | 3.3V |
GND | GND |
RST | 0 |
MISO | 5 |
MOSI | 6 |
SCK | 4 |
NSS | 7 |
程序:
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 7
#define RST_PIN 0
MFRC522 rfid(SS_PIN, RST_PIN);
void setup() {
Serial.begin(9600);
SPI.begin(); // init SPI bus
rfid.PCD_Init(); // init MFRC522
Serial.println("Tap an RFID/NFC tag on the RFID-RC522 reader");
}
void loop() {
if (rfid.PICC_IsNewCardPresent()) { // new tag is available
if (rfid.PICC_ReadCardSerial()) { // NUID has been readed
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
Serial.print("RFID/NFC Tag Type: ");
Serial.println(rfid.PICC_GetTypeName(piccType));
// print UID in Serial Monitor in the hex format
Serial.print("UID:");
for (int i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
}
Serial.println();
rfid.PICC_HaltA(); // halt PICC
rfid.PCD_StopCrypto1(); // stop encryption on PCD
}
}
}
直接编译会有问题,出现如下问题。
需要修改MFRC522Extended.cpp文件的内容
Hey, I had the same issue, I fixed it modifying with if (backData && (backLen != nullptr))
instead of if (backData && (backLen > 0))
for both occurrences. It works great on ESP32 now and I also tested on ESP8266.
Edit: on "MFRC522Extended.cpp" line 824 and 847
这样可以正常编译。
上次后可以读取RFID卡
如果使用这种模块,硬件连接如下
MFRC522 | ESP32C3 |
3.3V | 3.3V |
GND | GND |
RST | 0 |
MISO | 5 |
MOSI | 6 |
SCK | 4 |
SDA | 7 |
RQ | 不接 |
把SDA接到原来的CS