{{tag>esp8266 nodemcu rfid}} ===== Lector RFID ===== En esta práctica vamos a utilizar un ESP8266-12E y el módulo RC522, para construirnos un lector de tarjetas de identificación por radio frecuencia **(RFID)** {{:electronica:esp8266:rfid-rc522_-_pin_layout.png?500|}} Lo primero que tenemos que tener en cuenta es que dependiendo del modelos de Arduino que utilicemos tenemos que usar un pin u otro. La tabla con las equivalencias es la siguiente: ^Módulo RC522^ESP8266-12E^ESP8266^Arduino ^ |1-> Vcc|3V3 |3V3 | 3V3| |2-> RST|D8|D4|D9| |3-> GND|GND|GND|GND| |4-> IRQ| | | | |5-> MISO|D12|D6|D12| |6-> MOSI|D11|D7|D11| |7-> SCK|D13|D5|D13| |8-> SDA|D10|D8|D10| El circuito quedaría de la siguiente forma: {{ :electronica:esp8266:esp8266_rfid_bb.png?600 |}} El código para comprobar que se leen las etiquetas // #include #include #include #include #define SS_PIN 15 #define RST_PIN 2 MFRC522 rfid(SS_PIN, RST_PIN); MFRC522::MIFARE_Key key; // Init array that will store new NUID byte nuidPICC[3]; 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; } Serial.println(F("Este código escanea el NUID de etiquetas MIFARE Classsic.")); Serial.print(F("Usar la siguiente llave:")); printHex(key.keyByte, MFRC522::MF_KEY_SIZE); } // ------------------------------------------------------------------ void printHex(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX); } } void printDec(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], DEC); } } //------------------------------------------------------------------ void loop() { // Buscamos tarjetas if ( ! rfid.PICC_IsNewCardPresent()) return; // SI la encuentra la leemos 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("La etiqueta no es del tipo 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("Una nueva tarjeta ha sido detectada.")); Serial.println(F("El NUID de la etiqueta es:")); Serial.print(F("En hex: ")); printHex(rfid.uid.uidByte, rfid.uid.size); Serial.println(); Serial.print(F("En decimal: ")); printDec(rfid.uid.uidByte, rfid.uid.size); Serial.println(); rfid.PICC_HaltA(); rfid.PCD_StopCrypto1(); } delay(600); } ==== Referencias ==== * http://www.prometec.net/arduino-rfid/ * https://github.com/miguelbalboa/rfid