RFID522 - javierre/nodemcu GitHub Wiki
Funciona mediante tarjetas, llaveros y pegatinas RFID:
El lector presenta las siguientes características:
- Alimentación: 3V
- Frecuencia: 13.56MHz
- Distancia máxima: 3cm.
Pines:
Señal | MFRC522 | WeMos D1 mini | NodeMcu | Genérico |
---|---|---|---|---|
3.3V | 3.3V | 3V3 | 3V3 (V) | 3V3 |
GND | GND | G | G | G |
RST/Reset | RST | D3 [1] | D1 [1] | GPIO-5 [1] |
SPI SS | SDA [3] | D8 [2] | D2 [2] | GPIO-4 [2] |
SPI MOSI | MOSI | D7 | D7 | GPIO-13 |
SPI MISO | MISO | D6 | D6 | GPIO-12 |
SPI SCK | SCK | D5 | D5 | GPIO-14 |
[1] Configurable, típicamente definido como RST_PIN en el programa.
[2] Configurable, típicamente definido como SS_PIN en el programa..
[3] SDA puede aparecer como SS en modelos antiguos de MFRC522.
Cabe destacar que los pines MOSI, MISO y SCK no son configurables. Debemos usar los pines MOSI, MISO y SCK definidos en cada placa (ver aquí para NODEMCU)
Más datos en este link al datasheet.
Como con cualquier sensor, debemos conocer el uso de cada uno de sus pines y respetar la polaridad de la alimentación:
/*
* ----------------------------------------------------------------------
* Example program showing how to read new NUID from a PICC to serial.
* ----------------------------------------------------------------------
* https://circuits4you.com
*
* RC522 Interfacing with NodeMCU
*
* Typical pin layout used:
* ----------------------------------
* MFRC522 Node
* Reader/PCD MCU
* Signal Pin Pin
* ----------------------------------
* RST/Reset RST D1 (GPIO5)
* SPI SS SDA(SS) D2 (GPIO4)
* SPI MOSI MOSI D7 (GPIO13)
* SPI MISO MISO D6 (GPIO12)
* SPI SCK SCK D5 (GPIO14)
* 3.3V 3.3V 3.3V
* GND GND GND
*/
#include <SPI.h>
#include <MFRC522.h>
constexpr uint8_t RST_PIN = D1; // Configurable, see typical pin layout above
constexpr uint8_t SS_PIN = D2; // Configurable, see typical pin layout above
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
MFRC522::MIFARE_Key key;
// Init array that will store new NUID
byte nuidPICC[4];
void setup() {
Serial.begin(115200);
SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init MFRC522
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
Serial.println(F("This code scan the MIFARE Classsic NUID."));
Serial.print(F("Using the following key:"));
printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
}
void loop() {
// Look for new cards
if ( ! rfid.PICC_IsNewCardPresent())
return;
// Verify if the NUID has been readed
if ( ! rfid.PICC_ReadCardSerial())
return;
Serial.print(F("PICC type: "));
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
Serial.println(rfid.PICC_GetTypeName(piccType));
// Check is the PICC of Classic MIFARE type
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F("Your tag is not of type MIFARE Classic."));
return;
}
if (rfid.uid.uidByte[0] != nuidPICC[0] ||
rfid.uid.uidByte[1] != nuidPICC[1] ||
rfid.uid.uidByte[2] != nuidPICC[2] ||
rfid.uid.uidByte[3] != nuidPICC[3] ) {
Serial.println(F("A new card has been detected."));
// Store NUID into nuidPICC array
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
}
Serial.println(F("The NUID tag is:"));
Serial.print(F("In hex: "));
printHex(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
Serial.print(F("In dec: "));
printDec(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
}
else Serial.println(F("Card read previously."));
// Halt PICC
rfid.PICC_HaltA();
// Stop encryption on PCD
rfid.PCD_StopCrypto1();
}
/**
* Helper routine to dump a byte array as hex values to Serial.
*/
void printHex(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
}
/**
* Helper routine to dump a byte array as dec values to Serial.
*/
void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], DEC);
}
}
Es posible que el programa nos de un error si no tenemos instalada la librería MFRC522 (aparece en el segundo #include del código anterior). Para ello debemos seguir los pasos en cómo solucionar problemas en la wiki.
Códigos de ejemplo para NodeMCU
También podemos usar Wemos para leer nuestras tarjetas: