Подключение двух RFID RC522 к Arduino: MultiReader MFRC522

Подключение двух RFID RC522 к одной Arduino — простой способ расширить систему контроля доступа. Используем SPI-шину общую, SDA (SS) на разных пинах. Один считыватель на вход, второй на выход — фиксируем приход/уход сотрудников. Данные UID карты, фамилия, время выводятся в Serial или Excel. Проект для СКУД, турникетов, учёта посещаемости. MFRC522 поддерживает до 4–5 модулей на одной шине. Библиотека MultiReader упрощает работу.

Два RFID RC522 на Arduino MultiReader MFRC522 вход выход

Возможности MultiReader

Два (или больше) RC522 на одной Arduino. Отдельный считыватель вход/выход. Фиксация времени прихода/ухода. Вывод UID, имени в Serial/Excel. Интеграция с реле, турникетом, звонком. Легко добавить третий модуль. Низкая стоимость, стабильная работа.

Компоненты

  • Arduino Uno/Nano
  • 2 модуля MFRC522 RC522
  • Карты/брелоки MIFARE 13.56 МГц

Подключение двух RC522

SPI общая:

  • 3.3V → 3.3V (оба)
  • GND → GND
  • MISO → D12
  • MOSI → D11
  • SCK → D13
  • SDA/SS1 → D10
  • SDA/SS2 → D8
  • RST → D9 (общий или отдельный)

Библиотека

MFRC522 (Adafruit или стандартная). Для MultiReader — модифицированный скетч с массивом объектов.

Скетч MultiReader

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

#define RST_PIN 9
#define SS1_PIN 10
#define SS2_PIN 8

MFRC522 mfrc522[2] = {MFRC522(SS1_PIN, RST_PIN), MFRC522(SS2_PIN, RST_PIN)};

void setup() {
  Serial.begin(9600);
  SPI.begin();
  for (uint8_t reader = 0; reader < 2; reader++) {
    mfrc522[reader].PCD_Init();
  }
  Serial.println("ВХОД\tВЫХОД");
}

void loop() {
  for (uint8_t reader = 0; reader < 2; reader++) {
    if (mfrc522[reader].PICC_IsNewCardPresent() && mfrc522[reader].PICC_ReadCardSerial()) {
      String uid = "";
      for (byte i = 0; i < mfrc522[reader].uid.size; i++) uid += String(mfrc522[reader].uid.uidByte[i], HEX);
      uid.toUpperCase();
      if (reader == 0) Serial.print(uid + "\t");
      else Serial.println("\t" + uid);
      mfrc522[reader].PICC_HaltA();
    }
  }
}
Подключает два считывателя RFID RC522 к SPI (SS пины 10 и 8, общий RST 9).
Инициализирует оба считывателя в setup().
В loop() проверяет, есть ли новая метка на каждом считывателе.
Если метка обнаружена, выводит её UID в HEX в Serial: первая колонка — первый считыватель (вход), вторая — второй (выход).
После чтения метки выполняется PICC_HaltA() для подготовки к следующему считыванию.

Как работает

Цикл проверяет оба модуля. При карте выводит UID в столбец ВХОД или ВЫХОД. Добавьте массив имён по UID для фамилий.

Расширение

Третий модуль — добавьте SS-пин и объект. Интеграция с Excel, MySQL, реле турникета.

Заключение

Два RC522 на Arduino — полноценная СКУД вход/выход. Минимум пинов, стабильная работа. Готово к учёту посещаемости или доступу.

FAQ — Два RC522 на Arduino

Сколько RC522 можно подключить?

До 4–5 практически. Каждый на отдельном SS-пине, общая SPI и RST. Больше — конфликты или задержки.

Почему карты не читаются одновременно?

MFRC522 не поддерживает одновременное чтение. Цикл опрашивает поочерёдно — задержка минимальна.

RST общий или отдельный?

Можно общий, но отдельные пины лучше для независимого reset при ошибках.

Добавление имён по UID?

Создайте массив struct с UID и именем, сравнивайте в loop.

Работает ли с ESP8266?

Да, те же пины SPI, но 3.3V логика. Используйте уровень-преобразователь если нужно.

Конфликты при близком расположении?

Да, антенны мешают. Разнесите модули на 20–30 см или экранируйте.

Интеграция с реле?

Подключите реле к пинам Arduino, включайте по UID с одного модуля.

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