Preview build — page text is a draft awaiting human review. Code badges come from real compiles. The flasher is real but not yet hardware-tested; the Playground is still a preview.
RFID अटेंडेंस: the finished build
ESP32Student projects

OLED के साथ RFID अटेंडेंस सिस्टम (ESP32 + RC522)

कार्ड टैप से IN/OUT हाज़िरी — OLED पर नाम और CSV लॉग।

कठिनाई
Medium
समय
2 घंटे
पार्ट्स की लागत
₹1,035 · $12
Verified — core esp32 3.3.12, MFRC522 1.4.12, 3 Nov 2026Compile-only

सामुदायिक ड्राफ़्ट — गलती बताएं

पार्ट्स लिस्ट

पार्टसंख्यालगभगखरीदें
ESP32 DevKit V1 (30-pin)1₹380खरीदें ESP32 DevKit V1 (30-pin)
RC522 RFID reader kit (card + key tag)1₹120खरीदें RC522 RFID reader kit (card + key tag)
Extra 13.56 MHz MIFARE cards (pack of 10)1₹150खरीदें Extra 13.56 MHz MIFARE cards (pack of 10)
0.96" SSD1306 I2C OLED (4-pin)1₹220खरीदें 0.96" SSD1306 I2C OLED (4-pin)
Active buzzer module1₹25खरीदें Active buzzer module
Breadboard + jumper wires1₹140खरीदें Breadboard + jumper wires
कुल₹1,035

एफ़िलिएट सूचना: “खरीदें” लिंक से FlashReady को बिना अतिरिक्त लागत के छोटा कमीशन मिल सकता है। कीमतें अनुमानित हैं।

वायरिंग

ESP32 DevKit V1Only the pins used are shown · 3.3 V logicRC522 RFID reader (MFRC522, 13.56 MHz)SSD1306 OLED 0.96″ (128×64, I2C)Active buzzer module (high-level trigger)D25D27GNDD23D22D21D19D18D43V3SDASCKMOSIMISOIRQ (not connected)GNDRST3.3VGNDVCCSCLSDAI/OVCCGND
Every connection
ESP32 DevKit V1Part · pinWireNotes
D4RC522 RFID reader (MFRC522, 13.56 MHz) · SDApurpleSPI chip select (SS)
D18RC522 RFID reader (MFRC522, 13.56 MHz) · SCKyellow
D23RC522 RFID reader (MFRC522, 13.56 MHz) · MOSIblue
D19RC522 RFID reader (MFRC522, 13.56 MHz) · MISOgreen
D27RC522 RFID reader (MFRC522, 13.56 MHz) · RSTwhite
3V3RC522 RFID reader (MFRC522, 13.56 MHz) · 3.3Vredसिर्फ़ 3.3 V — 5 V कभी नहीं
GNDRC522 RFID reader (MFRC522, 13.56 MHz) · GNDblack
D22SSD1306 OLED 0.96″ (128×64, I2C) · SCLyellow
D21SSD1306 OLED 0.96″ (128×64, I2C) · SDAblue
3V3SSD1306 OLED 0.96″ (128×64, I2C) · VCCred
GNDSSD1306 OLED 0.96″ (128×64, I2C) · GNDblack
D25Active buzzer module (high-level trigger) · I/Oorange
3V3Active buzzer module (high-level trigger) · VCCred
GNDActive buzzer module (high-level trigger) · GNDblack

बोर्ड की ख़ास बातें: RC522 3.3 V का पार्ट है — इसे 3V3 से पावर दें। ESP32 पर इसके SPI पिन सीधे जुड़ जाते हैं। SS को आम D5 की जगह D4 पर रखा है, क्योंकि GPIO5 एक स्ट्रैपिंग पिन है; RST D27 पर है। हर कार्ड को पहली बार टैप करने पर उसका UID प्रिंट होता है ("unknown")। उसे व्यक्ति के नाम के साथ <code>people</code> लिस्ट में कॉपी कर दें। रीडर तक के तार छोटे रखें (15 cm से कम)। लंबे SPI तारों से कार्ड कभी-कभी पढ़ा नहीं जाता।

कोड

rfid-attendance.inoArduino C++Open in PlaygroundOpen in PlaygroundFlash
// RFID attendance — ESP32 DevKit V1 + RC522 + SSD1306 OLED + buzzer module
// RC522 on VSPI (SCK D18, MISO D19, MOSI D23), SS on D4, RST on D27. OLED on I2C D21/D22.
// Every tap prints a CSV line (uid,name,in/out,seconds since start) to Serial.
#include <SPI.h>
#include <Wire.h>
#include <MFRC522.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

constexpr uint8_t RFID_SS = 4;
constexpr uint8_t RFID_RST = 27;
constexpr uint8_t BUZZER_PIN = 25;  // buzzer module I/O (high = on)

struct Person {
  const char* uid;   // as printed by the sketch, e.g. "A1B2C3D4"
  const char* name;
  bool in;
};
Person people[] = {
  {"A1B2C3D4", "Asha", false},
  {"0B1C2D3E", "Ravi", false},
};

MFRC522 rfid(RFID_SS, RFID_RST);
Adafruit_SSD1306 oled(128, 64, &Wire, -1);

void beep(int times, int ms) {
  for (int i = 0; i < times; i++) {
    digitalWrite(BUZZER_PIN, HIGH);
    delay(ms);
    digitalWrite(BUZZER_PIN, LOW);
    delay(80);
  }
}

void show(const String& top, const String& bottom) {
  oled.clearDisplay();
  oled.setTextColor(SSD1306_WHITE);
  oled.setTextSize(2);
  oled.setCursor(0, 8);
  oled.println(top);
  oled.setTextSize(1);
  oled.setCursor(0, 44);
  oled.println(bottom);
  oled.display();
}

void setup() {
  Serial.begin(115200);
  pinMode(BUZZER_PIN, OUTPUT);
  SPI.begin();
  rfid.PCD_Init();
  Wire.begin(21, 22);
  if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) Serial.println("OLED not found at 0x3C");
  show("Ready", "Tap your card");
  Serial.println("uid,name,status,seconds");
}

void loop() {
  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;

  char uid[21] = "";
  for (byte i = 0; i < rfid.uid.size && i < 10; i++) sprintf(uid + i * 2, "%02X", rfid.uid.uidByte[i]);

  Person* p = nullptr;
  for (auto& person : people)
    if (strcmp(person.uid, uid) == 0) p = &person;

  if (p) {
    p->in = !p->in;
    Serial.printf("%s,%s,%s,%lu\n", uid, p->name, p->in ? "IN" : "OUT", millis() / 1000);
    show(p->name, p->in ? "Checked IN" : "Checked OUT");
    beep(1, 120);
  } else {
    Serial.printf("%s,unknown,-,%lu\n", uid, millis() / 1000);
    show("Unknown", String("UID ") + uid);
    beep(3, 60);
  }
  rfid.PICC_HaltA();
  rfid.PCD_StopCrypto1();
  delay(1500);
  show("Ready", "Tap your card");
}

Compiled for esp32 on esp32 3.3.12 with MFRC522 1.4.12 · 3 Nov 2026

यह कैसे काम करता है

कार्ड टैप वाला अटेंडेंस रजिस्टर final-year का पसंदीदा प्रोजेक्ट है, क्योंकि यह काम का है और दिखाने में आसान है। इस वर्ज़न में ESP32, RC522 रीडर, जवाब दिखाने के लिए छोटा OLED और एक buzzer है, और हर टैप एक CSV लाइन के रूप में लॉग होता है जिसे आप सीधे spreadsheet में पेस्ट कर सकते हैं।

RC522, ESP32 के default VSPI पिन (SCK D18, MISO D19, MOSI D23) पर SPI से बात करता है; chip-select D4 पर और reset D27 पर है। कार्ड पास आते ही स्केच उसका UID पढ़ता है — कार्ड में पहले से लिखा एक अनोखा नंबर — और उसे A1B2C3D4 जैसी hex string में बदल देता है।

यह string लोगों की एक छोटी लिस्ट में ढूँढी जाती है। जाना-पहचाना कार्ड उस व्यक्ति को IN और OUT के बीच बदलता है, OLED पर नाम दिखाता है और एक छोटी बीप देता है। अनजान कार्ड पर तीन जल्दी-जल्दी बीप होती हैं और स्क्रीन पर उसका UID आता है — नए कार्ड इसी तरह जोड़े जाते हैं। हर टैप Serial पर uid,name,status,seconds के रूप में भी प्रिंट होता है।

Real-time clock के बिना लॉग में “शुरू होने के बाद से सेकंड” आते हैं। आगे के अपग्रेड में असली समय के लिए DS3231 और Google Sheets पर Wi-Fi अपलोड जोड़ा गया है।

समस्या समाधान

कार्ड टैप करने पर कुछ नहीं होता

देखें कि RC522 को 3.3 V मिल रहा है और उसका SDA (SS) तार D4 पर है। लाइब्रेरी का DumpInfo example चलाएँ — अगर वह firmware version नहीं पढ़ पाता, तो SPI वायरिंग गलत है।

OLED काला ही रहता है

कुछ OLED 0x3C की जगह 0x3D पर जवाब देते हैं। I2C scanner (English) चलाएँ और oled.begin में address बदल दें।

कार्ड बहुत पास लाने पर ही पढ़ा जाता है

फ़ोन कवर, धातु की मेज़ और बैज होल्डर field को कमज़ोर करते हैं। रीडर को प्लास्टिक या लकड़ी पर लगाएँ और होल्डर के बिना टेस्ट करें।

आगे क्या करें

  • Apps Script वेब ऐप के ज़रिए हर टैप Wi-Fi से Google Sheets में भेजें।
  • DS3231 RTC जोड़ें ताकि हर एंट्री में असली तारीख़ और समय हो।
  • कार्ड लिस्ट SPIFFS/LittleFS में रखें ताकि उसे बिना दोबारा अपलोड किए बदल सकें।

↑↓ to move · Enter to open