Tech Gyan Set
Published © MIT

Smart RFID Attendance System using ESP32 & 4G LTE

An ESP32-based RFID attendance system that uses 4G LTE to send real-time data to a cloud dashboard via HTTP POST—no Wi-Fi required.

BeginnerShowcase (no instructions)8 hours22
Smart RFID Attendance System using ESP32 & 4G LTE

Things used in this project

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Code

🔥 1️⃣ ESP32 + RFID + 4G LTE (Arduino Code)

C/C++
📌 Assumption

RFID: MFRC522

4G Module: SIM7600 / SIM7000 / A7670C (AT command based)

ESP32 UART2 used
#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 5
#define RST_PIN 22

MFRC522 mfrc522(SS_PIN, RST_PIN);

HardwareSerial sim7600(2); // UART2

String serverURL = "http://YOUR_SERVER_IP/attendance.php";

void sendAT(String cmd, int delayTime = 2000) {
  sim7600.println(cmd);
  delay(delayTime);
  while (sim7600.available()) {
    Serial.write(sim7600.read());
  }
}

void setup() {
  Serial.begin(115200);
  sim7600.begin(115200, SERIAL_8N1, 16, 17);

  SPI.begin();
  mfrc522.PCD_Init();

  Serial.println("System Ready");

  sendAT("AT");
  sendAT("AT+CGATT=1");       // Attach GPRS
  sendAT("AT+CGDCONT=1,\"IP\",\"internet\"");
}

void loop() {
  if (!mfrc522.PICC_IsNewCardPresent()) return;
  if (!mfrc522.PICC_ReadCardSerial()) return;

  String cardUID = "";
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    cardUID += String(mfrc522.uid.uidByte[i], HEX);
  }
  cardUID.toUpperCase();

  Serial.println("Card UID: " + cardUID);

  sendAttendance(cardUID);
  delay(3000);
}

void sendAttendance(String uid) {
  String postData = "card_id=" + uid + "&device_id=ESP32_01";

  sendAT("AT+HTTPINIT");
  sendAT("AT+HTTPPARA=\"CID\",1");
  sendAT("AT+HTTPPARA=\"URL\",\"" + serverURL + "\"");
  sendAT("AT+HTTPPARA=\"CONTENT\",\"application/x-www-form-urlencoded\"");
  sendAT("AT+HTTPDATA=" + String(postData.length()) + ",10000");
  sim7600.print(postData);
  delay(3000);
  sendAT("AT+HTTPACTION=1"); // POST
  sendAT("AT+HTTPTERM");
}

🌐 2️⃣ Server Code (PHP API – HTTP POST)

C/C++
📁 attendance.php
<?php
$conn = new mysqli("localhost", "DB_USER", "DB_PASS", "attendance_db");

if ($conn->connect_error) {
  die("DB Error");
}

$card_id = $_POST['card_id'];
$device_id = $_POST['device_id'];

$sql = "INSERT INTO attendance (card_id, device_id) 
        VALUES ('$card_id', '$device_id')";

$conn->query($sql);
echo "Success";
?>

🗄️ 3️⃣ Database (MySQL)

C/C++
CREATE DATABASE attendance_db;

USE attendance_db;

CREATE TABLE attendance (
  id INT AUTO_INCREMENT PRIMARY KEY,
  card_id VARCHAR(50),
  device_id VARCHAR(50),
  timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

📊 4️⃣ Simple Web Dashboard (HTML) 📁 index.html

HTML
📁 index.html
<!DOCTYPE html>
<html>
<head>
  <title>RFID Attendance Dashboard</title>
  <style>
    body { font-family: Arial; background: #f4f4f4; }
    table { width: 80%; margin: auto; border-collapse: collapse; }
    th, td { padding: 10px; border: 1px solid #ccc; }
    th { background: #333; color: #fff; }
  </style>
</head>
<body>

<h2 align="center">Smart RFID Attendance Dashboard</h2>

<table>
<tr>
  <th>ID</th>
  <th>Card UID</th>
  <th>Device</th>
  <th>Time</th>
</tr>

<?php
$conn = new mysqli("localhost","DB_USER","DB_PASS","attendance_db");
$result = $conn->query("SELECT * FROM attendance ORDER BY id DESC");

while($row = $result->fetch_assoc()) {
  echo "<tr>
    <td>{$row['id']}</td>
    <td>{$row['card_id']}</td>
    <td>{$row['device_id']}</td>
    <td>{$row['timestamp']}</td>
  </tr>";
}
?>
</table>

</body>
</html>

Credits

Tech Gyan Set
6 projects • 0 followers
Thanks to Tech Gyan Set .

Comments