#123Orta

ESP32 RFID RC522 Kart Okuyucu (LCD Ekranlı)

Bu projede MFRC522 tabanlı RC522 RFID modülünü ESP32'ye SPI üzerinden bağlayıp kart/etiket UID'sini okuyacağız. Kapı kilidi, üyelik sistemi ve giriş kontrolü gibi uygulamaların temelini oluşturur. Okunan UID'yi LCD ekranda göstereceğiz; bu sürümde yetkili kart listesiyle karşılaştırma yapılmaz. **DİKKAT:** RC522 sadece **3.3V** ile çalışır, 5V verirseniz modül yanar!

4.8(21)
38 tamamlandı
ESP32 RFID RC522 Kart Okuyucu (LCD Ekranlı)
Okul kartını ya da apartman anahtarlığını okutunca kapı seni nasıl tanıyor, hiç merak ettin mi? Kartı RFID okuyucuya yaklaştırdığında ESP32 kartın kendine özgü kimlik numarasını okur ve küçük LCD ekranda gösterir; birkaç saniye sonra ekran yeni kart beklemeye döner. Kartlı kapı ya da yoklama sistemi gibi projelerin ilk adımını atmış olursun.

Video

Devre Şeması

ESP32 RFID RC522 Kart Okuyucu (LCD Ekranlı) - Circuit

Kaynak Kodu

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   ESP32 RFID RC522 Kart Okuyucu (LCD Ekranlı)
4// ─────────────────────────────────────────
5// RC522 RFID modülü SPI ile okunur; okutulan kartın UID'si 16x2 I2C LCD'de
6// HEX olarak 3 sn gösterilir, sonra "Kart okutun" ekranına dönülür.
7//
8// Pinler:
9//   GPIO 5  -> RC522 SDA (SS)
10//   GPIO 18 -> RC522 SCK, GPIO 19 -> RC522 MISO, GPIO 23 -> RC522 MOSI
11//   GPIO 27 -> RC522 RST
12//   GPIO 21 -> LCD SDA, GPIO 22 -> LCD SCL
13//   RC522 3.3V -> 3V3, IRQ boş kalır
14//   LCD VCC -> 5V (VIN), tüm GND'ler ortak
15
16#include <Wire.h>
17#include <LiquidCrystal_I2C.h>
18#include <SPI.h>
19#include <MFRC522.h>
20
21// Pin tanımları
22const int RST_PIN = 27;   // RC522 RST
23const int SS_PIN  = 5;    // RC522 SDA (SS)
24
25// SPI pinleri VSPI varsayılanı: SCK 18, MISO 19, MOSI 23
26MFRC522 rfid(SS_PIN, RST_PIN);
27LiquidCrystal_I2C lcd(0x27, 16, 2);   // LCD adresi 0x27, bazen 0x3F
28
29unsigned long lastScan = 0;                 // Son okuma zamanı (ms)
30const unsigned long DISPLAY_HOLD = 3000;    // UID ekranda kalma süresi (ms)
31bool showingCard = false;                   // Ekranda UID var mı
32
33// Bekleme ekranı
34void showWaitMessage() {
35  lcd.clear();
36  lcd.setCursor(0, 0);
37  lcd.print("Kart okutun");
38  lcd.setCursor(0, 1);
39  lcd.print("Scan a card");
40}
41
42void setup() {
43  Wire.begin(21, 22);   // I2C: SDA=21, SCL=22
44  lcd.init();
45  lcd.backlight();
46
47  // Açılış ekranı 3 sn
48  lcd.setCursor(3, 0);
49  lcd.print("BlueGrays");
50  lcd.setCursor(3, 1);
51  lcd.print("RFID v1.0");
52  delay(3000);
53
54  // SPI ve RC522'yi başlat
55  SPI.begin();
56  rfid.PCD_Init();
57  delay(50);
58
59  showWaitMessage();
60}
61
62void loop() {
63  // Süre dolunca bekleme ekranına dön
64  if (showingCard && millis() - lastScan > DISPLAY_HOLD) {
65    showWaitMessage();
66    showingCard = false;
67  }
68
69  // Yeni kart yoksa ya da okunamadıysa çık
70  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) {
71    delay(50);
72    return;
73  }
74
75  // UID'yi HEX olarak yaz, örnek 0A:1B:2C:3D
76  lcd.clear();
77  lcd.setCursor(0, 0);
78  lcd.print("Kart UID:");
79  lcd.setCursor(0, 1);
80  for (byte i = 0; i < rfid.uid.size; i++) {
81    if (rfid.uid.uidByte[i] < 0x10) lcd.print("0");
82    lcd.print(rfid.uid.uidByte[i], HEX);
83    // 7 baytlık UID'de ayırıcı yok: 14 karakter satıra sığar
84    if (rfid.uid.size <= 5 && i < rfid.uid.size - 1) lcd.print(":");
85  }
86
87  lastScan = millis();
88  showingCard = true;
89
90  // Kartı beklemeye al, şifrelemeyi bitir
91  rfid.PICC_HaltA();
92  rfid.PCD_StopCrypto1();
93}
94

Sıkça Sorulanlar

RC522'yi ESP32'ye hangi pinlerle bağlarım?▾

ESP32'nin varsayılan SPI pinleri kullanılır: SCK = GPIO 18, MISO = GPIO 19, MOSI = GPIO 23. SDA (SS) ve RST için koddaki pinleri (ör. 5 ve 27) kullan; besleme mutlaka 3,3 V olmalı.

LCD ve RFID aynı anda çalışır mı?▾

Evet. LCD I2C (GPIO 21/22), RC522 ise SPI hattını kullandığı için birbirini etkilemez; iki ayrı haberleşme hattı aynı anda çalışır.

UID neden bazı kartlarda 4, bazılarında 7 bayt?▾

MIFARE Classic kartlar genelde 4 baytlık, MIFARE Ultralight ve NTAG etiketler 7 baytlık UID kullanır. Karşılaştırma yaparken UID uzunluğunu da kontrol etmelisin.

Yetkili kartları kod değiştirmeden ekleyebilir miyim?▾

Evet, 'yönetici kartı' okutulunca bir sonraki kartı listeye ekleyen bir mod yazabilir, listeyi Preferences ile kalıcı belleğe kaydedebilirsin.

ESP32 RFID RC522 Kart Okuyucu (LCD Ekranlı) | BlueGrays