#123Menengah

Pembaca Kartu RFID RC522 ESP32 (dengan LCD)

Di proyek ini, kita menyambungkan modul RFID RC522 berbasis MFRC522 ke ESP32 lewat SPI dan membaca UID kartu/tag. Ini menjadi dasar untuk aplikasi seperti kunci pintu, sistem keanggotaan, dan kontrol akses. Kita menampilkan UID yang terbaca di layar LCD; versi ini tidak membandingkannya dengan daftar kartu yang diizinkan. PERINGATAN: RC522 hanya bekerja di 3.3V; memberinya 5V akan membakar modulnya!

4.8(21)
39 selesai
Pembaca Kartu RFID RC522 ESP32 (dengan LCD)
Pernah penasaran bagaimana pintu mengenalimu ketika kamu menempelkan kartu sekolah atau gantungan kunci gedung? Dekatkan kartu ke pembaca RFID dan ESP32 membaca nomor ID uniknya lalu menampilkannya di layar LCD kecil; beberapa detik kemudian layar kembali menunggu kartu berikutnya. Langkah pertama menuju proyek seperti pintu berkartu atau sistem absensi.

Video

Skema rangkaian

Pembaca Kartu RFID RC522 ESP32 (dengan LCD) - Circuit

Kode sumber

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Pembaca Kartu RFID RC522 ESP32 (dengan LCD)
4// ─────────────────────────────────────────
5// Membaca modul RFID RC522 lewat SPI; UID kartu yang dipindai ditampilkan
6// dalam HEX di LCD I2C 16x2 selama 3 s, lalu layar "scan a card" (pindai
7// kartu) kembali.
8//
9// Pin:
10//   GPIO 5  -> SDA RC522 (SS)
11//   GPIO 18 -> RC522 SCK, GPIO 19 -> RC522 MISO, GPIO 23 -> RC522 MOSI
12//   GPIO 27 -> RST RC522
13//   GPIO 21 -> SDA LCD, GPIO 22 -> SCL LCD
14//   RC522 3.3V -> RC522 3.3V -> 3V3, IRQ dibiarkan tidak tersambung
15//   LCD VCC -> LCD VCC -> 5V (VIN), semua GND disatukan
16
17#include <Wire.h>
18#include <LiquidCrystal_I2C.h>
19#include <SPI.h>
20#include <MFRC522.h>
21
22// Definisi pin
23const int RST_PIN = 27;   // RST RC522
24const int SS_PIN  = 5;    // SDA RC522 (SS)
25
26// Pin SPI memakai default VSPI
27MFRC522 rfid(SS_PIN, RST_PIN);
28LiquidCrystal_I2C lcd(0x27, 16, 2);   // Alamat LCD 0x27 atau 0x3F
29
30unsigned long lastScan = 0;                 // Waktu pindai terakhir (ms)
31const unsigned long DISPLAY_HOLD = 3000;    // Lama tampilan UID (ms)
32bool showingCard = false;                   // Apakah ada UID di layar
33
34// Layar tunggu
35void showWaitMessage() {
36  lcd.clear();
37  lcd.setCursor(0, 0);
38  lcd.print("Kart okutun");
39  lcd.setCursor(0, 1);
40  lcd.print("Scan a card");
41}
42
43void setup() {
44  Wire.begin(21, 22);   // I2C: SDA=21, SCL=22
45  lcd.init();
46  lcd.backlight();
47
48  // Layar pembuka 3 s
49  lcd.setCursor(3, 0);
50  lcd.print("BlueGrays");
51  lcd.setCursor(3, 1);
52  lcd.print("RFID v1.0");
53  delay(3000);
54
55  // Mulai SPI dan RC522
56  SPI.begin();
57  rfid.PCD_Init();
58  delay(50);
59
60  showWaitMessage();
61}
62
63void loop() {
64  // Ketika waktunya habis, kembali ke layar tunggu
65  if (showingCard && millis() - lastScan > DISPLAY_HOLD) {
66    showWaitMessage();
67    showingCard = false;
68  }
69
70  // Keluar jika tidak ada kartu baru atau kartu tidak bisa dibaca
71  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) {
72    delay(50);
73    return;
74  }
75
76  // Cetak UID dalam HEX, misalnya 0A:1B:2C:3D
77  lcd.clear();
78  lcd.setCursor(0, 0);
79  lcd.print("Kart UID:");
80  lcd.setCursor(0, 1);
81  for (byte i = 0; i < rfid.uid.size; i++) {
82    if (rfid.uid.uidByte[i] < 0x10) lcd.print("0");
83    lcd.print(rfid.uid.uidByte[i], HEX);
84    // Tanpa pemisah untuk UID 7 byte: 14 karakter muat di baris
85    if (rfid.uid.size <= 5 && i < rfid.uid.size - 1) lcd.print(":");
86  }
87
88  lastScan = millis();
89  showingCard = true;
90
91  // Hentikan kartu dan matikan enkripsi
92  rfid.PICC_HaltA();
93  rfid.PCD_StopCrypto1();
94}
95

FAQ

Pin mana yang sebaiknya aku pakai untuk menyambungkan RC522 ke ESP32?

Yang dipakai adalah pin SPI bawaan ESP32: SCK = GPIO 18, MISO = GPIO 19, MOSI = GPIO 23. Pakai pin yang ditentukan di kode (mis. 5 dan 27) untuk SDA (SS) dan RST; tegangan catunya harus 3,3 V.

Apakah LCD dan RFID bekerja bersamaan?

Ya. Karena LCD memakai I2C (GPIO 21/22) dan RC522 memakai bus SPI, keduanya tidak saling mengganggu; dua bus komunikasi terpisah itu bekerja bersamaan.

Kenapa UID di sebagian kartu 4 byte dan di kartu lain 7 byte?

Kartu MIFARE Classic biasanya memakai UID 4 byte, sedangkan tag MIFARE Ultralight dan NTAG memakai UID 7 byte. Ketika membandingkan, kamu juga sebaiknya mengecek panjang UID-nya.

Bisakah aku menambahkan kartu yang diizinkan tanpa mengubah kode?

Bisa, kamu bisa menulis mode yang menambahkan kartu berikutnya ke daftar ketika "kartu admin" dipindai, dan menyimpan daftarnya ke penyimpanan permanen lewat Preferences.