MFRC522 X 2
wokwi esp32 程式
這段程式碼的目的是利用 ESP32 控制 2 個 MFRC522 RFID 讀卡機,並在讀取到卡片 UID 時,自動為兩個讀卡機加上不同的 前綴碼 (Leading Code) 進行區隔(rfid1 加 AA:、rfid2 加 BB:)。
關鍵功能與流程拆解
1. 模組腳位與前綴定義
SS_1_PIN (5)與SS_2_PIN (4):SPI 通訊的片選腳位 (CS/SDA)。SPI 匯流排上可以接多個裝置,ESP32 透過切換這兩個腳位的電位來決定要和哪一個讀卡機對話。CARD1_PREFIX ("AA:")與CARD2_PREFIX ("BB:"):讀卡機 1 輸出的字串開頭為AA:,讀卡機 2 輸出的字串開頭為BB:。
2. 自訂讀卡函式 readCard()
這個函式採用引用傳遞 (MFRC522 &mfrc522),可以同時支援兩個讀卡機實體:
偵測與讀取:
PICC_IsNewCardPresent()檢查有無卡片靠近,PICC_ReadCardSerial()嘗試讀取卡片的 UID 序號。若無卡片則直接返回。字串組裝:
先將傳入的前綴字串(如
AA:)存入fullCode。用
for迴圈將 UID 的每個 byte 轉成 16 進位(HEX),並處理小於0x10的補零(例如05而非5),用冒號:串接起來。toUpperCase():統一將 Hex 英文字母轉為大寫(如aa:bb轉成AA:BB)。
停止通訊與防重複:
PICC_HaltA()與PCD_StopCrypto1():讓卡片進入休眠,結束目前的加密通訊。delay(1000):讀取後暫停 1 秒,防止同一次感應被重複觸發多次。
3. 初始化 setup()
設定 Serial 傳輸埠傳輸速率為
115200baud。SPI.begin()初始化 ESP32 的 SPI 匯流排(預設腳位:SCK=18, MISO=19, MOSI=23)。分別呼叫
rfid1.PCD_Init()與rfid2.PCD_Init()完成兩個讀卡機晶片的初始化。
4. 主迴圈 loop()
程式會不斷交替輪詢呼叫
readCard(rfid1, CARD1_PREFIX)與readCard(rfid2, CARD2_PREFIX)。只要有任何一台讀卡機感應到卡片,Serial Monitor 就會印出結果,例如:
讀卡機 1 感應到 UID 為
01:02:03:04的卡片,印出:感應結果 -> AA:01:02:03:04讀卡機 2 感應到同一張卡片,印出:
感應結果 -> BB:01:02:03:04


沒有留言:
張貼留言