Подключение RFID RC522 к MySQL: система учёта доступа с веб-интерфейсом
Полный рабочий проект: RFID-считыватель RC522 на ESP8266 сохраняет UID карты в базу MySQL, веб-интерфейс позволяет добавлять, редактировать и удалять сотрудников, просматривать последнего прошедшего. Идеальная основа для СКУД, учёта рабочего времени, пропускной системы на дачу или в офис.
Возможности системы
- Автоматическая регистрация карты одним касанием
- Добавление ФИО, email, телефона, пола
- Редактирование и удаление сотрудников
- Главная страница — последний зарегистрированный
- Полный список сотрудников с поиском
- Доступ из любой точки локальной сети
Схема подключения RC522 → ESP8266
- 3.3 В → 3.3 В
- GND → GND
- RST → D3
- SDA → D4
- SCK → D5
- MOSI → D7
- MISO → D6
Установка (5 минут)
- Создаёте базу MySQL (имя любое)
- Импортируете таблицу из архива (ссылка в описании)
- Копируете все файлы проекта в корень веб-сервера (OpenServer, XAMPP и т.д.)
- В
database.phpпрописываете свои данные MySQL - Заливаете скетч на 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);
}
}
Ожидает поднесения 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-уведомления или удалённый доступ.