Membangun Sistem Parkir Cerdas dengan ESP32 dan Telegram Bot

Daftar Isi

Di era digital dan otomatisasi seperti sekarang, sistem akses yang aman dan cerdas sangat dibutuhkan untuk rumah, kantor, dan fasilitas publik lainnya. Salah satu solusi praktis dan efisien adalah penggunaan RFID (Radio Frequency Identification) yang dapat mengautentikasi pengguna secara cepat dan mudah.

Apa Itu Sistem Akses Otomatis?

Sistem akses otomatis adalah solusi pintar yang memungkinkan pintu, gerbang, atau penghalang dibuka secara otomatis berdasarkan verifikasi identitas pengguna. Dalam artikel ini, kita akan membangun Sistem Akses Otomatis yang memanfaatkan:

  • ESP32 sebagai otak mikrokontroler
  • RC522 RFID reader untuk membaca kartu
  • LCD 16x2 I2C sebagai tampilan
  • Servo motor untuk membuka dan menutup pintu
  • Telegram bot untuk mengirimkan notifikasi real-time

Alat & Bahan

Koneksi (Wiring)

RFID RC522 ↔ ESP32
RC522 -> ESP32
 SDA  -> GPIO5
 SCK  -> GPIO18
 MOSI -> GPIO23
 MISO -> GPIO19
 IRQ  ->
 GND  -> GND
 RST  -> GPIO27
 3.3V -> 3.3V
LCD I2C ↔ ESP32
LCD12C ->  ESP32
 SCL   ->  GPI22
 SDA   ->  GPIO21
 VCC   ->   VIN
 GND   ->   GND
Servo ↔ ESP32
Servo  ->  ESP32
 DIN   ->  GPI13
 VCC   ->  VIN
 GND   ->  GND

Menyiapkan Bot Telegram

  1. Buka Telegram, cari @BotFather
  2. Gunakan perintah /newbot dan ikuti instruksinya
  3. Simpan token API yang diberikan

Instalasi Library

  1. Buka Arduino IDE, kemudian
  2. Masuk ke Library Manager (Sketch > Include Library > Manage Libraries)
  3. Cari CTBot, LiquidCrystal_I2C, MFRC522, ESP32Servo dan instal.

Kode Program


#include <WiFi.h>
#include <CTBot.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <MFRC522.h>
#include <ESP32Servo.h>

// RFID
#define SS_PIN 5
#define RST_PIN 27
MFRC522 mfrc522(SS_PIN, RST_PIN);

// LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Servo
Servo myServo;
#define SERVO_PIN 13

// Telegram
CTBot myBot;
String ssid = "SSID WIFI";             // Ganti dengan nama WiFi
String pass = "PASS WIFI";             // Ganti dengan password WiFi
String token = "TOKEN API";            // Ganti dengan token bot dari @BotFather

// UID kartu valid
String validUID = "a0a99c32";          // Ganti dengan UID kartu kamu

String getUIDString() {
  String uidStr = "";
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    if (mfrc522.uid.uidByte[i] < 0x10) uidStr += "0";
    uidStr += String(mfrc522.uid.uidByte[i], HEX);
  }
  return uidStr;
}

void setup() {
  Serial.begin(115200);
  Wire.begin();
  SPI.begin();
  mfrc522.PCD_Init();

  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Scan Kartu RFID");

  myServo.attach(SERVO_PIN);
  myServo.write(0); // Posisi awal tertutup

  // Koneksi WiFi dan Bot
  myBot.wifiConnect(ssid, pass);
  myBot.setTelegramToken(token);

  if (myBot.testConnection()) {
    Serial.println("Bot Telegram terkoneksi!");
  } else {
    Serial.println("Gagal koneksi ke Telegram.");
  }
}

void loop() {
  TBMessage msg;

  // Jika ada kartu RFID terdeteksi
  if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
    String uidStr = getUIDString();
    Serial.println("UID: " + uidStr);

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("UID:");
    lcd.setCursor(0, 1);
    lcd.print(uidStr);

    if (uidStr == validUID) {
      Serial.println("Akses Diterima");
      lcd.clear();
      lcd.print("Akses Diterima");

      // Servo buka 90 derajat
      myServo.write(90);
      delay(2000); // tunggu 2 detik
      myServo.write(0); // kembali ke posisi awal

      // Kirim ke Telegram
      myBot.sendMessage(msg.sender.id, "✅ Akses diterima: " + uidStr);
    } else {
      Serial.println("Akses Ditolak");
      lcd.clear();
      lcd.print("Akses Ditolak");
      myBot.sendMessage(msg.sender.id, "❌ Akses ditolak: " + uidStr);
    }

    mfrc522.PICC_HaltA();
    mfrc522.PCD_StopCrypto1();

    delay(2000);
    lcd.clear();
    lcd.print("Scan Kartu RFID");
  }

  // Periksa pesan Telegram
  if (myBot.getNewMessage(msg)) {
    String txt = msg.text;

    if (txt == "/status") {
      myBot.sendMessage(msg.sender.id, "🤖 Sistem parkir siap. Silakan tempel kartu RFID.");
    } else {
      myBot.sendMessage(msg.sender.id, "Perintah tidak dikenal.\nGunakan /status untuk cek.");
    }

    Serial.println("Pesan Telegram: " + txt);
  }

  delay(300);
}
Ganti SSID, Password WiFi, Token Telegram dan UID Kartu dengan milik Anda:

// Telegram
CTBot myBot;
String ssid = "SSID WIFI";             // Ganti dengan nama WiFi
String pass = "PASS WIFI";             // Ganti dengan password WiFi
String token = "TOKEN API";            // Ganti dengan token bot dari @BotFather

// UID kartu valid
String validUID = "a0a99c32";          // Ganti dengan UID kartu kamu

Dengan proyek ini, Anda telah membangun sistem kontrol akses RFID berbasis ESP32 yang terhubung ke internet dengan notifikasi Telegram. Solusi ini bisa digunakan untuk sistem parkir, pintu otomatis, ruang kantor, atau bahkan rumah pintar Anda.

Posting Komentar