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)
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:
El código para comprobar que se leen las etiquetas
// #include <WiFiClientSecure.h> #include <ESP8266WiFi.h> #include <SPI.h> #include <MFRC522.h> #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); }