RFID RC522 모듈을 테스트하기 전에 반드시 알아야 할 사항은 다음과 같다.
1. 파이선 2.7x 버전에서 시험할 것. 코드가 옛날 코드다. 3.x 번전은 Python3 어쩌고 하면서 실행하니까 어려운 일은 아니다.
2. MFRC522 설치할 때 Git 버전을 roll back 하는 명령을 반드시 실행한다.
3. 라즈베리파이의 CE0(물리번호 24번)을 사용할 경우에는 그대로 코드를 사용하고, CE1(물리번호 26번)을 사용하는 경우는 반드시 MFRC522.py 파일을 수정할 것
일단 RFID 카드에 대한 내용은 다음 내용을 참고한다. 아래 실습은 따라 하지 마세요. 라즈베리파이 4 스마트홈 RFID RC522 실습 11
여기서 에스트 하는 RFID Card Reader/Detector Module Kit (13.56 Mhz, RC522, S50, Mifare One) 이미지는 아래와 같다.
참고로 아래 테이블에 상세 Specification을 나타내었다.
Specification: |
Module Name: MF522-ED Working current:13—26mA/ DC 3.3V Standby current:10-13mA/DC 3.3V sleeping current:<80uA peak current:<30mA Working frequency:13.56MHz Card reading distance :0~60mm(mifare1 card) Protocol:SPI data communication speed:Maximum 10Mbit/s Card types supported:mifare1 S50、mifare1 S70、mifare UltraLight、mifare Pro、mifare Desfire Dimension:40mm×60mm Environment Working temperature:-20—80 degree Storage temperature:-40—85 degree Humidity:relevant humidity 5%—95% Max SPI speed: 10Mbit/s |
스마트홈 시스템에서 결선도는 아래와 같다. 초기 구현 버전이라서 라즈베리파이가 구형이다. 업데이트가 필요하다.
핀 연결은 아래와 같다.
- SDA <--> 24 // 혹시 CE1을 사용한다면 26번에 연결되어 있을 것이다.
- SCK <--> 23
- MOSI <--> 19
- MISO <--> 21
- IRQ <--> UNUSED
- GND <--> 6
- RST <--> 22
- 3.3V <--> 1
$sudo raspi-config 명령을 실행하여 interface 항목에서 SPI 포트를 enable 시킨다.
파이썬 모듈을 사용하기 위해서 SPI wrapper 가 필요하다. 우선 'python-dev'를 인스톨하여 환경을 구성한다. 'python-dev’를 인스톨하기 위해 다음 명령어를 사용한다.
$sudo apt-get install python-dev
파이선 버전 확인
pi@raspberrypi:~ $ python --version
Python 2.7.16
SPI 포트 활성화 확인
pi@raspberrypi:~ $ lsmod | grep spi
spidev 20480 0
spi_bcm2835 24576 0
SPI 버스로부터 데이터를 읽기 위해 필요한 함수들은 SPI-Py 집합에 있는데 이것은 github를 통해 구할 수 있다. 인스톨하기 위해 SPI-Py 라이브러리를 그대로 카피한다. 이것은 파이썬 SPI 라이브러리를 사용하기 위한 소스코드들이다.
$ git clone http://github.com/lthiery/SPI-Py.git
위 라이브러리를 롤 백을 수행한다.
pi@raspberrypi:~ $ cd SPI-Py/
pi@raspberrypi:~/SPI-Py $ git checkout 8cce26b9ee6e69eb041e9d5665944b88688fca68
output: Notice: '8cce26b9ee6e69eb041e9d5665944b88688fca68' checkout.
~
~
~
Current position of HEADER 8cce26b realized I can't make the license looser
pi@raspberrypi:~ $ cd SPI-Py/
pi@raspberrypi:~/SPI-Py $ git checkout 8cce26b9ee6e69eb041e9d5665944b88688fca68
output: Notice: '8cce26b9ee6e69eb041e9d5665944b88688fca68' checkout.
~
~
~
Current position of HEADER 8cce26b realized I can't make the license looser
인스톨한다.
pi@raspberrypi:~/SPI-Py $ sudo python setup.py install
인스톨할 때 보이는 화면 내용은 아래와 같다.
pi@raspberrypi:~/SPI-Py $ sudo python setup.py install
running install
running build
running build_ext
building 'spi' extension
creating build
creating build/temp.linux-armv7l-2.7
arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-InigCj/python2.7-2.7.16=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/include/python2.7 -c spi.c -o build/temp.linux-armv7l-2.7/spi.o
creating build/lib.linux-armv7l-2.7
arm-linux-gnueabihf-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-InigCj/python2.7-2.7.16=. -fstack-protector-strong -Wformat -Werror=format-security -Wl,-z,relro -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-InigCj/python2.7-2.7.16=. -fstack-protector-strong -Wformat -Werror=format-security build/temp.linux-armv7l-2.7/spi.o -o build/lib.linux-armv7l-2.7/spi.so
running install_lib
copying build/lib.linux-armv7l-2.7/spi.so -> /usr/local/lib/python2.7/dist-packages
running install_egg_info
Writing /usr/local/lib/python2.7/dist-packages/SPI_Py-1.0.egg-info
MFRC522 파이선 코드를 내려받는다. 반드시 다운 폴더는 아래에 보이는 폴더에 한다.
pi@raspberrypi:~/SPI-Py $ git clone https://github.com/mxgxw/MFRC522-python.git
실행 명령과 화면 코드다.
pi@raspberrypi:~/SPI-Py $ git clone https://github.com/mxgxw/MFRC522-python.git
'MFRC522-python' Copy...
remote: Enumerating objects: 109, done.
remote: Total 109 (delta 0), reused 0 (delta 0), pack-reused 109
downloading object: 100% (109/109), 36.57 KiB | 5.22 MiB/s, complete.
Delta ~~~: 100% (47/47), complete.
폴더를 이동한다.
pi@raspberrypi:~/SPI-Py $ cd MFRC522-python/
혹시 CE1을 사용한다면 $nano MFRC522.py 파일을 열어서 110라인 근처 코드 한 줄을 다음과 같이 코드를 수정한다.
Here, on line 110 of the MFRC522.py file, we'll use the
def __init__(self, dev='/dev/spidev0.0', spd=1000000):
-->>>> modify it like this.
def __init__(self, dev='/dev/spidev0.1', spd=1000000):
아래는 찾기 쉽도록 더 많은 코드를 보여준다.
TestADCReg = 0x3B
Reserved31 = 0x3C
Reserved32 = 0x3D
Reserved33 = 0x3E
Reserved34 = 0x3F
serNum = []
def __init__(self, dev='/dev/spidev0.0', spd=1000000): // 여기여기
spi.openSPI(device=dev,speed=spd)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(self.NRSTPD, GPIO.OUT)
GPIO.output(self.NRSTPD, 1)
self.MFRC522_Init()
이것을 dev=/dev/spidev0.0’ 을 반드시 dev=/dev/spidev0.1 로 바꾸어 준다.
TestADCReg = 0x3B
Reserved31 = 0x3C
Reserved32 = 0x3D
Reserved33 = 0x3E
Reserved34 = 0x3F
serNum = []
def __init__(self, dev='/dev/spidev0.1', spd=1000000): //여기여기
spi.openSPI(device=dev,speed=spd)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(self.NRSTPD, GPIO.OUT)
GPIO.output(self.NRSTPD, 1)
self.MFRC522_Init()
다 되었다. 아래는 실행을 보여준다.
pi@raspberrypi:~/SPI-Py/MFRC522-python $ python Read.py
Welcome to the MFRC522 data read example
Press Ctrl-C to stop.
Card detected
Card read UID: 124,201,112,4
Size: 8
Sector 8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Card detected
Card read UID: 124,201,112,4
Size: 8
Sector 8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Card detected
Card read UID: 124,201,112,4
Size: 8
Sector 8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Card detected
Card read UID: 124,201,112,4
Size: 8
Sector 8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Card detected
Card read UID: 124,201,112,4
Size: 8
[참고사이트]
RFID RC522(raspberry Pi) 가장 처음 자료
SPI-Py 라이브러리 roll back 문제 해결 참고 - 두 번째 답변에 있다
파이선3 방식으로 다루는 예제 - 이거 하다가 안됨. CE1 연결 시 해결 방법 없어서 ㅠ.ㅠ
또 하나의 일이 어렵게 끝났다. SD 카드 16Gb 굽는데 20분이 걸린다. 테스트를 하는데 10분이 걸린다. 이걸 5번 하면서 테스트하고 다시 굽고 문서 작성하고 확인하는 일을 반복한다. 이건 약과라는 것을 잘 안다. 이런 건 아무것도 아니다. 어느 분야나 같다. 늘 이런 기분을 느끼며 사는 것은 아니다. 작은 성취감, 그게 또 반복되고, 희망적이고, 더 큰 도전을 하고... 이상에 불과하다. 우린 늘 우울하다. 조용하다. 아무 일이 없다. 그 순간을 잘 견뎌야 한다. 늘 중요한 말은 제일 마지막에 한다. 너무 멋지다. 진실은 늘 가장 밑바닥에 가라앉아 있다.
끝났다. 남자는 일이 손에 안 잡히고 하기 싫어도 끝까지 자리를 지킨다. 놀면서도 지킨다. 그러면 언젠가는 끝내야 하는 시간이 온다. 누구는 시간 낭비다. 안되면 접고 다른 일하라. 머, 이런 이야기를 하는데 절박할 때 절박한 방법이 나온다. 끝까지 물고 늘어진다. 그게 내 방식이다. 강한 자들이 강하게 사는 방식이다.
'개발자 > 라즈베리파이4' 카테고리의 다른 글
라즈베리파이4 파이선 버튼 입력 제어 (2) | 2023.10.26 |
---|---|
라즈베리파이4 파이선 LED 제어 (1) | 2023.10.26 |
라즈베리파이4 UART 6개 활성화 방법 (2) | 2023.10.26 |
라즈베리파이 Pico 정리 잘된 곳 (0) | 2023.07.24 |
라즈베리파이4 스마트홈 안드로이드 앱 설명 16 (0) | 2023.05.31 |
라즈베리파이4 스마트홈 서버 프로그램 실습 15 (0) | 2023.05.30 |
라즈베리파이4 스마트홈 조명 LED bar 실습 14 (1) | 2023.05.29 |
라즈베리파이4 스마트홈 카메라 실습 13 (2) | 2023.05.26 |
더욱 좋은 정보를 제공하겠습니다.~ ^^