'RFID'에 해당되는 글 2건

  1. 2019.03.18 Hardware | PN523 - RFID / NFC breakout 보드
  2. 2019.01.25 Book | 훤히 보이는 RFID/USN - Get to know RFID/USN

Hardware | PN523 - RFID / NFC breakout 보드

|

이 글은, 아래 포스트에서 예고 했듯이, RFID / NFC 를 arduino 를 이용하여 tag를 인식시켜 보는 글 입니다.


* Book | 훤히 보이는 RFID/USN - Get to know RFID/USN

https://chocoball.tistory.com/entry/Book-Get-to-know-RFID-USN





1. 대응 가능한 chip


RFID / NFC 를 읽을 수 있는 chip 중에 PN532 가 FeliCa 도 인식할 수 있으며, 대중적으로 구입 가능하다는 것을 알게 되었습니다. (범용)


* RFID Selection Guide - Adafruit Industries

https://cdn-shop.adafruit.com/datasheets/rfid+guide.pdf

rfid+guide.pdf



PN5xx 시리즈 중에서 시중에서 구입 가능한, 그리고 xx 부분의 숫자가 큰 것으로는 PN532 가 있더군요.

가장 우수한 chip 으로는 PN544 입니다만, 관련 breakout 은 5만원 이상이었습니다.


저렴하게 AliExpress 에서 골라서 구입합니다.


* 1Set GREATZT PN532 NFC RFID Wireless Module V3 User Kits Reader Writer Mode IC S50 Card PCB Attenna I2C IIC SPI HSU For Arduino

https://www.aliexpress.com/item/1Set-GREATZT-PN532-NFC-RFID-Wireless-Module-V3-User-Kits-Reader-Writer-Mode-IC-S50-Card/32859551116.html



- User manual : PN532_Manual_V3.pdf


[Features]

1. Gilt PCB and Small dimension and easy to embed into your project

2. Support I2C, SPI and HSU (High Speed UART), Change between those modes

3. Support RFID reading and writing

  1) SupportP2P communication with peers

  2) Support NFC with Android phone


4. Typical Operating Distance have been updated to 5cm~7cm reading distance

5. Work in NFC Mode or RFID reader/writer Mode

6. RFID reader/writer supports:

  1) 1k, 4k, Ultralight, and DesFire cards

  2) ISO/IEC 14443-4 cards such as CD97BX, CD light, Desfire, P5CN072 (SMX)

  3) Innovision Jewel cards such as IRT5001 card

  4) FeliCa cards such as RCS_860 and RCS_854


7. Plug and play, for compatible

8. Built in PCB Antenna, with 4cm~6cm communication distance

9. On-board level shifter, Standard 5V TTL for I2C and UART, 3.3V TTL SPI

10. Work as RFID reader/writer

11. Work as 1443-A card or a virtual card

12. Exchange data with other NFC devices such as smartphone



[Package Included]

1 x1PCS*PN532 NFC RFID Module

1x 2.54mm spacing 4pin Cable

1xMifare One S50 White Card

1xMifare One S50 Key Card

1x12P bended male pins


사양을 보면 FeliCa 도 읽을 수 있다고 되어 있습니다.

FeliCa 는 일본 지하철 / 국철에서 사용할 수 있는 Suica / PASMO 카드에 사용된 기술입니다.

마침 일본에서 사용했던 Suica / Pasmo 카드를 가지고 있으니, FeliCa 대응 가능한 이 breakout 을 이용할 수 있겠네요.


다만, fake 제품은 읽을 수 없다고 합니다. (나중에 안 사실)

AliExpress 에서 구매할 수 있는 저가품이다 보니, 아마 불가능할 것 같다는 느낌은 듭니다.





2. 도착


배송에 한달정도 소요되었습니다.



구성품은 다음과 같습니다.

Tag 종류가 둥그런 것과 카드형식, 두가지가 들어 있네요.



Breakout 보드의 확대 사진입니다.



뒷면입니다. I2C 용 pin head 와 SPI 용이 따로 구분되어 있습니다.



Arduino 와 연결하기 위해서 pin head 들을 납땜 했습니다.

납땜 팁이 오래 쓰면서 산화되어 버려 이제는 납볼이 잘 생성되지 않았지만, 어떻게든 이쁘게 된것 같네요.







3. Library 설치


이 보드에 관한 제작 / 판매하는 사이트를 따라가다 보면 Seeed Studio 라는 회사가 떠오릅니다.

관련한 source 들은 아래 GitHub 에서 공유되어 있습니다.


* elechouse/PN532

https://github.com/elechouse/PN532


위의 사이트에서 설명되어 있기론, 아래 두 파일을 Arduino libraries 폴더에 압축을 풀어서 copy 하라고 합니다.

결국 위의 GitHub 의 파일과, 추가로 Don 이라는 사람이 만든 NDEF 파일을 Arduino > libraries 에 설치하면 준비는 끝납니다.


PN532-PN532_HSU.zip

NDEF-master.zip


위에서 시키는 대로 하면, PN532 directory 가 많아지므로, 구분을 위해 prefix "elechouse" 를 붙여서 아래처럼 저장했어요.



다른 source 로는, 가장 유명한 adafruit 에서 나온 PN532 library 를 설치하면 됩니다.


* adafruit/Adafruit-PN532

https://github.com/adafruit/Adafruit-PN532


위에서 파일을 다운로드 받아 libraries 에 copy 해도 되고, 아래처럼 Library Manager 를 이용하여 install 해도 됩니다.



다만, adafruit 소스에는 HSU (High Speed UART) 연결방식이 지원되지 않습니다.

그러니 HSU 를 사용하고 싶으면, 처음에 소개된 elechouse source 가 필요합니다.





4. I2C 연결


이제 소스를 올리고 RFID 인식을 시켜 봅니다.

Arduino 와 연결 방식은 I2C / SPI / HSU 가 있으니, 먼저 가장 단순한 I2C 를 이용해 봅니다.


아래처럼 DIP switch 를 I2C 방식으로 변경합니다.



문제 없이 I2C 통신이 이루어 지는지 I2C detect 소스로 확인해 봅니다.

방법은 예전에 올렸던 아래 포스트에서 확인해 보세요.


* Hardware | Gyroscope GY-521 MPU-6050 을 사용해 보자

https://chocoball.tistory.com/entry/Hardware-Gyroscope-GY521-MPU6050



PN532 breakout 의 측정된 주소로 "0x24" 가 나왔네요.

연결은 다음과 같이 합니다.


   PN531  | Arduino Nano
-------------------------
    VCC   |     5V
    GND   |     GND
    SDA   |     A4
    SDL   |     A5
-------------------------


연결 layout 은 다음과 같습니다.

구매한 breakout 보드와 동일한 fritzing 파트를 찾을 수 없어서 adafruit 에서 나온 것을 사용하였습니다.



여타 I2C 연결이 그러하듯 동일합니다.



아래 sample source 를 arduino 에 로드합니다. iso14443a_uid 가 처음 시작하기에 가장 평범한 소스라고 하네요.


File > Examples > elechouse_PN532 > iso14443a_uid



Serial Monitor 에서 확인하면 다음과 같이 인식합니다!



위의 소스의 단점은 준비 상태로 되는 것과 카드를 태킹하면 인식에 시간이 좀 걸린다는 것 입니다.

실생활에 전혀 사용할 수 없는 수준이네요.


그럼 이번에는 Adafruit 의 동일한 소스를 사용해 봅니다.


File > Examples > Adafruit PN532 > iso14443a_uid


adafruit 소스는 먼저번 소스와는 다르게, IRQ 와 RESET (RSTO) 를 추가로 연결하는 부분이 존재합니다.


// If using the breakout or shield with I2C, define just the pins connected
// to the IRQ and reset lines.  Use the values below (2, 3) for the shield!
#define PN532_IRQ   (2)
#define PN532_RESET (3)  // Not connected by default on the NFC Shield

// Uncomment just _one_ line below depending on how your breakout or shield
// is connected to the Arduino:

// Use this line for a breakout with a SPI connection:
//Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);

// Use this line for a breakout with a hardware SPI connection.  Note that
// the PN532 SCK, MOSI, and MISO pins need to be connected to the Arduino's
// hardware SPI SCK, MOSI, and MISO pins.  On an Arduino Uno these are
// SCK = 13, MOSI = 11, MISO = 12.  The SS line can be any digital IO pin.
//Adafruit_PN532 nfc(PN532_SS);

// Or use this line for a breakout or shield with an I2C connection:
Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);


위의 소스의 일부분에서 보여주는 것 처럼 SPI 부분을 주석처리 하고, I2C 부분을 활성화 시킵니다.

두개의 pin 연결이 아래처럼 추가되었습니다.


   PN531  | Arduino Nano
-------------------------
    VCC   |     5V
    GND   |     GND
    SDA   |     A4
    SDL   |     A5
    IRQ   |     D2
   RSTO   |     D3
-------------------------


결과는 인식률과 인식 속도가 엄청 빨라졌습니다.

결국 IRQ / RESET 핀이 준비상태 및 인식 처리를 추가로 담당한다는 것을 예상할 수 있습니다.

Serial Monitor 결과는 다음과 같습니다.



참고로 위의 소스로 신용카드 (버스카드) 를 인식 시키면 "Mifare Classic" 으로 읽어보라고 메시지가 뜹니다.


File > Examples > Adafruid PN532 > readMifareClassic 을 로드 시켜 봅니다.



뭔가 정보를 더 많이 뿌려줌과 동시에, "Mifare Classic" 이라고 이야기 해 줍니다.


조금 벗어난 이야기 이지만,

RFID / NFC 분야도 존재하는 규격이 많아서 chip 제조사로서는 골치가 아플 듯 합니다.


이것도 결국 기술 로열티와 표준 제정 이권싸움의 결과겠죠.

Thunderbolt 도, 결국은 Thunderbolt 3 = USB Type-C 로 통합되듯, 언젠가 RFID / NFC 도 통합이 되었으면 좋겠습니다.





5. SPI 연결


이제 SPI 연결을 시도해 봅니다. 역시 많은 데이터 교환은 I2C 보다는 SPI 방식입니다.

먼저, Software SPI 연결법 입니다.


   PN531  | Arduino Nano
-------------------------
    VCC   |     5V
    GND   |     GND
    SCK   |     D2
    MISO  |     D5
    MOSI  |     D3
    SS    |     D4
-------------------------


소스는 adafruit 의 것을 이용해 봅니다. (elechouse 것도 상관 없슴)


File > Examples > Adafruit PN532 > readMifare


이미 소스에서 SCK / MOSI / SS / MISO 의 pin 번호를 정희해 놨으므로, 그에 맞게 arduino 와 연결해 줍니다.



TIMEOUT! 이 뜨긴 합니다만, 결과는 아래와 같이 잘 나옵니다.

아무래도 Software SPI 여서 그런 듯 합니다.



역시 SPI 는 Hardware SPI 죠. Hardware SPI 법으로 구동해 봅니다.


   PN531  | Arduino Nano
-------------------------
    VCC   |     5V
    GND   |     GND
    SCK   |     D13
    MISO  |     D12
    MOSI  |     D11
    SS    |     D4
-------------------------


SS pin 은 어느 digital IO pin 이나 상관 없습니다.

이미 PN532_SS 를 4 번 pin 으로 정의해 놨으니, 그 pin 을 그대로 사용합니다.



나머지 pin 들은 각각의 arduino 에 맞게 연결하면 됩니다.

참고로 arduino nano 는 위의 주석에 설명되어 있는 것처럼 SCK = 13, MOSI = 11, MISO = 12 로 맞추면 됩니다.

이는 아래 그림처럼 실제 nano 의 pin out 과 동일합니다.



결과는 다음과 같이 나옵니다. TIMEOUT! 도 없고 인식도 가장 빠른것 같아요.



동영상도 올려 봅니다.






6. FeliCa 인식


FeliCa 가 된다고 하니, electhouse 소스의 FeliCa_Card_Read 를 실행해 봅니다.


File > Examples > elechouse_PN532 > FeliCa_Card_Read


실망스럽게도 PASMO 는 인식되지 않았습니다.

당연하게도 Mifare (ISO14443A) 카드들에게는 전혀 반응하지 않았구요.


단, 희한하게도 일본에서 사용했던 Times (한국의 SOCAR 같은 서비스) 카드는 이 소스로 읽혔습니다.



FeliCa 도 여러 종류가 있는 듯 합니다.

아쉽게도 지하철에 사용되는 FeliCa 인, 일본의 PASMO 와 싱가포르의 EZ-Link 는 어떤 소스에도 읽히지 않았습니다.





7. High Speed UART 연결


특이하게 HSU 라는 연결 방법을 제공합니다. 이는 High Speed UART 의 약자.

이 HSU 는 Hardware Serial (Serial1) 을 바탕으로 소스가 만들어졌습니다.



다만, 위의 표에서 보이듯이, Hardware Serial 를 사용하는 지라, 일부 arduino 에서는 Serial Monitor 를 열어서 확인할 수 없게 됩니다.

Arduino Nano 도 Hardware Serial 은 USB 통신에 점유되어 있어서 "Serial1" 을 사용할 수 없었습니다.



하늘이 무너져도 솟아날 구멍은 있다던가요, 가지고있는 arduino micro 에서는 사용 가능했습니다.

그럼 아래 source 를 arduino micro 에 업로드 해봅니다.


File > Examples > electhouse_PN532 > iso14443a_uid


PN532_HSU 쪽을 활성화면서 "Serial1" 을 사용하게 합니다.



Arudino micro 와의 pin 연결은 다음과 같습니다.


   PN531  | Arduino Micro
--------------------------
    VCC   |     5V
    GND   |     GND
    SDA   |     RX
    SDL   |     TX
--------------------------


잊지 말아야 할 것은, DIP switch 를 HSU 으로 설정해 둬야 합니다.



Arduino micro 의 RX / TX 와 연결하여 HSU 인겁니다.



오오오오! 느낌적으로 SPI 보다 더 빠른 듯 합니다. 이게 가장 빠르네요.




결과는 이렇게 보이구요.



동영상도 올려 봅니다.



그럼 arduino nano 처럼 Hardware Serial 여유가 없는 arduino 는 안되는거냐!

찾아보니 방법을 GitHub 의 설명에서 친절하게 알려주고 있었습니다.


아래 소스처럼 "SoftwareSerial.h" 를 이용하여 구현이 가능합니다.

우선 바로 아래는 Hardware Serial 로 구현된 부분을...


#include "PN532_HSU.h"
#include "PN532.h"

PN532_HSU pn532hsu(Serial1);
PN532 nfc(pn532hsu);

void setup(void)
{
	nfc.begin();
	//...
}


아래처럼 SoftwareSerial.h 를 추가하고 관련된 pin 을 정의해 주면 됩니다.

뭐, 관련된 함수를 "PN532_SWHSU.h" 에서 구현해 줘서 가능한 것이지만 말입니다.


#include "SoftwareSerial.h"
#include "PN532_SWHSU.h"
#include "PN532.h"

SoftwareSerial SWSerial( 10, 11 ); // RX, TX

PN532_SWHSU pn532swhsu( SWSerial );
PN532 nfc( pn532swhsu );

void setup(void)
{
	nfc.begin();
	//...
}


최종적으로 Hardware Serial 관련 부분을 주석처리 하고, SoftwareSerial 을 활성화 하는 코드를 추가하면 됩니다.



Pin 연결은 위에서 정의한 D10 과 D11 에 각각 연결하면 됩니다.

참고로, SDA 는 TX 이고, SDL 은 RX 이므로, SDA(TX) <--> D10 (RX), SDL(RX) <--> D11(TX) 가 됩니다.


   PN531  | Arduino Nano
-------------------------
    VCC   |     5V
    GND   |     GND
    SDA   |     D10
    SDL   |     D11
-------------------------


잘 구동합니다만, 뭔가 타이밍이 맞지 않은지 authentication fail 이 뜹니다.

소스코드에서 수정해야 할 부분이 있는듯 보입니다만, 확인이 어느정도 되었으니 패스.






8. 확인한 RFID / NFC 카드들


마지막으로, 본 포스트에서 확인용으로 사용된 카드들을 소개합니다.



위는 PN532 breakout board 를 구입하면 기본으로 딸려오는 tag 들 입니다. 하나는 원형, 하나는 카드 모양입니다.



위는 싱가포르 출장때 구입해서 사용했던 지하철 패스카드 입니다. 충전식이죠.

아쉽지만, 구입한 PN532 가 짝퉁이라서 못 읽는 것인지 모든 소스와 연결 방법에서 읽기를 실패했습니다.



마찬가지 FeliCa 인식에서 실패한 일본 PASMO 입니다. 일본에서 거주할때 신세를 졌었죠.



저의 회사 출입 카드 입니다. 5년전에 찍은 거라 얼굴이 지금보다 젊어 보이네요. ㅠㅠ



버스카드 겸용인 신용카드 입니다. Mifare Classic 입니다. 잘 읽힙니다.

전용 어플을 이용하면 RFID 정보도 덮어 씌기가 될 듯 한데, 이번에는 도전하지 않았습니다.



유일하게 읽힌 FeliCa 카드 입니다!

다른 소스에서는 전혀 읽히지 않았고, FeliCa Read 소스에서만 유일하게 읽힌 놈입니다.

일본에서 자가용을 운용할 여유가 안되어서, 잘 빌려서 타고 다녔습니다. (SOCAR 같은 서비스)





9. FIN


역시 아쉬운 점은 지하철용 FeliCa 를 읽을 수 없었다는 점 입니다.

뿌듯한건 모든 인터페이스 - HSU, Software HSU, I2C, I2C with RST, Hardware SPI, Software SPI - 모두를 확인해 봤다는 점 입니다.


기회가 되면, 아래 스샷처럼 NXP 에서 나온 어플을 가지고 완벽하게 debugging 을 해보고 싶습니다.

다만, PN544 breakout 보드가 5만원 이상이라는 것 때문에, 일단 여기서 멈춥니다.



And

Book | 훤히 보이는 RFID/USN - Get to know RFID/USN

|

조만간 AliExpress 에서 주문한 RFID reader 와 tag 가 도착하기 전에 RFID 에 조금이라도 알고 싶어서 이 책을 도서관에서 빌렸습니다.

ETRI 관련된 박사님들이 각자 잘 아시는 영역의 글을 모아 만든 RFID/USN 관련된 서적입니다.



아래는 목차입니다.




이 책은 8분이 공동으로 저술한 책 입니다.





1. 책 정보


* 시리즈 : ETRI easy IT 의 6번째 책

* 제목 : 훤히 보이는 RFID/USN

* 발행 : 초판 2008년 6월 25일

* 지은이 : 표철식, 박상준, 김기일, 김동균, 이문규, 김관중, 김선진, 서정해

* 펴낸곳 : 전자신문사

* ISBN 978-89-92885-05-8 03560

* 값 : 20,000원


꼭 알아야 할것은, 이 책이 발간된 해가 2008 년도 라는 부분입니다.


지금은 NFC 나 RFID 가 일상생황에 많이 쓰이고 있어서, 독자에게 별다른 감흥을 못주는 책이 될 수 있습니다.

또한 일본에서는 이미 NFC 기능의 Suica 를 2001년부터 시험 운용하고 있었다는 점을 보면, 2008년에 이 책이 나온것도 조금 늦은 감이 없지않아 있습니다.





2. 용어


알아둬야 할 용어는 당연히 다음과 같겠습니다.


* RFID : Radio Frequency Identification

https://en.wikipedia.org/wiki/Radio-frequency_identification


* USN : Ubiquitous Sensor Network

T23010000040001PDFE.pdf


* NFC : Near Field Communication

https://en.wikipedia.org/wiki/Near-field_communication


지금에 와서는 USN 은 IoT 의 일부가 되겠네요.

요즘은 USN 이라고 이야기 하면 알아듣는 사람은 거의 없을꺼예요.

이 출판물이 나왔던 2008년에 ITU 에서 발간한 문서에서 USN 이라는 용어가 쓰였습니다.


또한 비슷한 것끼리는 RFID 와 NFC가 있습니다만, 개발된 흔적에 따라 쓰임이 조금 다릅니다.

아래 website 에서 잘 설명되어 있네요.


* RFID vs. NFC: What’s the Difference?

https://blog.atlasrfidstore.com/rfid-vs-nfc


infographic 으로 된 그림이 있어서 여기에 개제해 봅니다.



iPhone 끼리 근거리 통신을 통하여 사진을 전송받는 기술이 NFC 였군요.





3. 원리


긴 이야기를 짧게 해본다면 다음과 같습니다.



- 전자기파를 reader 에서 쏴주면, tag 코일에서 발생하는 유도전류를 통해 생성된 전기

- 그 전기를 이용하여 tag ID 를 reader 에 부하변조를 통하여 정보 전달

- 변조 방식은 ASK, FSK, PSK 등을 사용



실제 tag 를 까 보면, transponder 와 chip 및 회로로 되어 있습니다.



가로세로 1mm 의 저 작은 칩이 모든 것을 관장한다니 너무 신기합니다.



저 chip 의 제조에 대해서는 아래 Youtube 를 참고해 보세요.


* How I Made My Own RFID tag - From Shenzhen, China to New York City

https://www.youtube.com/watch?v=PWzyPZAPbt0



사실 저도 이 영상을 보고 RFID 와 arduino 를 연결해서 확인해 보고 싶다는 생각을 한 계기가 되었습니다.

저 위의 Youtube 주인공은 (오른쪽 - Scotty Allen), iPhone 을 부품을 개별적으로 구입해서 하나의 완성 iPhone 을 만들어서 큰 반향을 일으켰던 사람입니다.


이번에는 RFID 를 쫒아, 중국의 Shenzehen 으로부터 New York 까지의 일정이 담겨있습니다.





4. 활용


활용되는 분야는 너무 많습니다.

물류부터 시작하여, 뭔가 추적해야 하는 것이라면 모두 사용될 수 있겠습니다.



등록된 주차장에 들어갈 때도 사용되구요.



마라톤을 뛸 때, 신발에 부착하여 저 바닥면을 지나갈 때, 선수 기록용으로도 활용됩니다.

확실하게 저 위에만 밟고 지나가면 시간이 등록되고 휴대폰 SMS 로 전송되어서 신기했습니다.





5. chip 선택


이미 완성된 기술이기 때문에 그만큼 규격도 다양하게 나왔습니다.

그 규격에 따라 사용되는 tag chip 과 reader 종류가 많습니다.

사실 규격이라고 하기보단, 필요에 따라 발전시킨 버전들이라고 봐야겠죠.


마침 "RFID Selection Guide" 라는 PDF 를 인터넷에서 발견해서 여기에 링크를 걸어 봅니다.


* RFID Selection Guide

rfid+guide.pdf



위에서 보이는 PN532 가 마켓에서 쉽게 구할 수 있고, NFC 및 RFID 양쪽에 대응하면서 그럭저럭 쓸만한 대상으로 보입니다.

인터넷에서 찾아보면 RFID 만 되고, 상용 NFC 가 안되는 것들도 있거든요.


SONY 가 개발한 FeliCa (Suica) 및 iPhone 의 FeliCa 대응 NFC 도 될 듯도 하니,

AliExpress 에서 도착하면 따로 글을 작성해 보겠습니다.






FIN


책 이야기는 별로 하지 않고, RFID 와 NFC 에 대해서 조사해본 이야기가 주가 되었네요.


이 책의 아쉬운 부분은, 이미 한창 발전해버린 RFID 가 주제이다 보니, 지금의 2019 년에 읽기에는 조금 old 한 느낌입니다.


또 하나를 더 들자면, 저자가 8명이나 관여하다 보니 서로 겹치는 내용이 다뤄져 있어, 읽는데 지겹습니다. (사공이 많음)

어떤 챕터는 너무 기본 기술에 치중되어 있고, 다른 챕터는 활용성에만 치중되어 있어서, 이게 기술서적인지 마케팅 서적인지 혼란스러운 부분도 있습니다.


다만 일관성이 없다보니, 전반적으로 "응~ 그렇구나" 정도로 넓은 범위로 지식을 얻기에는 좋은 책이네요. (궂이 들자면...)


And
prev | 1 | next