본문 바로가기
모두의 라즈베리파이

[라즈베리파이][센서][#13] 초보자를 위한 파이썬 [ RFID 리더(MFRC-522)] 활용법 완전 정복

by 로니킴 2024. 6. 3.


라즈베리 파이와 파이썬을 사용해 RFID(RFID-RC522)를 쉽게 제어하는 방법을 초보자도 이해할 수 있도록 설명합니다. 시작부터 동작까지, 모든 과정을 설명하여 누구나 라즈베리파이를 이용한 RFID(RFID-RC522) 제어를 마스터할 수 있습니다. 

 

목차

     

     

     


    초보자를 위한 파이썬 RFID(RFID-RC522) 활용법 완전 정복

    RFID 센서 (MFRC-522)는 13.56 MHz 주파수를 사용하여 데이터를 무선으로 전송하는 RFID 리더기로, 출입 통제, 물품 추적 등에 사용됩니다. RFID 시스템의 동작 원리는 RFID 태그가 리더기의 범위에 들어오면 태그의 데이터를 리더기로 전송하는 것입니다. MFRC-522는 SPI 통신 방식을 사용하여 데이터를 전송합니다. MFRC-522 모듈은 아마존, 이베이 등에서 저렴하게 구매할 수 있으며, 사양과 호환성을 확인해야 합니다.

     

     

     

    하드웨어 연결은 MFRC-522 모듈을 라즈베리파이 4와 연결하여 전원, 지상, SPI 통신 핀을 적절히 연결합니다. 라즈베리파이에서 Python을 사용하여 MFRC-522 모듈을 제어하는 코드를 작성하고 실행하여 RFID 태그의 ID와 텍스트를 읽습니다. 코드를 실행하여 RFID 태그의 ID와 텍스트가 정상적으로 출력되는지 확인합니다.

     

    RFID 센서 (MFRC-522) 모듈을 사용하면 다양한 RFID 기반 프로젝트를 구현할 수 있으며, 추가 학습과 커뮤니티 지원을 통해 문제를 해결할 수 있습니다.

     


    (1) RFID(RFID-RC522) 란?

    RFID (Radio-Frequency Identification) 센서는 무선 주파수를 이용해 데이터를 전송하는 장치입니다. 이 중 MFRC-522는 NXP 반도체에서 개발한 고성능 RFID 리더기로, 주로 근거리 통신 (NFC) 기능을 갖추고 있습니다. 이 모듈은 13.56 MHz 주파수를 사용하며, ISO/IEC 14443A/MIFARE 모드와 호환됩니다. MFRC-522는 소형이면서도 강력한 성능을 자랑하며, 저전력 소비와 저렴한 가격 덕분에 다양한 프로젝트에 활용될 수 있습니다.

     

     

    RFID 시스템은 주로 태그와 리더기로 구성되는데, 태그는 대상 물체에 부착되어 있는 작은 칩과 안테나로 이루어져 있습니다. 리더기는 이러한 태그에서 정보를 읽어들여 처리합니다. MFRC-522 모듈은 아두이노 등 마이크로컨트롤러와 쉽게 연결할 수 있어, 출입 통제 시스템, 물품 추적, 자동 결제 시스템 등 다양한 응용 분야에 사용될 수 있습니다.

     


    (2) RFID(RFID-RC522) 동작 원리

    RFID 시스템의 동작 원리는 비교적 간단합니다. RFID 태그가 리더기의 주파수 범위 내에 들어오면, 태그의 안테나는 리더기에서 송신된 전자기 신호를 수신합니다. 태그는 이 신호를 통해 활성화되며, 자체 내장된 칩에 저장된 데이터를 리더기로 전송합니다. MFRC-522 리더기는 이러한 데이터를 수신하여 처리할 수 있습니다.

     

     

    MFRC-522 모듈은 SPI (Serial Peripheral Interface) 통신 방식을 사용하여 마이크로컨트롤러와 데이터를 주고받습니다. 이 모듈은 3.3V 전원을 사용하며, 최대 424 kbit/s의 데이터 전송 속도를 지원합니다. 또한, 높은 수준의 보안 기능을 갖추고 있어, 데이터 암호화 및 인증 기능을 통해 안전한 통신을 보장합니다.


    (3) RFID(RFID-RC522) 구입하기

    RFID 센서 (MFRC-522) 모듈은 다양한 전자 부품 판매점에서 쉽게 구입할 수 있습니다. 인터넷을 통해 구매할 수 있는 주요 사이트로는 아마존, 이베이, 알리익스프레스 등이 있습니다. 가격은 보통 5달러에서 10달러 사이로, 상대적으로 저렴하게 구매할 수 있습니다. 구매 시, 모듈 외에도 RFID 태그가 포함된 세트를 선택하면 보다 편리합니다.

     

     

     

    구입 시 유의할 점은, 모듈의 사양과 호환성을 반드시 확인해야 한다는 것입니다. 특히 사용하려는 마이크로컨트롤러와의 전압 호환성을 확인하고, 필요한 연결 케이블 및 부품이 모두 포함되어 있는지 확인하는 것이 중요합니다.


     

    (4) RFID(RFID-RC522) 하드웨어 연결

    RFID Sensor (MFRC-522) 모듈을 라즈베리파이 4와 연결하는 방법은 다음과 같습니다. 필요한 부품으로는 MFRC-522 모듈, 라즈베리파이, 연결용 점퍼 케이블이 있습니다.

    RFID(RFID-RC522) 하드웨어 연결

    1. 전원 연결: MFRC-522 모듈의 VCC 핀을 라즈베리파이의 3.3V 핀에 연결합니다.
    2. 지상 연결: 모듈의 GND 핀을 라즈베리파이의 GND 핀에 연결합니다.
    3. SPI 통신 연결: 모듈의 SCK 핀을 라즈베리파이의 GPIO 11 (SCLK) 핀에 연결합니다.
    • 모듈의 MOSI 핀을 라즈베리파이의 GPIO 10 (MOSI) 핀에 연결합니다.
    • 모듈의 MISO 핀을 라즈베리파이의 GPIO 9 (MISO) 핀에 연결합니다.
    • 모듈의 SDA (SS) 핀을 라즈베리파이의 GPIO 8 (CE0) 핀에 연결합니다.
    • 모듈의 RST 핀을 라즈베리파이의 GPIO 25 핀에 연결합니다.

     

    다음은 연결에 필요한 핀맵을 정리한 표입니다.

     

    MFRC-522 핀 라즈베리파이 4 핀
    VCC 3.3V
    GND GND
    SCK GPIO 11 (SCLK)
    MOSI GPIO 10 (MOSI)
    MISO GPIO 9 (MISO)
    SDA GPIO 8 (CE0)
    RST GPIO 25

     

     

    이와 같이 연결하면 하드웨어 설정이 완료됩니다. 각 핀의 기능과 역할을 이해하고 정확하게 연결하는 것이 중요합니다.

     


     

    (5) RFID(RFID-RC522) SW 파이썬  코딩

     

    라즈베리파이에서 RFID(RFID-RC522)를 제어하기 위한 소프트웨어 준비 과정은 다음과 같은 단계로 이루어집니다:

    [SPI 활성화 및 연결 확인]

     Interface Options 에서 SPI를 활성합니다.

    sudo raspi-config

     

    정상적으로 연결 및 활성화가 되었는지 확인하기 위해 lsmod를 입력하고, 정상 적이라면 spi_bcm2835를 확인할 수 있습니다.

    lsmod | grep spi

     

     

     

    RFID(RFID-RC522) SW 파이썬 코딩

     

    [가상 환경 설정]

     

    먼저, 파이썬의 가상 환경을 설정하여 다른 프로젝트와의 종속성 충돌을 방지합니다. 가상 환경은 특정 프로젝트에 필요한 패키지를 격리하여 관리할 수 있게 해 줍니다.

    • python3 -m venv myenv: 파이썬 3을 사용해 'myenv'라는 이름의 가상 환경을 생성합니다.
    • source myenv/bin/activate: 생성한 가상 환경을 활성화합니다. 이렇게 하면 이후의 모든 파이썬 및 pip 명령은 이 가상 환경 내에서 실행됩니다.

     

    [ 필요한 라이브러리 및 도구 설치]

    하드웨어 연결이 완료되었다면, 이제 소프트웨어를 통해 MFRC-522 모듈을 제어할 차례입니다. 라즈베리파이 4에서는 Python을 사용하여 코드를 작성할 수 있습니다. 먼저, MFRC-522 모듈을 제어하기 위한 라이브러리를 설치해야 합니다. 터미널을 열어 다음 명령어를 입력하여 필요한 라이브러리를 설치합니다:

     

    센서를 제어하기 위한 라이브러리와 필수 도구를 설치합니다. 

    sudo apt-get update
    sudo apt-get install python3-pip
    pip3 install spidev
    pip3 install mfrc522

     

     

    [코드 작성 및 실행]

    센서 데이터를 읽기 위한 파이썬 스크립트를 작성하고 실행합니다.

    • rfid.py 파일 생성: 센서 데이터를 읽고 처리하는 파이썬 스크립트 파일을 생성합니다.
    • 코드 복사: 미리 준비한 코드 또는 예제 코드를 rfid .py 파일에 복사합니다. 이 코드는 rfid 센서로부터 온도와 습도 데이터를 읽어 출력하도록 구성됩니다.
    • 실행: 스크립트를 실행하여 센서로부터 데이터를 읽고 결과를 확인합니다. 실행 명령은 python3 rfid .py가 됩니다.

     

    [코딩하기]

    파이썬 코드는 다음과 같습니다.

    import RPi.GPIO as GPIO  # 라즈베리파이의 GPIO 핀을 제어하기 위한 라이브러리 임포트
    from mfrc522 import SimpleMFRC522  # MFRC-522 모듈을 간편하게 사용하기 위한 라이브러리 임포트
    
    reader = SimpleMFRC522()  # SimpleMFRC522 객체 생성
    
    def main():
        try:
            print("Place your RFID tag near the reader")  # RFID 태그를 리더기 근처에 대라는 메시지 출력
            id, text = reader.read()  # RFID 태그의 ID와 텍스트를 읽음
            print("ID: %s\nText: %s" % (id, text))  # 읽은 ID와 텍스트를 출력
        finally:
            GPIO.cleanup()  # GPIO 핀 설정을 초기화
    
    if __name__ == "__main__":
        main()  # main 함수 실행

     

    [코드설명]

    코드 부분 설명
    import RPi.GPIO as GPIO 라즈베리파이의 GPIO 핀을 제어하기 위한 라이브러리 임포트
    from mfrc522 import SimpleMFRC522 MFRC-522 모듈을 간편하게 사용하기 위한 라이브러리 임포트
    reader = SimpleMFRC522() SimpleMFRC522 객체를 생성하여 리더기를 초기화
    def main(): RFID 태그를 읽고 결과를 출력하는 주요 기능을 포함하는 main 함수를 정의
    try: 예외 처리 블록 시작
    print("Place your RFID tag near the reader") RFID 태그를 리더기 근처에 대라는 메시지 출력
    id, text = reader.read() RFID 태그의 ID와 텍스트를 읽음
    print("ID: %s\nText: %s" % (id, text)) 읽은 ID와 텍스트를 출력
    finally: 예외 처리 블록 끝, 오류 발생 여부와 관계없이 실행됨
    GPIO.cleanup() GPIO 핀 설정을 초기화
    if __name__ == "__main__": 스크립트가 직접 실행될 때 main 함수를 호출하여 실행
    main() main 함수 실행

     

      

    코드를 작성한 후, 이를 실행하기 위해 다음 명령어를 사용합니다. 

     

    sudo python3 rfid.py

     

     

     

     


     

    (5-2) RFID(RFID-RC522) SW 파이썬  코딩

    이 코드는 라즈베리파이에서 RFID 태그를 읽고 쓰는 기능을 제공합니다. 

    RFID(RFID-RC522) SW 파이썬 코딩

    import RPi.GPIO as GPIO  # 라즈베리파이의 GPIO 핀을 제어하기 위한 라이브러리 임포트
    from mfrc522 import SimpleMFRC522  # MFRC-522 모듈을 간편하게 사용하기 위한 라이브러리 임포트
    
    reader = SimpleMFRC522()  # SimpleMFRC522 객체 생성
    
    def write_tag():
        # 사용자로부터 RFID 태그에 기록할 텍스트를 입력받음
        text = input("Enter text to write to RFID tag: ")
        print("Now place your tag to write")
        # RFID 태그에 입력받은 텍스트를 기록
        reader.write(text)
        print("Written")  # 기록 완료 메시지 출력
    
    def read_tag():
        # 사용자에게 RFID 태그를 리더기 근처에 대라는 메시지 출력
        print("Place your RFID tag near the reader")
        # RFID 태그의 ID와 텍스트를 읽음
        id, text = reader.read()
        # 읽은 ID와 텍스트를 출력
        print("**ID: %s\n**Text: %s" % (id, text))
    
    def main():
        try:
            while True:
                # 사용자에게 선택할 옵션을 출력
                print("\nSelect an option:")
                print("1. read")
                print("2. write")
                print("0. exit")
                # 사용자의 선택을 입력받음
                action = input("Enter the number of your choice: ").strip()
                
                if action == '1':
                    read_tag()  # '1'을 입력받으면 read_tag 함수 실행
                elif action == '2':
                    write_tag()  # '2'를 입력받으면 write_tag 함수 실행
                elif action == '0':
                    break  # '0'을 입력받으면 while 루프를 탈출하여 프로그램 종료
                else:
                    # 잘못된 입력에 대한 경고 메시지 출력
                    print("Invalid choice. Please enter '1', '2', or '0'.")
        except KeyboardInterrupt:
            # 사용자가 Ctrl+C를 눌러 프로그램을 종료할 때 발생하는 예외 처리
            print("\nProgram interrupted. Cleaning up...")
        finally:
            # 프로그램 종료 시 GPIO 핀 설정을 초기화
            GPIO.cleanup()
    
    if __name__ == "__main__":
        main()  # main 함수 실행

     

    사용자는 숫자를 입력하여 태그를 읽거나 쓰는 작업을 수행할 수 있으며, 프로그램 종료 시 GPIO 설정이 초기화됩니다. 각 함수는 특정 작업을 수행하며, main 함수에서 사용자의 입력에 따라 적절한 함수가 호출됩니다. KeyboardInterrupt 예외 처리를 통해 프로그램이 예기치 않게 중단되더라도 안전하게 종료되도록 합니다.

     

     

    1 라이브러리 임포트 - RPi.GPIO: 라즈베리파이의 GPIO 핀을 제어하는 라이브러리<br>- SimpleMFRC522: MFRC-522 RFID 리더기를 간편하게 사용할 수 있게 해주는 라이브러리
    2 SimpleMFRC522 객체 생성 - SimpleMFRC522 객체를 생성하여 RFID 리더기 모듈을 초기화하고, 태그를 읽거나 쓸 수 있는 다양한 메서드를 사용함
    3 write_tag 함수 - 사용자가 입력한 텍스트를 RFID 태그에 기록<br>- 기록 완료 후 "Written" 메시지를 출력
    4 read_tag 함수 - RFID 태그의 ID와 텍스트를 읽어옴<br>- 읽은 ID와 텍스트를 출력
    5 main 함수 - 주요 기능을 수행하는 함수
    - 무한 루프를 통해 사용자에게 반복적으로 옵션 제시
    - 옵션: 1. read, 2. write, 0. exit
    - KeyboardInterrupt 예외 처리 및 GPIO.cleanup() 호출
    6 스크립트 실행 - 스크립트가 직접 실행될 때 main 함수 호출<br>- 모듈로 임포트될 때 main 함수 실행되지 않도록 함

     

    코드를 작성한 후, 이를 실행하기 위해 다음 명령어를 사용합니다. 

    python3 rfidrw.py

     

    (6) RFID(RFID-RC522) 동작확인

     

    소프트웨어 코딩이 완료되었으면, 라즈베리파이에 코드를 실행하여 RFID 모듈이 정상적으로 동작하는지 확인해야 합니다. 터미널에서 코드를 실행하고 RFID 태그를 모듈에 가까이 대면 태그의 ID와 텍스트가 출력되는지 확인합니다. 만약 출력되지 않는다면, 하드웨어 연결 및 소프트웨어 설정을 다시 한번 확인하고 오류를 수정해야 합니다.

     

    RFID(RFID-RC522) 동작확인

     

    동작 확인 과정에서 흔히 발생하는 문제로는 전원 공급 불량, 잘못된 핀 연결, 라이브러리 설치 문제 등이 있습니다. 이러한 문제를 해결하려면 단계별로 점검하고, 필요한 경우 관련 문서나 온라인 커뮤니티를 참고하여 문제를 해결할 수 있습니다.

     

     


     

    (7) 마무리

    RFID Sensor (MFRC-522) 모듈을 사용하면 손쉽게 RFID 기반의 다양한 프로젝트를 구현할 수 있습니다. 본 글에서는 MFRC-522 모듈의 기본적인 동작 원리와 하드웨어 연결, 소프트웨어 코딩 방법을 다루었습니다. 이를 바탕으로 자신만의 창의적인 프로젝트를 개발해 보세요. RFID 기술은 출입 통제, 자산 관리, 스마트 결제 등 다양한 분야에서 활용될 수 있으며, 이를 통해 더 스마트하고 편리한 시스템을 구축할 수 있습니다.

     

     

    도움이 필요하거나 질문이 있다면, 언제든지 온라인 커뮤니티나 관련 문서를 참고하시기 바랍니다. 성공적인 프로젝트 진행을 기원합니다!

    반응형


    댓글