Ultima entrada

  • 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 
    #include 
    
    #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 ……..

2 comentarios en «Ultima entrada»

  1. Hola Antonio!! LLegue a tu web buscando un tutorial de como instalar un ZBDongle-E en un QNAP TS 251D pero aun ando bastante liado jaja ojala me puedas dar una mano si tienes un tiempo libre!! Abrazo desde Argentina!!

    Responder

Responder a antonio Cancelar la respuesta