ESP-IDF: ESP32 MFRC522 RFID (VS Code)
[env:esp32doit-devkit-v1]
platform = espressif32
board = esp32doit-devkit-v1
framework = arduino
monitor_speed = 115200
; **重要:移除 RST 腳位的 build_flags**
; 因為新的 MFRC522 函式庫在程式碼中定義 RST 腳位,而不是在 build_flags 中。
; build_flags = -D MFRC522_RST_PIN=27
build_flags =
; *** 修正函式庫:切換到穩定且兼容的 MFRC522 函式庫 (ID: 602) ***
lib_deps =
MFRC522@^1.4.0
#include <Arduino.h>
#include <SPI.h> // 必須包含 SPI 函式庫
#include <MFRC522.h> // *** 變更為新的函式庫標頭檔 ***
// 定義 MFRC522 的腳位
// 請確保您的接線如下:
// SDA/SS -> GPIO 5
// RST -> GPIO 27
#define SS_PIN 5
#define RST_PIN 27
/***
在您上傳程式前,請確保 MFRC522 模組已按照以下腳位連接到您的 ESP32 開發板:
MFRC522 Pin 函式 ESP32 GPIO Pin (預設 SPI & 自訂 SS/RST)
SDA(SS) Slave Select GPIO 5 (程式碼中定義)
SCK Serial Clock GPIO 18 (ESP32 預設 SPI SCK)
MOSI Master Out Slave InGPIO 23 (ESP32 預設 SPI MOSI)
MISO Master In Slave Out GPIO 19 (ESP32 預設 SPI MISO)
RST Reset GPIO 27 (程式碼中定義)
VCC 電源 3.3V (重要:MFRC522 應使用 3.3V)
GND 接地 GND
***/
// 創建 MFRC522 實例 (使用 SS 和 RST 腳位定義)
MFRC522 mfrc522(SS_PIN, RST_PIN);
void setup() {
Serial.begin(115200);
while (!Serial) {
delay(10);
}
// 初始化 SPI 匯流排
SPI.begin();
// 初始化 MFRC522 讀卡器
mfrc522.PCD_Init();
Serial.println(F("--- MFRC522 讀卡器初始化成功 ---"));
Serial.println(F("請將 RFID 卡片或標籤靠近讀取器..."));
}
void loop() {
// 檢查是否有新的卡片存在
if (!mfrc522.PICC_IsNewCardPresent()) {
return;
}
// 選擇一張卡片
if (!mfrc522.PICC_ReadCardSerial()) {
return;
}
Serial.println(F("\n=================================="));
Serial.println(F(">>> 偵測到卡片 <<<"));
// 輸出 PICC Type
Serial.print(F("PICC Type: "));
// 獲取卡片類型
MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
// **將卡片類型轉換為可讀字串 (修正函數名稱)**
Serial.println(mfrc522.PICC_GetTypeName(piccType)); // <-- 這裡已修正
// 輸出 UID
Serial.print(F("UID (HEX): "));
for (byte i = 0; i < mfrc522.uid.size; i++) {
// 以 16 進位輸出每個位元組
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
}
Serial.println();
// 停止卡片通訊
mfrc522.PICC_HaltA();
delay(1000);
Serial.println(F("=================================="));
}





沒有留言:
張貼留言