门禁卡、公交卡、校园一卡通、停车场出入卡……这些"滴一下"就能识别的卡片,背后都是RFID技术在工作。
今天要学的就是RFID技术中最经典的应用——用ESP32读取RFID卡的ID。学会了这节课,你就能做出自己的门禁系统、考勤机、智能储物柜!
今天这节课,我们就用ESP32 + MFRC522模块,读取RFID卡片的ID号!
第一步:找到课程,看看成品效果
打开逗脑IDE,点击顶部“文档”,在“课程” → “ESP32 + MicroPython”分类下,找到RFID无线射频卡 1-读取卡的id这节课。
打开课件,你会看到本节课的最终效果:把RFID卡片靠近读卡模块,终端立刻打印出卡片的ID号(如rfid卡片的id: 0x1a2b3c4d),移开卡片后停止。
第二步:什么是RFID?
RFID(Radio Frequency Identification),中文叫无线射频识别,是一种非接触式的自动识别技术。
简单理解:
卡片里有一个小芯片和天线,读卡器发出无线电波,卡片通过电波获得能量,然后把存储的ID信息发回给读卡器。
核心特点:
| 参数 | 说明 |
|---|---|
| 工作频率 | 13.56MHz(高频) |
| 读卡距离 | 0~5cm |
| 接口 | SPI(4根线) |
| 支持卡片 | Mifare One(M1卡)、S50、S70等 |
| 典型应用 | 门禁、公交卡、校园卡 |
第三步:动手接线
MFRC522模块使用SPI接口,接线如下:
| MFRC522引脚 | 连接ESP32 | 说明 |
|---|---|---|
| VCC | 3.3V | 电源正极(必须3.3V!) |
| GND | GND | 电源地 |
| SCK | GPIO18 | SPI时钟 |
| MOSI | GPIO23 | 主机输出 |
| MISO | GPIO19 | 主机输入 |
| SDA/CS | GPIO5 | 片选信号 |
📌 重要提示:VCC一定要接3.3V!接5V会烧坏模块。
第四步:上传驱动文件
在运行代码之前,需要先将MFRC522驱动文件mfrc522.py上传到ESP32。
操作步骤:
在MicroPython端新建mfrc522.py文件,将课件中提供的完整驱动代码复制进去,然后上传到ESP32。
这个驱动文件的作用:
- 封装了MFRC522模块的底层通信细节
- 提供了读卡、写卡、防冲突检测等功能的接口
第五步:代码——读取卡片ID
fromtimeimportsleep_msfrommachineimportPin,SPIfrommfrc522importMFRC522# 创建SPI引脚对象sck=Pin(18,Pin.OUT)mosi=Pin(23,Pin.OUT)miso=Pin(19,Pin.OUT)# 创建SPI对象spi=SPI(baudrate=100000,polarity=0,phase=0,sck=sck,mosi=mosi,miso=miso)# 创建片选引脚sda=Pin(5,Pin.OUT)defread_id():# 1. 创建RFID操作对象rfid=MFRC522(spi,sda)# 2. 循环读取数据whileTrue:# 3. 复位应答,检测是否有卡片靠近stat,tag_type=rfid.request(rfid.REQIDL)ifstat==rfid.OK:# 4. 防冲突检测,提取卡片IDstat,raw_uid=rfid.anticoll()ifstat==rfid.OK:_id="0x%02x%02x%02x%02x"%(raw_uid[0],raw_uid[1],raw_uid[2],raw_uid[3])print("rfid卡片的id:",_id)sleep_ms(500)if__name__=="__main__":read_id()代码逻辑:
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 创建SPI对象 | 配置SPI通信参数 |
| 2 | 创建MFRC522对象 | 初始化读卡模块 |
| 3 | request() | 检测是否有卡片靠近 |
| 4 | anticoll() | 防冲突检测,读取卡片ID |
| 5 | 格式化打印 | 将ID格式化为十六进制字符串 |
第六步:保存运行,刷卡测试!
保存代码到开发板,命名 test_rfid.py
点击运行按钮,终端开始等待卡片靠近。
试试看:
- 把RFID卡片靠近模块的天线区域(距离0~5cm)
- 终端立刻打印:
rfid卡片的id: 0x1a2b3c4d - 移开卡片,再放回去,再次打印相同的ID
RFID能做什么?
| 应用场景 | 用途 |
|---|---|
| 门禁系统 | 刷卡开门,只有授权卡能进 |
| 考勤系统 | 刷卡签到,记录员工/学生出勤 |
| 智能储物柜 | 刷卡开柜,安全存放物品 |
| 停车场管理 | 刷卡出入,自动计费 |
| 会员卡系统 | 刷卡识别会员身份 |
| 智能家居 | 刷卡开灯/开空调 |
结合之前学过的课程
| 组合 | 效果 |
|---|---|
| RFID + 继电器 | 刷卡控制门锁开关 |
| RFID + OLED | 刷卡后屏幕显示ID和欢迎信息 |
| RFID + 蜂鸣器 | 刷卡成功/失败发出提示音 |
| RFID + WiFi | 刷卡记录上传到服务器 |
| RFID + MQTT | 刷卡触发远程通知 |
常见问题
Q:为什么读不到卡?
A:检查以下几点:
- VCC是否接3.3V(接5V会烧坏)
- 卡片是否靠近天线区域(0~5cm内)
- 接线是否正确(尤其是MISO和MOSI不要接反)
Q:能读手机NFC吗?
A:部分手机的NFC可以模拟M1卡,但不是所有手机都支持。用标准M1卡测试最稳定。
Q:能修改卡片里的数据吗?
A:可以,MFRC522支持读写M1卡的扇区数据。这个内容会在下一节课讲解。
全程回顾
| 步骤 | 操作 | 效果 |
|---|---|---|
| 找到课程 | 文档→课程→ESP32+MicroPython→RFID读取卡ID | 了解RFID原理 |
| 上传驱动 | 上传mfrc522.py到ESP32 | 驱动就绪 |
| 动手接线 | VCC→3.3V, GND→GND, SCK→GPIO18, MOSI→GPIO23, MISO→GPIO19, SDA→GPIO5 | 硬件就位 |
| 打开代码 | 点击“打开”按钮 | 代码进入编辑器 |
| 保存运行 | Ctrl+S → 选择ESP32 → 运行 | 开始等待卡片 |
| 刷卡测试 | 卡片靠近模块 | 终端打印卡片ID! |