RFID / NFC Module Kit (PN532) พร้อมแท็ก 2 ชิ้น (Card & พวงกุญแจ)
โมดูล RFID / NFC รองรับทั้ง RFID และ NFC ทำงานที่ความถี่ 13.56MHz ใช้ง่ายมีไลบารีพร้อมใช้งาน
 NFC เป็นเทคโนโลยี RFID ที่ได้รับความนิยมมาก เราจะเห็นการใช้งาน NFC ในโทรศัพท์มือถือหลาย ๆ รุ่นที่มีฟังก์ชั่นนี้ โทรศัพท์ระดับไฮเอนด์เกือบทั้งหมดรองรับ NFC
Near Field Communication (NFC) เป็นชุดมาตรฐานสำหรับสมาร์ทโฟนและอุปกรณ์ที่คล้ายกันเพื่อใช้สื่อสารส่งข้อมูลโดยใช้สัญญาณวิทยุแบบไร้สัมผัส ในระยะการสื่อสาร 1-3 เซนติเมตร
เราสามารถใช้โมดูล NFC ทำสิ่งประดิษฐ์ต่าง ๆ ของเราขึ้นมาเองได้ โดยโมดูลนี้ใช้ชิฟ NXP PN532 NXP PN532 ซึ่งเป็นชิฟที่นิยมใช้กันเป็นจำนวนมากในเทคโนโลยี NFC ด้วยความสามารถนี้เราสามารถสร้างโมดูล NFC และมีไลบารีเรียกใช้งาน สำหรับบอร์ด Arduino ESP8266 ESP32 และไมโครคอนโทรเลอร์รุ่นอื่น ๆ ให้ใช้ทำงานได้ง่าย
ขาใช้งาน IO ทั้งหมดของ PN532 กับ Arduino สามารถต่อได้ง่าย รองรับการเชื่อมต่อแบบ UART , SPI และ I2C โดยเลือกโหมดที่สวิตช์จัมเปอร์ การใช้งานแนะนำใช้แบบ I2C จะใช้งานได้ง่าย

PN532 NFC RFID Module Feature คุณสมบัติ
- บอร์ดมีขนาดเล็กง่ายต่อการต่อประกอบใช้งาน
- รองรับการสื่อสารแบบ  I2C SPI และ HSU (High Speed UART) ง่ายในการเลือกโหมด
- รองรับการอ่านและเขียนแท็ก RFID การสื่อสารแบบ P2P communication การอ่านค่า NFC จากโทรศัพท์มือถือ
- รองรับการอ่านและเขียนแท็ก RFID 
- Mifare 1k, 4k, Ultralight, and DesFire cards
- ISO/IEC 14443-4 cards such as CD97BX, CD light, Desfire, P5CN072 (SMX)
- Innovision Jewel cards such as IRT5001 card
- FeliCa cards such as RCS_860 and RCS_854
 
- ระยะการอ่านสูงสุดที่ 5-7cm
- มีวงจรแปลงสัญญาณลอจิก Standard 5V TTL for I2C and UART, 3.3V TTL SPI
- รองรับ Arduino ESP8266 ESP32 และไมโครคอนโทรเลอร์รุ่นอื่น ๆ 
PN532 NFC RFID รายละเอียดโมดูล 
การใช้งานพื้นฐาน 3 ตัวอย่างสำหรับโมดูล PN532 
1. PN532 อ่าน/เขียน แท็ก RFID
ฟังก์ชั่นมาตรฐานของโมดูลนี้สามารถอ่านและเขียนแท็ก RFID ได้ พร้อมไลบารี Arduino

2. PN532 P2P communication สื่อสารแบบ P2P
โมดูล PN532 สองโมดูลสามารถสื่อสารกันแบบไร้สายได้

3. PN532 อ่านแท็ก NFC จากโทรศัพท์มือถือ
รองรับการอ่านค่า NFC จากโทรศัพท์มือถือรุ่นที่มี NFC ได้

 
ข้อมูลเพิ่มเติม 
วิธีการต่ออุปกรณ์ สอนใช้งาน RFID / NFC Module Kit (PN532)
1.เชื่อมต่ออุปกรณ์ตามด้านล่าง
Arduino UNO R3 -> RFID / NFC Module Kit (PN532)
            • 5V -> VCC
            • GND -> GND
            • A5  -> SCL
            • A4  -> SDA
Arduino UNO R3 -> LED
            • ขา 2 -> LED
            • GND    ->         ตัวต้านทาน 220 ohm         ->         LED
            • ขา 3 -> LED
            • GND    ->         ตัวต้านทาน 220 ohm         ->         LED
Arduino UNO R3 -> Active Buzzer Module 3.3 - 5V
            • 5V -> VCC
            • GND -> GND
            • ขา 4 -> I/O
2. ดาวน์โหลดไฟล์ Library จากลิ้งค์ข้างล่าง
1
int LED_R = 2; // ตัวแปรแทนหลอดไฟ LED สีแดง = ขา 2
 
2
int LED_G = 3; // ตัวแปรแทนหลอดไฟ LED สีเขียว = ขา 3
 
3
int buzzer = 4; // ตัวแปรแทนลำโพง = ขา 4
 
4
int val = 0; // ตัวแปรเก็บค่าสถานะ
 
10
PN532_SPI pn532spi(SPI, 10);
 
13
/* When the number after #elif set as 1, it will be switch to HSU Mode*/
 
15
#include <PN532_HSU.h>
 
18
PN532_HSU pn532hsu(Serial1);
 
21
/* When the number after #if & #elif set as 0, it will be switch to I2C Mode*/
 
24
#include <PN532_I2C.h>
 
26
#include <NfcAdapter.h>
 
28
PN532_I2C pn532i2c(Wire);
 
33
pinMode(LED_R, OUTPUT); // กำหนดสถานะหลอดไฟเป็นกระแสออก
 
34
pinMode(LED_G, OUTPUT); // กำหนดสถานะหลอดไฟเป็นกระแสออก
 
35
pinMode(buzzer, OUTPUT); // กำหนดสถานะลำโพงเป็นกระแสออก
 
36
digitalWrite(buzzer, HIGH); // กำหนดสถานะเริ่มต้นของลำโพงเป็นปิด (buzzer รุ่นนี้สถานะ HIGH คือปิดการใช้งานลำโพง)
 
38
Serial.println("Hello!");
 
42
uint32_t versiondata = nfc.getFirmwareVersion();
 
44
Serial.print("Didn't find PN53x board");
 
48
// Got ok data, print it out!
 
49
Serial.print("Found chip PN5"); Serial.println((versiondata >> 24) & 0xFF, HEX);
 
50
Serial.print("Firmware ver. "); Serial.print((versiondata >> 16) & 0xFF, DEC);
 
51
Serial.print('.'); Serial.println((versiondata >> 8) & 0xFF, DEC);
 
53
// Set the max number of retry attempts to read from a card
 
54
// This prevents us from waiting forever for a card, which is
 
55
// the default behaviour of the PN532.
 
56
nfc.setPassiveActivationRetries(0xFF);
 
58
// configure board to read RFID tags
 
61
Serial.println("Waiting for an ISO14443A card");
 
66
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
 
67
uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
 
69
// Wait for an ISO14443A type cards (Mifare, etc.). When one is found
 
70
// 'uid' will be populated with the UID, and uidLength will indicate
 
71
// if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)
 
72
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);
 
75
Serial.println("Found a card!");
 
76
Serial.print("UID Length: "); Serial.print(uidLength, DEC); Serial.println(" bytes");
 
77
Serial.print("UID Value: ");
 
78
for (uint8_t i = 0; i < uidLength; i++)
 
80
Serial.print(" -"); Serial.print(uid[i], DEC);
 
83
// Wait 1 second before continuing
 
88
// PN532 probably timed out waiting for a card
 
89
Serial.println("Timed out waiting for a card");
 
92
if (uid[0] == 128 || uid[1] == 49 || uid[2] == 2 || uid[3] == 50 )
 
93
// *** uid คือข้อมูลเลขฐานของการ์ดหรือแท็ก ซึ่งการ์ดและแท็กแต่ละชิ้นก็จะมี uid ที่แตกต่างกัน ***
 
94
// *** ผู้ใช้งานสามารถหา uid แต่ละตำแหน่งได้จากการใช้โมดูล PN532 อ่านข้อมูลของการ์ดหรือแท็ก ***
 
96
val = val + 1; { //กำหนดค่า val ให้เพิ่มขึ้นตามที่กำหนดไว้ เมื่อมีการ์ดหรือแท๊กที่มีชุดข้อมูลตรงกับ uid ด้านบนเข้าในระยะสแกน
 
97
if (val == 1) { // กำหนดการใช้งาน เมื่อค่า val = 1 แล้ว...(คำสั่งอยู่ข้างล่าง)...
 
98
digitalWrite(buzzer, LOW); // สั่งเปิดใช้งานลำโพง (buzzer รุ่นนี้สถานะ LOW คือการเปิดการใช้งานลำโพง)
 
99
delay(100); // ระยะเวลาก่อนจะดำเนินการทำคำสั่งต่อไป 100 = 0.1 วินาที
 
100
digitalWrite(buzzer, HIGH); // สั่งปิดใช้งานลำโพง (buzzer รุ่นนี้สถานะ HIGH คือการปิดการใช้งานลำโพง)
 
101
digitalWrite(LED_R, HIGH); // สั่งเปิดใช้งานหลอดไฟ LED (HIGH = เปิด)
 
102
Serial.println("LED Red ON"); // สั่งให้โปรแกรมแสดงข้อความออกมาผ่านหน้าจอ Serial Monitor เมื่อทำคำสั่งเสร็จ
 
105
digitalWrite(buzzer, LOW);
 
107
digitalWrite(buzzer, HIGH);
 
108
digitalWrite(LED_R, LOW); // สั่งปิดหลอดไฟ LED (LOW = ปิด)
 
109
Serial.println("LED Red OFF");
 
114
if (uid[0] == 105 || uid[1] == 89 || uid[2] == 25 || uid[3] == 201 ) {
 
117
digitalWrite(buzzer, LOW);
 
119
digitalWrite(buzzer, HIGH);
 
120
digitalWrite(LED_G, HIGH);
 
121
Serial.println("LED Green ON");
 
124
digitalWrite(buzzer, LOW);
 
126
digitalWrite(buzzer, HIGH);
 
127
digitalWrite(LED_G, LOW);
 
128
Serial.println("LED Green OFF");
 
134
digitalWrite(buzzer, LOW);
 
136
digitalWrite(buzzer, HIGH);
 
138
digitalWrite(buzzer, LOW);
 
140
digitalWrite(buzzer, HIGH);
 
142
digitalWrite(buzzer, LOW);
 
144
digitalWrite(buzzer, HIGH);
 
145
digitalWrite(LED_R, LOW);
 
146
digitalWrite(LED_G, LOW);
 
147
Serial.println("All LED OFF");