ESP32与RFID读写器通信的完整案例

2025-06发布4次浏览

在物联网(IoT)领域中,ESP32和RFID技术的结合应用非常广泛。通过ESP32与RFID读写器通信,可以实现诸如门禁系统、资产跟踪、库存管理等应用场景。本文将详细介绍如何通过ESP32与RFID读写器进行通信,并提供一个完整的案例。

1. 硬件准备

为了实现ESP32与RFID读写器的通信,我们需要以下硬件:

  • ESP32开发板(如ESP32-WROOM-32)
  • RFID读写模块(如MFRC522)
  • RFID卡或标签
  • 杜邦线若干

2. 硬件连接

MFRC522模块通常通过SPI协议与微控制器通信。以下是ESP32与MFRC522模块的标准连接方式:

MFRC522 引脚ESP32 引脚
SDA (SS)GPIO5
MOSIGPIO23
MISOGPIO19
SCKGPIO18
RSTGPIO22
GNDGND
VCC3.3V

确保所有连接正确无误后,继续进行软件部分的配置。

3. 软件环境搭建

3.1 安装Arduino IDE

首先需要安装Arduino IDE,并添加ESP32的支持。具体步骤如下:

  1. 下载并安装最新版本的Arduino IDE。
  2. 打开Arduino IDE,进入文件 -> 首选项,在“附加开发板管理器网址”中添加以下URL:
    https://dl.espressif.com/dl/package_esp32_index.json
    
  3. 进入工具 -> 开发板 -> 开发板管理器,搜索“esp32”,安装ESP32的相关库。

3.2 安装MFRC522库

MFRC522库用于处理与RFID模块的通信。可以通过Arduino IDE的库管理器安装该库:

  1. 进入工具 -> 管理库
  2. 搜索“MFRC522”,选择并安装由Miguel Balboa提供的库。

4. 示例代码

以下是一个完整的示例代码,展示如何使用ESP32读取RFID卡的信息。

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

// 定义SPI接口引脚
#define RST_PIN         22    // MFRC522 RST 引脚
#define SS_PIN          5     // MFRC522 SDA 引脚

MFRC522 rfid(SS_PIN, RST_PIN);  // 创建MFRC522实例

void setup() {
  Serial.begin(9600);           // 初始化串口通信
  SPI.begin();                  // 初始化SPI通信
  rfid.PCD_Init();              // 初始化MFRC522模块

  Serial.println("Scan an RFID tag...");
}

void loop() {
  if (!rfid.PICC_IsNewCardPresent()) {  // 检查是否有新卡存在
    return;
  }

  if (!rfid.PICC_ReadCardSerial()) {     // 读取卡片序列号
    return;
  }

  // 输出卡片UID
  Serial.print("Card UID:");
  for (byte i = 0; i < rfid.uid.size; i++) {
    Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(rfid.uid.uidByte[i], HEX);
  }
  Serial.println();

  rfid.PICC_HaltA();                    // 停止通信
}

5. 流程图

以下是ESP32与RFID读写器通信的基本流程图:

flowchart TD
    A[开始] --> B[初始化SPI和MFRC522]
    B --> C[等待RFID卡接近]
    C --> D{是否检测到新卡?}
    D --是--> E[读取卡片UID]
    D --否--> C
    E --> F[输出UID到串口]
    F --> G[停止通信]
    G --> H[返回等待状态]

6. 注意事项

  • 确保ESP32的SPI引脚与MFRC522模块正确连接。
  • 如果使用外部电源供电,请确保电压范围适合MFRC522模块(通常为3.3V)。
  • 在实际应用中,可以将读取到的UID发送到云端服务器进行验证或存储。