- 29a Bùi Xuân Phái, P.Tây Thạnh, Quận Tân Phú, TPHCM
- linhkienduchuy2018@gmail.com
- 0942954739 - 0919900767
Giao miễn phí trong nội thành TPHCM đối với đơn hàng trên 1 triệu đồng
Tặng ngay 50.000đ cho đơn hàng trên 2 triệu đồng
THÔNG SỐ KỸ THUẬT:
Một trong những lợi thế lớn của mô-đun NFC là nó có thể sử dụng các giao thức khác nhau để giao tiếp với Arduino, UART, I2C hoặc SPI. Các giao thức khác nhau này sử dụng các chân và thư viện cụ thể của bộ vi điều khiển.
Để chọn chế độ giao tiếp, PN532 phải được cấu hình bằng cách sử dụng công tắc DIP (0-Thấp, 1-Cao):
CHẾ ĐỘ | SEL0 | SEL1 |
UART | 0 | 0 |
SPI | 0 | 1 |
I2C | 1 | 0 |
SƠ ĐỒ ĐẤU NỐI CƠ CHẾ UART:
Vì có nhiều tùy chọn giao tiếp khác nhau, nên phải sử dụng đúng thư viện trong từng trường hợp. Trong trường hợp cổng UART vật lý thì sử dụng thư viện, PN532_HSU.h , đối với trường hợp sử dụng cổng SoftwareSerial thì sử dụng thư viện PN532_SWHSU.h
Các chức năng cho phép đọc NFC vẫn giống hệt nhau trong từng trường hợp.
CODE GIAO TIẾP UART GIỮA PN532 VÀ ARDUINO:
// for Hardware Serial
/*#include <PN532_HSU.h>
#include <PN532.h>
PN532_HSU pn532hsu( Serial );
PN532 nfc( pn532hsu );
*/
// for Software Serial
#include <SoftwareSerial.h>
#include <PN532_SWHSU.h>
#include <PN532.h>
SoftwareSerial SWSerial( 2, 3 ); // RX, TX
PN532_SWHSU pn532swhsu( SWSerial );
PN532 nfc( pn532swhsu );
String tagId = "None", dispTag = "None";
byte nuidPICC[4];
void setup(void) {
Serial.begin(115200);
Serial.println("Hello Maker!");
// Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (! versiondata) {
Serial.print("Didn't Find PN53x Module");
while (1); // Halt
}
// Got valid data, print it out!
Serial.print("Found chip PN5"); Serial.println((versiondata >> 24) & 0xFF, HEX);
Serial.print("Firmware ver. "); Serial.print((versiondata >> 16) & 0xFF, DEC);
Serial.print('.'); Serial.println((versiondata >> 8) & 0xFF, DEC);
// Configure board to read RFID tags
nfc.SAMConfig();
Serial.println("Waiting for an ISO14443A Card ...");
}
void loop() {
readNFC();
}
void readNFC() {
boolean success;
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);
if (success) {
Serial.print("UID Length: "); Serial.print(uidLength, DEC); Serial.println(" bytes");
Serial.print("UID Value: ");
for (uint8_t i = 0; i < uidLength; i++) {
nuidPICC[i] = uid[i];
Serial.print(" "); Serial.print(uid[i], DEC);
}
Serial.println();
tagId = tagToString(nuidPICC);
dispTag = tagId;
Serial.print(F("tagId is : "));
Serial.println(tagId);
Serial.println("");
delay(1000); // 1 second halt
} else {
// PN532 probably timed out waiting for a card
//Serial.println("Timed out! Waiting for a card...");
}
}
String tagToString(byte id[4]) {
String tagId = "";
for (byte i = 0; i < 4; i++) {
if (i < 3) tagId += String(id[i]) + ".";
else tagId += String(id[i]);
}
return tagId;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SƠ ĐỒ ĐẤU NỐI THEO CƠ CHẾ SPI: Cài đặt thư viện PN532_SPI.h cho giao tiếp SPI
CODE GIAO TIẾP SPI GIỮA PN532 VÀ ARDUINO:
// for SPI Communication
#include <SPI.h>
#include <PN532_SPI.h>
#include <PN532.h>
#include <NfcAdapter.h>
PN532_SPI interface(SPI, 10); // create a PN532 SPI interface with the SPI CS terminal located at digital pin 10
NfcAdapter nfc = NfcAdapter(interface); // create an NFC adapter object
String tagId = "None";
void setup(void) {
Serial.begin(115200);
Serial.println("System initialized");
nfc.begin();
}
void loop() {
readNFC();
}
void readNFC() {
if (nfc.tagPresent())
{
NfcTag tag = nfc.read();
tag.print();
tagId = tag.getUidString();
}
delay(5000);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SƠ ĐỒ ĐẤU NỐI CƠ CHẾ I2C: Cài đặt Thư viện PN532_I2C.h cho giao tiếp I2C
CODE GIAO TIẾP I2C GIỮA PN532 VÀ ARDUINO:
// for I2C Communication
#include <Wire.h>
#include <PN532_I2C.h>
#include <PN532.h>
#include <NfcAdapter.h>
PN532_I2C pn532_i2c(Wire);
NfcAdapter nfc = NfcAdapter(pn532_i2c);
String tagId = "None";
byte nuidPICC[4];
void setup(void) {
Serial.begin(115200);
Serial.println("System initialized");
nfc.begin();
}
void loop() {
readNFC();
}
void readNFC() {
if (nfc.tagPresent())
{
NfcTag tag = nfc.read();
tag.print();
tagId = tag.getUidString();
}
delay(5000);
}
Bình luận