Подключение RFID RC522 к MySQL: система учёта доступа с веб-интерфейсом

Полный рабочий проект: RFID-считыватель RC522 на ESP8266 сохраняет UID карты в базу MySQL, веб-интерфейс позволяет добавлять, редактировать и удалять сотрудников, просматривать последнего прошедшего. Идеальная основа для СКУД, учёта рабочего времени, пропускной системы на дачу или в офис.

Подключение RFID к MySQL ESP8266 RC522 веб-интерфейс

Возможности системы

  • Автоматическая регистрация карты одним касанием
  • Добавление ФИО, email, телефона, пола
  • Редактирование и удаление сотрудников
  • Главная страница — последний зарегистрированный
  • Полный список сотрудников с поиском
  • Доступ из любой точки локальной сети

Схема подключения RC522 → ESP8266

  • 3.3 В → 3.3 В
  • GND → GND
  • RST → D3
  • SDA → D4
  • SCK → D5
  • MOSI → D7
  • MISO → D6

Установка (5 минут)

  1. Создаёте базу MySQL (имя любое)
  2. Импортируете таблицу из архива (ссылка в описании)
  3. Копируете все файлы проекта в корень веб-сервера (OpenServer, XAMPP и т.д.)
  4. В database.php прописываете свои данные MySQL
  5. Заливаете скетч на ESP8266

Скетч для ESP8266 (автозапись UID в базу)

#include <SPI.h>
#include <MFRC522.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

#define SS_PIN D4
#define RST_PIN D3
MFRC522 rfid(SS_PIN, RST_PIN);

const char* ssid = "ВАША_СЕТЬ";
const char* password = "ВАШ_ПАРОЛЬ";
const char* host = "192.168.1.100";  // IP вашего сервера

void setup() {
  Serial.begin(115200);
  SPI.begin();
  rfid.PCD_Init();
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);
}

void loop() {
  if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
    String uid = "";
    for (byte i = 0; i < rfid.uid.size; i++) {
      uid += String(rfid.uid.uidByte[i] < 0x10 ? "0" : "");
      uid += String(rfid.uid.uidByte[i], HEX);
    }
    uid.toUpperCase();
    Serial.println("Карта: " + uid);

    WiFiClient client;
    HTTPClient http;
    String url = "http://" + String(host) + "/rfid/add.php?uid=" + uid;
    http.begin(client, url);
    http.GET();
    http.end();

    rfid.PICC_HaltA();
    delay(2000);
  }
}
Подключается к Wi-Fi и инициализирует RFID-считыватель MFRC522.
Ожидает поднесения RFID-карты и считывает её UID.
Формирует UID в шестнадцатеричном виде и выводит его в Serial.
Отправляет UID на сервер по HTTP GET запросу.
После считывания останавливает карту и делает паузу 2 секунды.

Что будет в следующих версиях

  • Загрузка фото сотрудника (имя = UID)
  • Журнал прихода/ухода с датой и временем
  • Разные уровни доступа
  • Telegram-уведомления

Итог

За 15 минут у вас готова полноценная RFID-система учёта с MySQL и веб-интерфейсом: регистрация карт касанием, редактирование сотрудников, удаление — всё работает сразу. Проект живой и будет развиваться — пишите в комментариях, что добавить в следующей версии!

Ставьте лайк, если запустили свою систему доступа, и пишите в комментариях — сколько карт уже зарегистрировано и где используете (офис, склад, дача)?

FAQ — RFID RC522 + ESP8266 + MySQL

Можно ли подключить RC522 напрямую к 5 В?

Нет, модуль RC522 работает только от 3.3 В. Подача 5 В может вывести его из строя. На ESP8266 уровни логики 3.3 В, поэтому RC522 подключается напрямую без преобразователя уровней.

Почему UID иногда записывается в базу с задержкой?

Обычно задержка возникает из-за нестабильного Wi-Fi или долгого ответа сервера MySQL. ESP8266 ждёт завершения HTTP-запроса, поэтому слабый сигнал или медленный хостинг увеличивают время записи. Рекомендуется усилить Wi-Fi или перенести базу на локальный сервер.

Можно ли сделать запись времени входа и выхода?

Да. Нужно добавить отдельную таблицу `log` с полями UID, дата и время. Затем доработать `add.php`, чтобы UID не только добавлялся в сотрудников, но и записывался в журнал при каждом прикладывании карты.

Можно ли добавить фотографию сотрудника?

Да. Проще всего сохранять фото под именем файла, равным UID карты, например: uploads/04AABB2291.jpg. Затем в веб-интерфейсе отображать фото через <img src="uploads/<UID>.jpg">.

Будет ли работать система без интернета?

Да. Вся логика работает внутри локальной сети: ESP8266 → ваш локальный сервер MySQL. Интернет не требуется, если вы не используете Telegram-уведомления или удалённый доступ.

📁 Скачать примеры