목표
RFID 리더기에 카드가 태그되면 카드의 타입과 ID를 대시보드 위젯에 표시합니다.
하드웨어
부품
부품 | 개수 |
---|---|
MFRC522 RFID 리더 | 1 |
RFID 태그 또는 카드 | 1개 이상 |
연결
아래의 핀을 가로 방향으로 서로 연결합니다.
MFRC522 | GPIO |
---|---|
VCC | 3.3V |
GND | GND |
SCK ¹ | 11 (SPI0 SCLK) |
MISO ¹ | 9 (SPI0 MISO) |
MOSI ¹ | 10 (SPI0 MOSI) |
SDA ¹ | 8 (SPI0 CE0) |
RST | 3.3V |
¹ 하드웨어 SPI 핀 (GPIO 8, 9, 10, 11)에 연결합니다. 소프트웨어 (bit-bang) 인터페이스 사용시 임의의 핀을 사용할 수도 있습니다.
I/O장치
RFID 리더를 I/O장치에 추가합니다.
변수
카드가 태그되었는지 여부 및 카드의 정보를 저장할 변수를 추가합니다.
- “카드 태그됨” (디지털)
- “카드 타입” (텍스트)
- “카드 ID” (바이트 배열)
로직
컨트롤러는 사용자가 언제 RFID 카드를 태그할 지 알수 없으므로 항상 카드의 태그 여부를 체크해야 합니다.
사용자가 카드를 태그하면 카드의 타입과 UID를 읽어서 표시합니다.
카드가 태그된 후 일련의 동작을 수행하고 나면 반드시 STOP 명령으로 해당 카드에 관련된 작업을 종료해야 하며 그렇지 않으면 다음 카드를 인식할 수 없습니다.
즉, 카드 태그 -> 동작 수행 -> 카드 종료 의 순서로 진행되어야 합니다.
즉, 카드 태그 -> 동작 수행 -> 카드 종료 의 순서로 진행되어야 합니다.
이를 알고리즘 블록으로 나타내면 아래와 같습니다.
[로직]
로직을 추가합니다. 실행주기는 기본값을 사용합니다.
[제어] 항상 카드가 태그되었는지 체크한다
제어를 추가합니다. 모든 설정은 기본값을 사용합니다.
[조건] 항상
항상 만족하는 조건을 추가합니다.
- 타입: 항상유효
[동작] 카드가 태그되었는지 검사한다
카드가 태그되었는지 여부를 “카드 태그됨” 변수에 저장하는 동작을 추가합니다.
- 타입: I/O장치
- 장치: RFID 리더
- 명령: IS_NEW_CARD
- 값 : “카드 태그됨” 변수 선택
[제어] 카드가 태그되었다면 카드의 타입과 ID를 읽고 태그된 카드를 종료한다
제어를 추가합니다. 모든 설정은 기본값을 사용합니다.
[조건] 카드가 태그되었다면
앞에서 카드의 태그여부를 “카드 태그됨” 이라는 변수에 저장해 두었습니다. 그러므로 이 변수의 값이 true가 되면 카드가 태그된 것이며 이를 검사하는 조건을 추가합니다.
- 타입: 비교
- 변수선택: “카드 태그됨”
- 연산자: = (같다)
- 값: “true”
[동작] 카드의 타입과 ID를 읽는다
카드가 태그되면 카드의 타입과 ID를 읽어서 각각의 변수에 저장하는 동작을 추가합니다.
- 타입: I/O장치
- 장치: RFID 리더
- 명령: READ_UID
- 값
- 타입: “카드 타입” 변수 선택
- UID: “카드 ID” 변수 선택
[동작] 태그된 카드를 종료한다
현재 태그된 카드의 작업을 종료하는 동작을 추가합니다. 다음 카드를 인식하기 위해서는 반드시 현재 인식된 카드의 작업을 종료해야 합니다.
- 타입: I/O장치
- 장치: RFID 리더
- 명령: STOP
대시보드
대시보드를 추가합니다.
읽기 위젯을 추가합니다.
- 변수: “카드 타입”
읽기 위젯을 하나 더 추가합니다.
- 변수: “카드 ID”