33、从零到一:用ESP32和RC522做出了智能门禁

33、从零到一:用ESP32和RC522做出了智能门禁

33、从零到一:用ESP32和RC522做出了智能门禁-寻找资源网
33、从零到一:用ESP32和RC522做出了智能门禁
此内容为付费阅读,请付费后查看
5
立即购买
您当前未登录!建议登陆后购买,可保存购买订单
seekresource@163.com
1919588043
QQ1919588043
寻找资源网
微信小店:活生好美
付费阅读

门禁系统:RFID刷卡验证(ESP-IDF v5.5.3 + VSCode)

安全第一!今天我们要打造一个基于ESP32的智能门禁系统,用RFID卡片来控制门锁的开关。这不仅是实用的项目,更是学习RFID通信、电磁锁控制和安全验证的好机会!我们将使用ESP-IDF v5.5.3VSCode中开发,深入理解底层驱动和组件化编程。

1. 项目简介

门禁系统是物联网在安防领域的经典应用。我们的目标是制作一个能够读取RFID卡片、验证权限并控制电磁锁的小型门禁系统。当你刷一张已授权的卡片时,门锁会自动打开;如果是未授权的卡片,则会发出警报。

这个项目将教会你:

  • RFID/NFC通信原理和编程(使用ESP-IDF的SPI驱动)
  • 电磁锁的安全控制(继电器+GPIO)
  • 权限管理和用户验证(数据结构与算法)
  • 状态指示和用户反馈(LED、蜂鸣器)

2. 硬件准备

核心组件

  • ESP32开发板:主控制器(推荐ESP32-S3,但通用ESP32亦可)
  • RC522 RFID模块:用于读取RFID卡片(工作频率13.56MHz)
  • 12V电磁锁:门锁执行机构
  • 继电器模块:用于控制高电压电磁锁(建议使用光耦隔离继电器)
  • LED指示灯:红绿双色,显示验证状态
  • 蜂鸣器:提供声音反馈(有源蜂鸣器最简单)
  • 12V电源适配器:为电磁锁供电(注意电流足够,通常1-2A)
  • 杜邦线:连接各组件

连接示意图

图片[1]-33、从零到一:用ESP32和RC522做出了智能门禁-寻找资源网

引脚连接表

ESP32引脚
外设
说明
GPIO5
RC522-SCK
SPI时钟
GPIO18
RC522-MOSI
SPI主机输出从机输入
GPIO19
RC522-MISO
SPI主机输入从机输出
GPIO21
RC522-SS
SPI片选
GPIO22
RC522-RST
复位引脚
GPIO23
继电器
控制电磁锁
GPIO18
绿色LED
授权通过指示
GPIO19
红色LED
授权失败指示
GPIO17
蜂鸣器
声音反馈

注意:上述引脚仅为示例,实际使用时可根据开发板调整。RC522模块的SPI接口与ESP32的硬件SPI连接即可,不需要特定引脚(但通常使用VSPI默认引脚)。为确保稳定性,建议为RC522提供3.3V电源。

3. 工作原理

RFID技术基础

RFID(Radio Frequency Identification)即射频识别,通过无线电波进行非接触式数据传输。RC522模块使用13.56MHz频率,支持MIFARE系列卡片。当卡片靠近时,模块通过SPI接口将卡片的唯一ID(UID)发送给ESP32。

系统工作流程

  1. 系统启动:初始化SPI、GPIO、RC522模块。
  2. 进入低功耗等待模式(可优化功耗)。
  3. 当卡片靠近时,RC522产生中断或通过轮询检测。
  4. ESP32读取卡片UID,并与预定义的授权列表比对。
  5. 如果匹配成功:
    • 绿色LED亮起
    • 蜂鸣器短响一声
    • 继电器吸合,电磁锁打开(持续3秒)
  6. 如果匹配失败:
    • 红色LED闪烁
    • 蜂鸣器长响报警
    • 门锁保持关闭

4. 软件实现(ESP-IDF v5.5.3)

开发环境准备

  1. 安装VSCode和ESP-IDF插件(如未安装)。
  2. 创建新项目:在VSCode中按 Ctrl+Shift+P,选择“ESP-IDF: New Project”,输入项目名称(如 rfid_doorlock),选择模板(可留空)。
  3. 打开终端,运行 idf.py set-target esp32(根据你的芯片选择)。
  4. 配置项目:idf.py menuconfig,根据需要调整(如串口波特率等)。

项目结构

rfid_doorlock/
├── main/
│   ├── CMakeLists.txt
│   └── main.c
├── CMakeLists.txt
└── sdkconfig

代码实现

我们将直接在 main.c 中实现所有功能。为了清晰,我们会将RFID操作封装成函数。

主文件 main.c

CMakeLists.txt 文件

项目根目录 CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(rfid_doorlock)

main/CMakeLists.txt

idf_component_register(SRCS "main.c"
                    INCLUDE_DIRS ".")

代码说明

  • SPI通信:使用ESP-IDF的 spi_master 驱动,初始化总线并添加设备。
  • RC522底层操作:实现了读写寄存器的函数,以及请求、防冲突、选择等基本命令。为了简化,省略了CRC计算,实际应用中可加入CRC校验。
  • 授权列表:硬编码在代码中,实际项目可将卡片UID存储在SPIFFS或NVS中。
  • 状态指示:通过GPIO控制LED和蜂鸣器。
  • 循环逻辑:不断轮询是否有卡片靠近,发现后读取UID并验证。

5. 编译与烧录

  1.  在VSCode中打开项目文件夹。
  2. 点击底部状态栏的“ESP-IDF Build”或按 Ctrl+E B 编译。
  3. 连接ESP32到电脑,选择正确的串口(Ctrl+E P 设置端口)。
  4. 点击“ESP-IDF Flash”或按 Ctrl+E F 烧录。
  5. 烧录完成后,打开串口监视器(Ctrl+E M)查看输出。

6. 安全增强功能

动态授权管理

使用ESP-IDF的Wi-Fi和HTTP服务器组件,可以通过网页动态管理授权卡片。大致步骤:

  1. 1. 在 menuconfig 中启用Wi-Fi和HTTP服务器。
  2. 2. 初始化Wi-Fi STA模式或创建SoftAP
  3. 3. 启动HTTP服务器,提供REST API用于添加/删除卡片。
  4. 4. 将卡片列表存储在NVS中,实现持久化。

示例代码片段:

// 初始化NVS
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
    ESP_ERROR_CHECK(nvs_flash_erase());
    ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);

// 初始化Wi-Fi(省略)
// 启动HTTP服务器(省略)

防暴力破解

  • 记录连续失败次数,达到阈值后锁定一定时间。
  • 使用看门狗定时器防止程序跑飞。
  • 将所有访问日志通过UART输出或保存到文件。

加密通信

RC522本身没有加密,如果卡片存储敏感数据,可以使用MIFARE的加密认证功能。但通常只读取UID,安全性较低。

7. 安装与调试

硬件安装要点

  1. 电磁锁供电:确保12V电源能提供足够电流(通常需要1-2A),继电器触点容量应大于电磁锁工作电流。
  2. 继电器选择:选择支持12V DC负载的继电器模块,最好带光耦隔离,避免高压干扰。
  3. RFID天线位置:将读卡器安装在便于刷卡的位置,避免金属干扰(金属会吸收RF信号)。
  4. 共地:确保ESP32的GND与12V电源的GND相连,否则继电器可能无法正常工作。

调试步骤

  1. 单独测试RC522:先运行简单的读取UID程序,确保模块能正确识别卡片。
  2. 测试继电器和电磁锁:用GPIO手动控制继电器,观察电磁锁是否动作。
  3. 集成测试:刷已授权卡片,观察所有反馈是否正常;刷未授权卡片,观察报警。
  4. 异常处理:测试卡片读取失败时的系统行为,添加超时和复位机制。

8. 扩展应用

这个基础门禁系统可以扩展为:

  • 多用户管理系统:不同卡片赋予不同权限(如管理员卡可添加/删除卡片)。
  • 时间限制访问:结合RTC,只在特定时间段允许进入。
  • 远程监控:通过MQTT将刷卡记录上传到云端,手机APP接收通知。
  • 集成摄像头:刷卡时触发拍照,通过ESP32-CAM实现。
  • 云同步:多地点门禁系统统一管理,卡片数据云端下发。

9. 注意事项

⚠️ 安全警告

  • 电磁锁涉及高电压,操作时务必断电,注意绝缘。
  • 此项目仅供学习和实验,请勿用于重要安防场所,避免因系统故障导致无法开门。
  • 实际应用中需考虑备用电源(如电池)和机械钥匙作为应急开门方式。

💡 优化建议

  • 使用ESP32的深度睡眠模式,通过RC522的中断唤醒,降低功耗,适合电池供电场景。
  • 将授权卡片信息存储在NVS中,方便通过OTA更新。
  • 添加看门狗定时器,防止程序卡死。

10. 总结

通过本项目,你学会了如何使用ESP-IDF v5.5.3 在VSCode中开发一个完整的RFID门禁系统。从硬件连接到底层SPI驱动,再到业务逻辑,每一步都体现了嵌入式开发的精髓。RFID门禁只是物联网安防的一个小例子,但掌握这些基础后,你可以构建更复杂的系统。

下一期我们将制作遥控小车,学习电机控制和无线通信的结合应用,敬请期待!

本文使用ESP-IDF v5.5.3 在 VSCode 中编写。RFID部分实现了基本的卡片读取和验证,可根据需要进一步优化和扩展。

来自:老才科技学习记录

原创:老才

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
相关推荐
评论 抢沙发

请登录后发表评论

    暂无评论内容