Arduino RFID-RC522 讀取識別碼

發表日期:
2023.10.11
/
分類:
RFID-RC522 是一個 RFID 的讀取器,可以配合 Arduino 開發板使用。將這篇文章提供的程式碼燒錄到 Arduino 中,在感應到 RFID 標籤時將會透過序列埠輸出標籤的識別碼(UID)。 MFRC522 是一

RFID-RC522 是一個 RFID 的讀取器,可以配合 Arduino 開發板使用。將這篇文章提供的程式碼燒錄到 Arduino 中,在感應到 RFID 標籤時將會透過序列埠輸出標籤的識別碼(UID)。

MFRC522 是一個用於 RFID-RC522 的函式庫,請先於 Library Manager 中完成安裝。

RFID-RC522 總共有八個腳位,分別是 SDA、SCK、MOSI、MISO、IRQ、GND、RST、3.3V。請以下列規則進行連接:

  • SDA → 10 腳位

  • SCK → 13 腳位

  • MOSI → 11 腳位

  • MISO → 12 腳位

  • IRQ → 空接(不管它)

  • GND → Arduino GND

  • RST → 9 腳位

  • 3.3V → Arduino 3.3V

程式碼:(有修改過,僅保留十六進位格式輸出)

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9
 
MFRC522 rfid(SS_PIN, RST_PIN);

MFRC522::MIFARE_Key key; 

byte nuidPICC[4];

void setup() { 
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();

  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }

  Serial.println(F("This code scan the MIFARE Classsic NUID."));
  Serial.print(F("Using the following key:"));
  printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
  Serial.println();
}
 
void loop() {
  if ( ! rfid.PICC_IsNewCardPresent())
    return;

  if ( ! rfid.PICC_ReadCardSerial())
    return;

  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);

  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&  
    piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
    piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    Serial.println(F("Your tag is not of type MIFARE Classic."));
    return;
  }

  printHex(rfid.uid.uidByte, rfid.uid.size);
  Serial.println();

  rfid.PICC_HaltA();

  rfid.PCD_StopCrypto1();
}

void printHex(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : "");
    Serial.print(buffer[i], HEX);
  }
}

原始碼來源:rfid/examples/ReadNUID/ReadNUID.ino at master · miguelbalboa/rfid (github.com)

comments powered by Disqus