2025年11月30日 星期日

ESP-IDF: ESP32 MFRC522 RFID (VS Code)

 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("=================================="));
}


沒有留言:

張貼留言

ESP32 (ESP-IDF in VS Code) MFRC522 + MQTT + PYTHON TKinter +SQLite

 ESP32 (ESP-IDF in VS Code) MFRC522 + MQTT + PYTHON TKinter +SQLite  ESP32 VS Code 程式 ; PlatformIO Project Configuration File ; ;   Build op...