
Интернет-магазин «Неглупый Дом»
Во всех остальных RFID-проектах на сайте линии SPI модуля RC522 подключаются напрямую к 5-вольтовым пинам Arduino UNO — на практике это часто работает благодаря запасу напряжения, но формально выходит за характеристики 3.3V-микросхемы модуля. Здесь между Arduino и RC522 стоит TXS0108E, который корректно и безопасно согласует уровни на каждой линии SPI.
RC522 считывает UID карт по шине SPI точно так же, как и в остальных RFID-проектах на сайте — четыре линии (SCK, MOSI, MISO, SS) плюс отдельная линия RST. Разница — именно в электрическом согласовании: вместо прямого провода от 5V-пина Arduino к 3.3V-входу RC522, каждая из этих линий проходит через свой отдельный канал TXS0108E, который преобразует 5-вольтовый сигнал Arduino в безопасный 3.3-вольтовый для RC522 и наоборот — для линии MISO, по которой данные идут в обратную сторону (от RC522 к Arduino).
Именно двунаправленность TXS0108E здесь принципиальна: SPI — это шина, где данные идут в обе стороны (MOSI от Arduino к RC522, MISO от RC522 к Arduino), и простой резистивный делитель напряжения (который работал бы для однонаправленного сигнала) не подошёл бы для линии MISO без искажения сигнала.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
#include <SPI.h>
#include <MFRC522.h>
const int SS_PIN = 10;
const int RST_PIN = 9;
MFRC522 rfid(SS_PIN, RST_PIN);
unsigned int scanCount = 0;
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
Serial.println("Готов к сканированию карт.");
}
void loop() {
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) {
return;
}
scanCount++;
Serial.print("Сканирование №");
Serial.print(scanCount);
Serial.print(", UID: ");
for (byte i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i], HEX);
Serial.print(" ");
}
Serial.println();
rfid.PICC_HaltA();
}
Библиотеки SPI и MFRC522 ставятся через Менеджер библиотек Arduino IDE — программная часть абсолютно идентична прямому подключению без преобразователя уровней, вся разница именно в физической электрической схеме, а не в коде.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 198 ₽ 178 ₽ (экономия 20 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.