Rohan Barnwal
Published © GPL3+

How to Interface MFRC522 RFID Reader with the ESP32-S3-BOX

Build a touchscreen RFID scanner with the ESP32-S3-BOX-3 using LovyanGFX, displaying RFID card UIDs instantly on the built-in display.

BeginnerFull instructions provided5
How to Interface MFRC522 RFID Reader with the ESP32-S3-BOX

Things used in this project

Hardware components

Espressif ESP32 S3 Box3
×1
Jumper wires (generic)
Jumper wires (generic)
×1
RFID reader (generic)
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Code

Code

Arduino
#include <Arduino.h>
#include <SPI.h>

#define LGFX_ESP32_S3_BOX_V3
#include <LGFX_AUTODETECT.hpp>
#include <LovyanGFX.hpp>

#include <MFRC522v2.h>
#include <MFRC522DriverSPI.h>
#include <MFRC522DriverPinSimple.h>

// ================= DISPLAY =================
static LGFX lcd;

// ================= RFID PINS =================
#define SS_PIN    10
#define SCK_PIN   12
#define MISO_PIN  13
#define MOSI_PIN  11

// ================= RFID =================
MFRC522DriverPinSimple ss_pin(SS_PIN);

SPIClass RFID_SPI(FSPI);

MFRC522DriverSPI driver{ss_pin, RFID_SPI};

MFRC522 mfrc522{driver};

String getUIDString()
{
  String uid = "";

  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    if (mfrc522.uid.uidByte[i] < 0x10)
      uid += "0";

    uid += String(mfrc522.uid.uidByte[i], HEX);
  }

  uid.toUpperCase();
  return uid;
}

void setup()
{
  Serial.begin(115200);

  // Display
  lcd.init();
  lcd.setRotation(1);
  lcd.setBrightness(255);

  lcd.fillScreen(TFT_BLACK);
  lcd.setTextColor(TFT_WHITE);
  lcd.setTextSize(2);

  lcd.drawString("SCAN RFID CARD", 50, 40);

  // RFID
  RFID_SPI.begin(
    SCK_PIN,
    MISO_PIN,
    MOSI_PIN,
    SS_PIN
  );

  mfrc522.PCD_Init();

  Serial.println("================================");
  Serial.println("RFID READY");
  Serial.println("SCAN A CARD...");
  Serial.println("================================");
}

void loop()
{
  if (!mfrc522.PICC_IsNewCardPresent())
    return;

  if (!mfrc522.PICC_ReadCardSerial())
    return;

  String uid = getUIDString();

  // Serial Monitor
  Serial.println();
  Serial.println("CARD DETECTED");
  Serial.print("UID : ");
  Serial.println(uid);
  Serial.println("----------------------");

  // Display
  lcd.fillRect(0, 90, 320, 120, TFT_BLACK);

  lcd.setTextColor(TFT_GREEN);
  lcd.drawString("CARD DETECTED", 40, 90);

  lcd.setTextColor(TFT_YELLOW);
  lcd.drawString("UID:", 20, 140);
  lcd.drawString(uid, 20, 170);

  mfrc522.PICC_HaltA();
  mfrc522.PCD_StopCrypto1();

  delay(1000);
}

Credits

Rohan Barnwal
46 projects • 40 followers
Rohan Barnwal - maker, hacker, tech enthusiast. I explore new tech & find innovative solutions. See my projects on hackster.io!

Comments