El módulo RFID RC522 es un lector de tarjetas inteligentes que, entre otras cosas, permite activar un mecanismo cuando se presenta la tarjeta adecuada al lector. En este tutorial, veremos la gestión de un módulo RFID RC522 con una tarjeta NodeMCU ESP32.
Prerrequisito: Programar su NodeMCU con Arduino
Material
- Ordenador
- Placa NodeMCU ESP32
- Cable USB A macho a Micro B macho
- módulo RFID RC522
Esquema
El módulo RC522 RFID utiliza el protocolo SPI para comunicarse con el ESP32. La comunicación SPI utiliza cajas específicas en este tipo de microcontroladores.
El pinout es el siguiente (lado izquierdo RC522, lado derecho ESP32):
- Vcc <-> 3V3 (o Vin(5V) según la versión del módulo)
- RST (Reset) <-> D0
- GND (Masse) <-> GND
- MISO (Master Input Slave Output) <-> 19
- MOSI (Master Output Slave Input) <-> 23
- SCK (Serial Clock) <-> 18
- SS/SDA (Slave select) <-> 5
Atención: Según la versión del módulo RFID, la tensión de alimentación puede ser diferente (3,3V o 5V). Compruebe la tensión de alimentación de su módulo.
Como recordatorio, aquí está el diagrama de pines de la placa ESP32.
Código para leer una tarjeta RFID
Para utilizar el módulo RC522 RFID utilizamos la librería SPI.h que nos permitirá establecer la comunicación entre la tarjeta ESP32 y el módulo; y la librería MFRC522.h que nos permitirá dialogar con el módulo.
//Libraries #include <SPI.h>//https://www.arduino.cc/en/reference/SPI #include <MFRC522.h>//https://github.com/miguelbalboa/rfid //Constants #define SS_PIN 5 #define RST_PIN 0 //Parameters const int ipaddress[4] = {103, 97, 67, 25}; //Variables byte nuidPICC[4] = {0, 0, 0, 0}; MFRC522::MIFARE_Key key; MFRC522 rfid = MFRC522(SS_PIN, RST_PIN); void setup() { //Init Serial USB Serial.begin(115200); Serial.println(F("Initialize System")); //init rfid D8,D5,D6,D7 SPI.begin(); rfid.PCD_Init(); Serial.print(F("Reader :")); rfid.PCD_DumpVersionToSerial(); } void loop() { readRFID(); } void readRFID(void ) { /* function readRFID */ ////Read RFID card for (byte i = 0; i < 6; i++) { key.keyByte[i] = 0xFF; } // Look for new 1 cards if ( ! rfid.PICC_IsNewCardPresent()) return; // Verify if the NUID has been readed if ( !rfid.PICC_ReadCardSerial()) return; // Store NUID into nuidPICC array for (byte i = 0; i < 4; i++) { nuidPICC[i] = rfid.uid.uidByte[i]; } Serial.print(F("RFID In dec: ")); printDec(rfid.uid.uidByte, rfid.uid.size); Serial.println(); // 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); } }
Resultado
Cuando se pasa una tarjeta, un distintivo o un chip RFID por delante del módulo, la dirección de identificación del distintivo se muestra en el monitor de serie.
Aplicaciones
- Développer une interface Web qui ne s’active que lorsque le bon badge est passé devant le module
Magnifica información bien estructurada y completa, muy adecuada para pequeños desarrolladores con poca experiencia.
No funciona cuando lo intento con un esp32 devkit v1, en el codigo para gastar los viajes me aparece este error:
invalid conversion from ‘const byte* {aka const unsigned char*}’ to ‘byte* {aka unsigned char*}’ [-fpermissive]
En la linea de:
estado = mfrc522.MIFARE_Read(numBlque, datosLectura, &tamBuffer);
muy bueno , esta es una web (https://naylampmechatronics.com/espressif-esp/1011-nodemcu-32-38-pin-esp32-wifi.html ) que te muestra el pineado del ESP32 de 38 pines para que lo añadas a la web ; al parecer ,este modelo lo van a quitar , la hoja de datos de Espresiff dice que no es apto para nuevos diseños.
Dato importante del ESP32 de 38 pines, se quema un diodo que hay encima del botón izquierdo cuando se pulsa mucho tiempo o se pulsan los dos botones , se puede cambiar y poner uno normal.(1n4001)y se recupera el modo de acceso al puerto serie para cargar nuevos programas
Cuando este diodo se quema, todo parece absolutamente normal pero no hay manera de reprogramar el ESP32.
El cátodo va orientado hacia el pulsador.
Espero que te sirva la información y que sigas publicando más cosas
Atentamente :
Luis