아두이노 우노 Q RFID/NFC

RFID (Radio Frequency Identification)는 태그나 카드에서 고유 ID를 읽을 수 있게 해줍니다 — 접촉이 필요 없습니다. Arduino UNO Q에서 MFRC522 (RC522) 모듈은 SPI를 통해 MCU에 연결됩니다. Bridge와 Telegram을 사용하면 태그가 스캔될 때 휴대폰에서 즉시 알림을 받을 수 있습니다.

이 튜토리얼에서는 다음을 배웁니다:

Arduino UNO Q RFID rc522

필요한 하드웨어

1×Arduino UNO Q 아마존
1×USB Cable for Arduino Uno Q 아마존
1×RFID/NFC RC522 Kit (reader + tags) 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 아두이노 우노용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino Uno 쿠팡 | 아마존
1×(추천) 아두이노 우노용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

RFID-RC522 모듈 정보

핀 배열

RC522에는 8개의 핀이 있습니다. 이 튜토리얼에서는 SPI 통신을 사용합니다:

  • GND: GND에 연결
  • VCC: 3.3V에 연결 (⚠️ 5V가 아님 — 모듈이 손상될 수 있음)
  • RST: 리셋 핀 — MCU 디지털 핀에 연결
  • IRQ: 인터럽트 핀 — 이 튜토리얼에서는 연결되지 않음
  • MISO/SCL/TX: MISO 라인 (SPI)
  • MOSI: MOSI 라인 (SPI)
  • SCK: 클록 라인 (SPI)
  • SS/SDA/RX: Slave Select (SPI)
RFID-rc522 사용법 핀아웃

※ 주의:

  • 핀 배열은 제조업체에 따라 다를 수 있습니다 — 항상 모듈의 라벨을 따르세요.
  • VCC를 5V에 연결하지 마세요 — 이는 RC522 모듈을 영구적으로 손상시킬 수 있습니다.
  • MFRC522 라이브러리는 SPI 모드만 사용합니다.

RFID/NFC 작동 원리

RFID에는 두 부분이 있습니다: 리더태그:

  • 리더는 안테나를 통해 전자기장을 생성합니다
  • 태그는 수동적입니다 (배터리 없음) — 전자기장에서 전력을 끌어오고 저장된 UID를 리더로 다시 전송합니다
RFID reader and tag

MCU는 리더로부터 UID 바이트를 수신하고 이에 대해 조치를 취할 수 있습니다 — 예를 들어, UID가 승인된 목록과 일치하면 액세스를 허가합니다.

배선 다이어그램

Arduino UNO Q RFID rc522 연결 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

RC522 Pin Arduino UNO Q MCU
GND GND
VCC 3.3V
RST D5
IRQ (not connected)
MISO D12 (MISO)
MOSI D11 (MOSI)
SCK D13 (SCK)
SS D10 (SS)

RFID 프로그래밍 방법

  • SPI와 MFRC522 초기화:
SPI.begin(); rfid.PCD_Init();
  • loop()에서 태그 감지 및 읽기:
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) { // rfid.uid.uidByte[] contains the UID bytes // rfid.uid.size is the number of bytes rfid.PICC_HaltA(); rfid.PCD_StopCrypto1(); }

Arduino UNO Q 코드

Arduino UNO Q에는 함께 작동하는 두 개의 프로세서가 있습니다:

  • STM32 MCU는 SPI를 통해 RC522와 통신하고 loop()에서 태그 UID를 읽습니다
  • Qualcomm MPU는 Debian Linux를 실행하고 Wi-Fi, Python 및 클라우드 연결을 처리합니다
  • 이 섹션에서는 MCU만 프로그래밍됩니다 — Linux 측은 유휴 상태입니다. 나중 섹션에서는 두 프로세서가 Bridge를 통해 함께 작동하는 방법을 보여줍니다.
/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-rfid */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 // The Arduino UNO Q MCU pin connected to SS of RC522 #define RST_PIN 5 // The Arduino UNO Q MCU pin connected to RST of RC522 MFRC522 rfid(SS_PIN, RST_PIN); void setup() { Serial.begin(9600); SPI.begin(); rfid.PCD_Init(); Serial.println("Arduino UNO Q RFID ready"); Serial.println("Tap RFID/NFC tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { if (rfid.PICC_ReadCardSerial()) { Serial.print("UID:"); for (int i = 0; i < rfid.uid.size; i++) { Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(rfid.uid.uidByte[i], HEX); } Serial.println(); rfid.PICC_HaltA(); rfid.PCD_StopCrypto1(); } } }

빠른 단계

처음 Arduino UNO Q를 사용하십니까? 진행하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따르세요.

  • 연결: 배선 다이어그램에 표시된 대로 RC522를 Arduino UNO Q MCU에 배선합니다.
  • Arduino App Lab 열기: Arduino App Lab을 시작하고 보드를 감지할 때까지 기다립니다.
  • 새 앱 만들기: Create New App 버튼을 클릭합니다.
create new app in 아두이노 app lab on Arduino UNO Q
  • 앱에 이름을 지정합니다. 예: RC522RFID
  • Create를 클릭하여 확인합니다.
아두이노 app lab app folders and files on Arduino UNO Q
  • 스케치 붙여넣기: 위의 MCU 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다. 다른 파일은 기본값으로 유지합니다.
  • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
add sketch 라이브러리 in 아두이노 app lab on Arduino UNO Q
  • Search for MFRC522 created by GithubCommunity and click the Install button.
My Apps / DIYables Apps
Run
Bricks
No bricks added...
Sketch Libraries
No sketch libra...
Files
python
sketch
.gitignore
README.md
app.yaml
sketch.ino
Add sketch library
MFRC522 GithubCommunity

Read/Write a RFID Card or Tag using the ISO/IEC 14443A/MIFARE interface.

1.4.11
Install
More Info
  • 업로드: Arduino App Lab에서 Run 버튼을 클릭합니다.
click run 버튼 in 아두이노 app lab on Arduino UNO Q
  • RFID/NFC 태그를 리더에 올려놓고 Serial Monitor에서 UID가 인쇄되는 것을 관찰합니다.

App Lab 콘솔 출력

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
Message (Enter to send a message to "Newbiely" on usb(2820070321))
New Line
9600 baud
[2026-04-29 09:00:01] Arduino UNO Q RFID ready [2026-04-29 09:00:01] Tap RFID/NFC tag on reader [2026-04-29 09:00:05] UID: 3A C9 6A CB [2026-04-29 09:00:08] UID: 04 64 34 5A 1E 4E 80

Bridge: Linux + MCU

이 섹션에서는 Arduino UNO Q의 두 프로세서를 프로그래밍하여 Linux 측이 Bridge를 통해 태그 스캔 이벤트를 수신하고 UID를 읽는 방법을 보여줍니다:

  • RC522 RFID 리더는 SPI를 통해 MCU에 연결됩니다 — MCU는 loop()에서 태그를 스캔하고 태그가 감지되면 이벤트 플래그를 설정합니다
  • MPU는 RC522를 직접 읽을 수 없습니다 — Bridge 함수를 호출하여 태그 이벤트를 폴링하고 마지막 UID를 읽습니다
  • MPU에는 Wi-Fi가 있습니다 — 전체 Debian Linux를 실행하므로 태그가 스캔될 때 Telegram 알림을 보낼 수 있습니다
  • Arduino_RouterBridge는 두 프로세서 간의 RPC 통신을 활성화합니다
  • ⚠️ /dev/ttyHS1 (Linux)과 Serial1 (MCU)은 라우터에서 예약됨 — 사용자 코드에서 절대 열지 마세요

요약하면: MCU가 loop()에서 태그 감지 → 이벤트 플래그 설정 → MPU가 Bridge 폴링 → MPU가 Telegram 알림 전송.

MCU 코드 (Bridge)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-rfid */ #include "Arduino_RouterBridge.h" #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 // The Arduino UNO Q MCU pin connected to SS of RC522 #define RST_PIN 5 // The Arduino UNO Q MCU pin connected to RST of RC522 MFRC522 rfid(SS_PIN, RST_PIN); String last_uid = "none"; bool tag_event = false; String get_uid(String arg) { return last_uid; } String get_event(String arg) { if (tag_event) { tag_event = false; return last_uid; } return "none"; } void setup() { Bridge.begin(); Monitor.begin(); SPI.begin(); rfid.PCD_Init(); Bridge.provide("get_uid", get_uid); Bridge.provide("get_event", get_event); Monitor.println("Arduino UNO Q RFID Bridge ready"); Monitor.println("Tap RFID/NFC tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { if (rfid.PICC_ReadCardSerial()) { last_uid = ""; for (int i = 0; i < rfid.uid.size; i++) { if (i > 0) last_uid += ":"; if (rfid.uid.uidByte[i] < 0x10) last_uid += "0"; last_uid += String(rfid.uid.uidByte[i], HEX); } last_uid.toUpperCase(); tag_event = true; Monitor.print("Tag scanned: "); Monitor.println(last_uid); rfid.PICC_HaltA(); rfid.PCD_StopCrypto1(); } } }

Python 코드 (Bridge)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-rfid */ from arduino.app_utils import * import time def loop(): event = Bridge.call("get_event") if event != "none": print(f"Tag scanned: {event}") time.sleep(0.2) App.run(user_loop=loop)

빠른 단계

  • 연결: 배선 다이어그램에 표시된 대로 RC522를 Arduino UNO Q에 배선합니다.
  • Arduino App Lab 열기: Arduino App Lab을 시작하고 보드가 감지될 때까지 기다립니다.
  • 새 앱 만들기: Create New App을 클릭하고, RC522RFIDBridge라는 이름을 지정한 다음 Create을 클릭합니다.
  • MCU 스케치 붙여넣기: 위의 MCU Bridge 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
  • Python 코드 붙여넣기: 위의 Python Bridge 코드를 복사하여 앱의 Python 파일에 붙여넣습니다.
  • 업로드: Arduino App Lab에서 Run 버튼을 클릭합니다.
click run 버튼 in 아두이노 app lab on Arduino UNO Q
  • RFID/NFC 태그를 올려놓습니다 — MCU 콘솔과 Python 콘솔에서 UID를 관찰합니다.

App Lab 콘솔 출력

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
Message (Enter to send a message to "Newbiely" on usb(2820070321))
New Line
9600 baud
[2026-04-29 09:00:01] Arduino UNO Q RFID Bridge ready [2026-04-29 09:00:01] Tap RFID/NFC tag on reader [2026-04-29 09:00:05] Tag scanned: 3A:C9:6A:CB [2026-04-29 09:00:10] Tag scanned: 04:64:34:5A:1E:4E:80
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:05] Tag scanned: 3A:C9:6A:CB [2026-04-29 09:00:10] Tag scanned: 04:64:34:5A:1E:4E:80

Telegram

Arduino UNO Q에서 RFID/NFC 태그가 스캔될 때 즉시 Telegram 알림을 받습니다.

MCU 스케치: 이전 Bridge 섹션의 동일한 MCU 스케치를 유지합니다.

Python 코드 (Telegram)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-rfid */ from arduino.app_utils import * import requests import time TELEGRAM_BOT_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN" CHAT_ID = "YOUR_CHAT_ID" last_update_id = 0 def get_updates(): global last_update_id url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getUpdates" params = {"offset": last_update_id + 1, "timeout": 5} try: response = requests.get(url, params=params, timeout=10) data = response.json() if data["ok"]: return data["result"] except Exception as e: print(f"Error getting updates: {e}") return [] def send_message(chat_id, text): url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage" payload = {"chat_id": chat_id, "text": text} try: requests.post(url, data=payload, timeout=10) except Exception as e: print(f"Error sending message: {e}") def loop(): # Check for new RFID tag scan event event = Bridge.call("get_event") if event != "none": print(f"Tag scanned: {event}") send_message(CHAT_ID, f"🏷️ RFID tag scanned!\nUID: {event}") # Check for Telegram commands updates = get_updates() for update in updates: last_update_id = update["update_id"] if "message" not in update: continue message = update["message"] chat_id = message["chat"]["id"] text = message.get("text", "").strip() print(f"Received: {text}") if text == "/start": send_message(chat_id, "Arduino UNO Q RFID Bot\n" "/uid - Read the last scanned tag UID\n" "Tap a tag on the reader to receive an automatic notification") elif text == "/uid": result = Bridge.call("get_uid") send_message(chat_id, f"Last UID: {result}") else: send_message(chat_id, "Unknown command. Send /start for help.") time.sleep(0.2) App.run(user_loop=loop)

빠른 단계

  • YOUR_TELEGRAM_BOT_TOKEN을 BotFather의 실제 봇 토큰으로 바꿉니다.
  • YOUR_CHAT_ID를 Telegram 채팅 ID로 바꿉니다.
  • 이 Python 코드를 앱의 Python 파일에 붙여넣습니다 (동일한 MCU 스케치 유지).
  • Run 버튼을 클릭합니다. 태그를 올려놓으면 즉시 Telegram 알림을 받습니다.

App Lab 콘솔 출력

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:10:00] Waiting for Telegram messages... [2026-04-29 09:10:05] Tag scanned: 3A:C9:6A:CB [2026-04-29 09:10:12] Received: /uid
Telegram
Telegram 12:45
Welcome to Telegram!
ArduinoBot 10:19
Chatting with Arduino...
telegram-botfather
BotFather Yesterday
Your bot has been created.

ArduinoBot

bot
Today
/uid
10:15 AM ✓✓
Last UID: 3A:C9:6A:CB
10:16 AM
🏷️ RFID tag scanned!
10:17 AM
UID: 04:64:34:5A:1E:4E:80
10:18 AM

OpenClaw

You can adapt the OpenClaw to this tutorial by refering the instruction on 아두이노 우노 Q - OpenClaw Tutorial

프로젝트 아이디어

Arduino UNO Q와 RFID 리더로 많은 유용한 프로젝트를 만들 수 있습니다:

  • 액세스 제어 시스템: Linux 측에 승인된 UID 목록을 유지합니다 — 태그가 스캔되면 UID를 목록과 비교하고 Bridge를 사용하여 승인되면 전자기 잠금을 해제하거나 승인되지 않은 스캔에 대해 Telegram 알림을 보냅니다
  • 출석 추적: 학생 또는 직원이 RFID 카드를 스캔할 때마다 MPU는 UID와 타임스탬프를 Linux의 CSV 파일에 기록합니다 — 하루가 끝날 때 자동으로 일일 출석 보고서를 Telegram으로 보냅니다
  • Telegram 태그 등록: Telegram을 통해 /register를 사용하여 마지막으로 스캔한 UID를 승인된 목록에 추가합니다 — /list를 사용하여 Python JSON 파일에 저장된 모든 등록된 UID를 봅니다
  • 스마트 로커: RFID와 솔레노이드 잠금을 결합합니다 — 각 등록된 태그는 개인 로커를 10초 동안 해제하며, 모든 액세스가 기록되고 Telegram으로 전송됩니다
  • 도서관 책 추적: 책에 RFID 태그를 붙입니다 — 빌릴 때와 반납할 때 스캔하고, 각 이벤트의 타임스탬프와 UID를 Linux의 파일에 기록합니다. Telegram을 통해 쿼리하여 누가 어떤 책을 가지고 있는지 확인합니다

자신을 도전시키세요

Arduino UNO Q의 RFID를 더 진행할 준비가 되셨습니까? 이 도전을 시도해 보세요:

  • 쉬움: Python 코드를 수정하여 스캔된 UID가 Python의 하드코딩된 문자열과 일치하면 "Authorized"를 인쇄하거나 일치하지 않으면 "Unauthorized"를 인쇄합니다 — MCU 변경이 필요 없습니다.
  • 중간: Telegram을 통해 태그 레지스터를 구축합니다: /register를 보내 Bridge.call("get_uid")에서 마지막으로 스캔한 UID를 Python JSON 파일에 추가하고, /list를 사용하여 모든 등록된 UID를 봅니다 — Python에서 액세스 제어 결정을 내립니다.
  • 고급: 시간 제한 액세스 시스템을 구현합니다: 각 등록된 UID는 JSON 파일에 저장된 허용 시간 창 (예: 08:00–18:00)을 가집니다 — 허용 창 외의 스캔은 Telegram 알림을 보내고 문을 열지 않으며, 허용 창 내의 스캔은 10초 동안 문을 엽니다.

관련 튜토리얼