RFID/NFC Interfacing with POPBOT-XT
เครื่องอ่าน NFC/RFID ที่เราจะติดต่อกันนี้ใช้ชิปเบอร์ยอดนิยม PN532 ซึ่งปกติชิปตัวนี้จะอยู่ ในเครื่องโทรศัพท์สมาร์ทโฟน ที่ติดตั้ง NFC โดยจะทำ�หน้าที่ทั้งอ่านเขียนการ์ด รวมถึง สื่อสารกันระหว่างเครื่องโทรศัพท์ที่มี NFC ด้วยกัน เครื่องอ่าน NFC/RFID นี้จะมาพร้อมขดลวดเสาอากาศย่านความถี่ 13.56MHz ซึ่งใช้งานได้อย่างดีกับการ์ด Mifare Classic ไอซี PN532 ออกแบบมาให้สื่อสารให้ไมโครคอนโทรลเลอร์ ได้หลายรูปแบบไม่ว่าจะเป็นการสื่อสารอนุกรม, การสื่อสารแบบ SPI หรือ I2C บัส โดยในที่นี้จะเลือกใช้การสื่อสารแบบ I2C บัสกับ POP-BOT XT ซึ่งต้องขอบคุณ Ladayada/Adafruit (http://learn.adafruit.com/adafruit-pn532-rfid-nfc/arduino-library) และ elechouse.com http://www.elechouse.com/elechouse/index.php?main_page=product_info&cPath=90_93&products_id=2205 สำ�หรับไลบรารี่ที่ช่วยให้การติดต่อกับเครื่องอ่านเป็นเรื่องง่าย สำ�หรับบอร์ดควบคุม ตามตัวอย่างนี้เลือกใช้บอร์ด POPXT หรือจะใช้บอร์ด Unicon ก็ได้โดยการทำ�งานของบอร์ดทั้ง สองนี้จะเหมือนกัน โดยเน้นการแสดงผลค่าที่อ่านได้ที่หน้าจอกราฟิก LCD
การเชื่อมต่อ การเชื่อมต่อบอร์ด POP-BOT XT เข้ากับเครื่องอ่าน 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; // ใช ้คลาส NFC unsigned 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