Lector RFID y conexión a ESP8266

Hace unos días en la población donde vivo empezaron a distribuir los nuevos contenedores marrones para residuos orgánicos y los contenedores grises para residuos en general con lector RFID para la apertura , el ayuntamiento da una tarjeta y un TAG para llavero y me pico la curiosidad por jugar un poco con el tema del RFID.

Lo primero fue hacerme con un lector/grabador de etiquetas RFID aquí

El paquete viene perfectamente embalado con sus tres elementos

Trae un lector/grabador RC522 , un TAG de llavero y una tarjeta

Este seria el pinout de modulo RFID

Este seria el conexionado del modulo RFID a una placa WEMOS D1 MINI que sera la que usemos

SeñalWeMos D1 miniGeneric
RST/ResetD3 GPIO-0
SPI SSD8 GPIO-15
SPI MOSID7GPIO-13
SPI MISOD6GPIO-12
SPI SCKD5GPIO-14

En la protoboard quedaria algo similar a esto

Usaremos este código para leer los datos de los diferentes RFID que tengamos , de momento solo quiero leer el NUID , mas adelante cuando tenga una tarde libre lo conectare por MQTT a Home Assistant y le daré mas funcionalidades , pero de momento solo con ver el NUID y probar el modulo me es mas que suficiente.

/*
 * --------------------------------------------------------------------------------------------------------------------
 * Example sketch/program showing how to read new NUID from a PICC to serial.
 * --------------------------------------------------------------------------------------------------------------------
 * This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid
 * 
 * Example sketch/program showing how to the read data from a PICC (that is: a RFID Tag or Card) using a MFRC522 based RFID
 * Reader on the Arduino SPI interface.
 * 
 * When the Arduino and the MFRC522 module are connected (see the pin layout below), load this sketch into Arduino IDE
 * then verify/compile and upload it. To see the output: use Tools, Serial Monitor of the IDE (hit Ctrl+Shft+M). When
 * you present a PICC (that is: a RFID Tag or Card) at reading distance of the MFRC522 Reader/PCD, the serial output
 * will show the type, and the NUID if a new card has been detected. Note: you may see "Timeout in communication" messages
 * when removing the PICC from reading distance too early.
 * 
 * @license Released into the public domain.
 * 
 * Typical pin layout used:
 * -----------------------------------------------------------------------------------------
 *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
 *             Reader/PCD   Uno/101       Mega      Nano v3    Leonardo/Micro   Pro Micro
 * Signal      Pin          Pin           Pin       Pin        Pin              Pin
 * -----------------------------------------------------------------------------------------
 * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
 * SPI SS      SDA(SS)      10            53        D10        10               10
 * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
 * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
 * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
 *
 * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout
 */

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 15   //D8
#define RST_PIN 0   //D3
 
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(9600);
  SPI.begin(); // Init SPI bus
  rfid.PCD_Init(); // Init MFRC522 

  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }
  delay(2000);
  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() {

  // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
  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(' ');
    Serial.print(buffer[i], DEC);
  }
}

Al ir a subir la aplicacion al ESP me daba este error “serial.serialutil.SerialException: Cannot configure port, something went wrong. Original message: PermissionError(13, ‘Uno de los dispositivos conectados al sistema no funciona.’, None, 31)”

Es raro , pero supongo que por alguna actualización de W10algo paso con el driver CH341SER

Did you update your drivers to version 3.8?
This broke it for me.

Try the older version 3.5 from 2019-03-18: CH341SER.EXE - Nanjing Qinheng Microelectronics Co., Ltd.

This worked for me.

Toco reinstalarlo y a funcionar todo de nuevo , dejo aquí el driver por si acaso ….

Venga , ahora a leer chismes …………….

Buscando por casa resulta que tenia una tarjeta de un club deportivo , la pulsera del gimnasio , el llavero del contenedor , la tarjeta del contenedor y algunas mas …..

Aquí lo dejo compilado por si no queréis ni montar el IDE de Arduino y lo podéis pasar directamente con Tasmotizer

Y con esto y un bizcocho ……..