Presensi RFID Berbasis IoT
Sistem monitoring kehadiran siswa secara realtime menggunakan ESP32, RFID RC522, LCD I2C, dan Google Spreadsheet.
Presensi RFID ESP32 Google Spreadsheet Realtime Attendance System
Profil Tim
Nama Tim: Isi Nama Tim
Sekolah: SMK Negeri 1 Kedungwuni
Deskripsi Proyek
Sistem ini merupakan prototype presensi siswa berbasis Internet of Things (IoT) menggunakan ESP32 sebagai mikrokontroler dan RFID RC522 sebagai media identifikasi.
Ketika kartu RFID ditempelkan pada reader, ESP32 membaca UID kartu kemudian mengidentifikasi siswa. Data kehadiran selanjutnya dikirim melalui jaringan WiFi menuju Google Apps Script dan disimpan pada Google Spreadsheet.
Sistem ini memungkinkan data presensi dipantau secara realtime tanpa harus melakukan pencatatan manual.
Gambaran Sistem
Informasi Sistem
Komponen yang Digunakan
| No | Komponen | Jumlah | Fungsi |
|---|---|---|---|
| 1 | ESP32 DevKit | 1 | Mikrokontroler dan koneksi WiFi |
| 2 | RFID RC522 | 1 | Membaca UID kartu RFID |
| 3 | LCD I2C 16×2 | 1 | Menampilkan informasi presensi |
| 4 | Buzzer | 1 | Memberikan indikator suara |
| 5 | Kartu RFID | Beberapa | Identitas siswa |
| 6 | Jumper Cable | Secukupnya | Penghubung rangkaian |
Wiring ESP32
RFID RC522 → ESP32
| RC522 | ESP32 | Fungsi |
|---|---|---|
| SDA / SS | GPIO 5 | Chip Select |
| SCK | GPIO 18 | SPI Clock |
| MOSI | GPIO 23 | SPI Data Out |
| MISO | GPIO 19 | SPI Data In |
| RST | GPIO 27 | Reset RFID |
| 3.3V | 3.3V | Power |
| GND | GND | Ground |
LCD I2C → ESP32
| LCD I2C | ESP32 |
|---|---|
| SDA | GPIO 21 |
| SCL | GPIO 22 |
| VCC | 5V / sesuai modul |
| GND | GND |
Buzzer → ESP32
| Buzzer | ESP32 |
|---|---|
| + | GPIO 25 |
| - | GND |
Alur Kerja Sistem
Google Apps Script
function doGet(e) {
var sheet =
SpreadsheetApp
.getActiveSpreadsheet()
.getSheetByName("Data");
var uid = e.parameter.uid || "";
var nama = e.parameter.nama || "";
sheet.appendRow([
new Date(),
uid,
nama
]);
return ContentService
.createTextOutput("OK");
}
Source Code ESP32
#include <WiFi.h>
#include <HTTPClient.h>
#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define SS_PIN 5
#define RST_PIN 27
#define BUZZER 25
MFRC522 rfid(SS_PIN, RST_PIN);
LiquidCrystal_I2C lcd(0x27, 16, 2);
const char* ssid = "NamaWifi";
const char* password = "PasswordWifi";
String scriptURL =
"ISI_URL_WEB_APP_APPS_SCRIPT";
void setup() {
Serial.begin(115200);
// SPI RFID
SPI.begin();
rfid.PCD_Init();
// Buzzer
pinMode(BUZZER, OUTPUT);
digitalWrite(BUZZER, LOW);
// LCD
Wire.begin(21, 22);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Connecting WiFi");
// WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi Connected");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("System Ready");
delay(1500);
lcd.clear();
lcd.print("Tempelkan Kartu");
}
void loop() {
// Cek kartu baru
if (!rfid.PICC_IsNewCardPresent()) {
return;
}
// Baca kartu
if (!rfid.PICC_ReadCardSerial()) {
return;
}
// Membaca UID
String uid = "";
for (byte i = 0;
i < rfid.uid.size;
i++) {
if (rfid.uid.uidByte[i] < 0x10) {
uid += "0";
}
uid += String(
rfid.uid.uidByte[i],
HEX
);
}
uid.toUpperCase();
Serial.print("UID: ");
Serial.println(uid);
// Buzzer
digitalWrite(BUZZER, HIGH);
delay(150);
digitalWrite(BUZZER, LOW);
// LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("UID:");
lcd.setCursor(0, 1);
lcd.print(uid.substring(0, 16));
// Kirim data
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String nama = "Siswa";
String url =
scriptURL +
"?uid=" + uid +
"&nama=" + nama;
http.begin(url);
int httpCode =
http.GET();
Serial.print("HTTP Code: ");
Serial.println(httpCode);
if (httpCode > 0) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Presensi Berhasil");
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Gagal Mengirim");
}
http.end();
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WiFi Terputus");
}
delay(2000);
lcd.clear();
lcd.print("Tempelkan Kartu");
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
Video Demo
Kesimpulan
Proyek presensi RFID berbasis IoT menunjukkan bagaimana mikrokontroler ESP32 dapat digunakan untuk membangun sistem monitoring kehadiran yang terhubung dengan internet.
Kombinasi RFID RC522, WiFi ESP32, Google Apps Script, dan Google Spreadsheet menghasilkan sistem yang dapat mencatat data presensi secara otomatis dan memudahkan proses monitoring oleh guru.
Proyek ini juga dapat dikembangkan lebih lanjut dengan penambahan database siswa, status datang/pulang, notifikasi Telegram atau WhatsApp, foto siswa, dashboard monitoring, serta sistem laporan otomatis.


