Upload
innovative-experiment-coltd
View
241
Download
6
Embed Size (px)
DESCRIPTION
ตัวอย่างการเชื่อมต่อสายและการเขียนโปรแกรมเพื่อติดต่อเครื่องอ่าน RFID/NFC
Citation preview
Interfacing with POPBOT-XT
เครื่องอ่านNFC/RFIDที่เราจะติดต่อกันนี้ใช้ชิปเบอร์ยอดนิยมPN532ซึ่งปกติชิปตัวนี้จะอยู่ในเครื่องโทรศัพท์สมาร์ทโฟน
ที่ติดตั้งNFC โดยจะทำาหน้าที่ทั้งอ่านเขียนการ์ด รวมถึง สื่อสารกันระหว่างเครื่องโทรศัพท์ที่มีNFCด้วยกัน เครื่องอ่าน
NFC/RFIDนี้จะมาพร้อมขดลวดเสาอากาศย่านความถี่13.56MHzซึ่งใช้งานได้อย่างดีกับการ์ดMifareClassic
ไอซีPN532ออกแบบมาให้สื่อสารให้ไมโครคอนโทรลเลอร์ได้หลายรูปแบบไม่ว่าจะเป็นการสื่อสารอนุกรม,การสื่อสารแบบSPI
หรือI2Cบัสโดยในที่นี้จะเลือกใช้การสื่อสารแบบI2CบัสกับPOP-BOTXTซึ่งต้องขอบคุณ
Ladayada/Adafruit (http://learn.adafruit.com/adafruit-pn532-rfid-nfc/arduino-library)
และ elechouse.com http://www.elechouse.com/elechouse/index.php?main_page=product_in-
fo&cPath=90_93&products_id=2205
สำาหรับไลบรารี่ที่ช่วยให้การติดต่อกับเครื่องอ่านเป็นเรื่องง่าย
สำาหรับบอร์ดควบคุม ตามตัวอย่างนี้เลือกใช้บอร์ดPOPXTหรือจะใช้บอร์ดUniconก็ได้โดยการทำางานของบอร์ดทั้ง
สองนี้จะเหมือนกันโดยเน้นการแสดงผลค่าที่อ่านได้ที่หน้าจอกราฟิกLCD
RFID/NFC
การเชื่อมต่อการเชื่อมต่อบอร์ดPOP-BOTXTเข้ากับเครื่องอ่านNFC/RFIDจะเชื่อมต่อผ่านบอร์ดJCON-PORT4เพื่อสะดวกในการ
ต่อและไม่ต้องตัดสายสัญญาณสำาหรับผู้ที่มีประสบการณ์แล้วอาจเลือกใช้การตัดสายบัดกรีเข้าที่เครื่องอ่านโดยตรงเลยก็ได้โดย
ขาที่เชื่อมต่อมี4ขาคือ+5V SDA SCL GND
ติดตั้งไลบรารี่ไลบรารี่สามารถดาวน์โหลดได้ที่
http://www.elechouse.com/elechouse/images/product/PN532%20NFC%20Module/PN532_NFC_elechouse.rar
หลังจากแตกไฟล์แล้วให้นำาไปเก็บไว้ในโฟลเดอร์Arduino/librariesโดยอาจจะสร้างเป็นโฟลเดอร์ชื่อnfcขึ้นมาก็ได้ดังรูป
โค้ดตัวอย่างการทำางาน
//ไลบรารีส่�าหรับการตดิตอ่กบัเครอืงอา่น NFC และ RFID#include <nfc.h>// ไลบรารีส่�าหรับหุน่ยนต ์POPBOT-XT#include <popxt.h>
NFC_Module NFC; // ใชค้ลาส NFCunsigned long versiondata;void setup(){ glcdMode(3); // จอแสดงผลแนวนอน NFC.begin(); versiondata = NFC.get_version(); // ตรวจสอบเวอรช์ัน่ if (!versiondata) { setTextColor(GLCD_RED); glcd(1,0,”Didn’t find PN53x board”); // แจง้ขอ้ความถา้ตรวจไมพ่บเครือ่งอา่น while (1); // halt } setTextSize(2); setTextColor(GLCD_WHITE);glcd(0,0,”NFC Reader”); setTextSize(1); setTextColor(GLCD_BLUE); // แสดงเวอรช์ัน่ glcd(2,0,”Version%d.%d”,(versiondata>>16)&0xFF,(versiondata>>8)&0xFF); /* Set normal mode, and disable SAM */ NFC.SAMConfiguration(); //ก�าหนดโหมดการท�างาน}void loop(){ byte BUF[32],STA; STA = NFC.InListPassiveTarget(BUF); //อา่นคา่ NFC เกบ็ในบฟัเฟอร์ if(STA && BUF[0] == 4){ // ตรวจสอบขนาดวา่เป็น mifare หรอืไม่ setTextColor(GLCD_SKY); glcd(4,0,”UUID Size %d Byte”,BUF[0]); // แจง้ขนาด setTextColor(GLCD_GREEN);glcd(6,0,”UUID:”); for(int i=0; i<BUF[0]; i++){ // น�าคา่รหสัทีอ่า่นไดจ้ากการด์หรอืแทก๊มาแสดง setTextColor(GLCD_YELLOW);glcd(6,5+(i*4),”%d “,BUF[i+1]); } }}
ผลลัพธ์การทำางานตัวอย่างนี้จะเป็นการอ่านค่าจากเครื่องอ่าน ตรวจสอบดูว่ามีเครื่องอ่านเชื่อมต่ออยู่หรือไม่ ถ้ามีการเชื่อมจะแสดงเวอร์ชั่นของชิป
จากนั้นจะเป็นการอ่านค่าการ์ดมาเก็บไว้ในบัฟเฟอร์ถ้าตรวจพบว่าการ์ดมีรูปแบบเป็น4ไบต์ตามมาตรฐานของMifareให้นำา
ค่ามาแสดงที่หน้าจอGLCD