Presensi RFID Berbasis IoT dengan Google Spredsheet

```html

Presensi RFID Berbasis IoT

Sistem monitoring kehadiran siswa secara realtime menggunakan ESP32, RFID RC522, LCD I2C, dan Google Spreadsheet.

PROJECT IoT • SMK NEGERI 1 KEDUNGWUNI
Proyek presensi RFID berbasis ESP32 dan IoT

Presensi RFID ESP32 Google Spreadsheet Realtime Attendance System

Profil Tim

Nama Tim: Isi Nama Tim

Anggota 01 Isi Nama Siswa
Anggota 02 Isi Nama Siswa
Anggota 03 Isi Nama Siswa

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

Diagram sistem presensi RFID ESP32 IoT

Informasi Sistem

Mikrokontroler ESP32 DevKit
Identifikasi RFID RC522
Database Google Spreadsheet
Komunikasi WiFi / HTTP
Display LCD I2C 16×2
Platform Google Apps Script

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
Catatan: RC522 bekerja pada tegangan 3,3V. Jangan memberikan tegangan 5V langsung ke pin logika RC522.

Alur Kerja Sistem

1
Kartu RFID ditempel
2
RC522 membaca UID
3
ESP32 memproses data
4
Data dikirim melalui WiFi
5
Apps Script menerima data
6
Data tersimpan di Spreadsheet

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");
}
Catatan: Buat sheet bernama Data sebelum menjalankan Web App.

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();

}
Pengujian: Pastikan library MFRC522, LiquidCrystal_I2C, dan koneksi WiFi sudah tersedia sebelum melakukan upload.

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.

SMK Negeri 1 Kedungwuni
IoT Project • ESP32 • RFID • Google Spreadsheet
2026
```