Arduino有提供 RFID RC522的模組可以使用此模組來讀取RFID卡片的UID值以及修改,本文將先介紹如何讀取UID值。
RFID-RC522模組通訊為SPI介面,分別有NSS、MISO、MOSI、SCK四支腳位,透過Arduino的官網的SPI介紹可知道以定義好的腳位,
將MOSI接至11腳、MISO接至12腳、SCK接至13腳、NSS接至10腳(可自行定義)、RST接至9(可自行定義),接線完成圖如下,
程式設計:需要使用到SPI.h和MFRC522.h這兩個函式庫,以下程式從函式庫範例 ReadNUID.ino 簡化修改,
#include <SPI.h> //引入SPI函式庫 #include <MFRC522.h> //引入函式庫 #define SS_PIN 10 //設定NSS腳位 #define RST_PIN 9 //設定RST腳位 MFRC522 rfid(SS_PIN, RST_PIN); void setup() { Serial.begin(9600);//設定鮑率為9600 SPI.begin(); //初始化SPI rfid.PCD_Init(); // 初始化MFRC522模組 } void loop() { if ( ! rfid.PICC_IsNewCardPresent())//檢查是否有新的卡片 return; if ( ! rfid.PICC_ReadCardSerial())//檢查是否有讀取到卡片的UID return; Serial.print(F("PICC type: ")); MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);//讀取卡片的類型 Serial.println(rfid.PICC_GetTypeName(piccType)); Serial.println(F("A new card has been detected.")); Serial.println(F("The NUID tag is:")); Serial.print(F("In hex: ")); printHex(rfid.uid.uidByte, rfid.uid.size);//呼叫副程式 並將UID和UID長度傳送至printHex()將UID值用十六進制顯示 Serial.println(); Serial.print(F("In dec: ")); printDec(rfid.uid.uidByte, rfid.uid.size);//呼叫副程式 並將UID和UID長度傳送至printDec()將UID值用十進制顯示 Serial.println(); // Halt PICC rfid.PICC_HaltA(); // Stop encryption on PCD rfid.PCD_StopCrypto1(); } void printHex(byte *buffer, byte bufferSize) {//將UID值以十六近制顯示在序列阜監控視窗 for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX); } } void printDec(byte *buffer, byte bufferSize) { //將UID值以十近制顯示在序列阜監控視窗 for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], DEC); } }
上傳完成後,打開序列阜監控視窗,並將卡片放到感區,就可以讀取到卡片的UID和卡片類型!
(2346)
近期留言