自制智能门锁:NFC 刷卡 + 小程序远程开锁(完整实战记录)

这是一次真实可复现的智能门锁改造记录。起因很简单:传统门锁太麻烦,而市面上的智能门锁要么太贵、要么不开放。

所以我决定:

  • 用 ESP8266 自己做一把
  • 支持 NFC 本地刷卡
  • 支持 微信小程序远程开锁
  • 成本可控、逻辑透明、代码完全可读

一、这个项目能做什么?

在开始之前,先明确目标功能:

  • 📡 刷 IC 卡开锁(NFC)

  • 📱 微信小程序远程开锁(MQTT)

  • 🔁 自动回位关锁(防止舵机空转)

  • ⚙️ 非阻塞网络设计,刷卡与联网互不影响

适用场景:老旧门锁、宿舍门、出租屋、工作室内门等。


二、整体方案与架构

先看整体结构,这一步能帮你快速判断这个方案是否适合你。

复制代码
┌────────┐        NFC         ┌──────────┐
   IC卡     ────────────────▶    RC522    
└────────┘                    └────┬─────┘
                                   │ SPI
┌──────────────┐   WiFi + MQTT ┌───▼────────┐      PWM        ┌─────────┐
  微信小程序      ◀────────────▶   ESP8266      ─────────────▶   MG90S    
└──────────────┘                 D1 UNO R3                      舵机     
                               └────────────┘                 └─────────┘

核心思想只有一句话:

ESP8266 作为中枢,NFC 与 MQTT 都只是"开门信号源"。

三、准备

1.硬件

硬件 说明
D1 UNO R3 ESP8266 主控(自带 WiFi) [图示](#硬件 说明 D1 UNO R3 ESP8266 主控(自带 WiFi) 图示 MFRC-522 RFID IC 卡模块(⚠️3.3V) 图示 MG90S 180° 金属齿轮舵机 图示 杜邦线 公对母若干 图示)
MFRC-522 RFID IC 卡模块(⚠️3.3V) [图示](#硬件 说明 D1 UNO R3 ESP8266 主控(自带 WiFi) 图示 MFRC-522 RFID IC 卡模块(⚠️3.3V) 图示 MG90S 180° 金属齿轮舵机 图示 杜邦线 公对母若干 图示)
MG90S 180° 金属齿轮舵机 [图示](#硬件 说明 D1 UNO R3 ESP8266 主控(自带 WiFi) 图示 MFRC-522 RFID IC 卡模块(⚠️3.3V) 图示 MG90S 180° 金属齿轮舵机 图示 杜邦线 公对母若干 图示)
杜邦线 公对母若干 [图示](#硬件 说明 D1 UNO R3 ESP8266 主控(自带 WiFi) 图示 MFRC-522 RFID IC 卡模块(⚠️3.3V) 图示 MG90S 180° 金属齿轮舵机 图示 杜邦线 公对母若干 图示)

⚠️ RC522 只能接 3.3V,接 5V 很容易直接烧模块。

2.硬件连接

这是最容易出问题的一步,直接给出完整对照表。

D1 UNO R3 舵机 RC522
GND 黑线 GND
5V 红线 ---
D10 黄线(PWM) ---
3.3V --- VCC
D15 --- RST
D14 --- SDA / SS
D11 --- MOSI
D12 --- MISO
D13 --- SCK

舵机颜色不统一,以商品说明为准(常见:红=VCC,黑=GND,黄=信号)。

IC卡感应模块的IRQ不用连接

3.软件 IDE

安装IDE

Arduino IDE 下载地址 ,用于将控制代码写入开发板

安装ESP8266程序

参考# Arduino IDE 离线安装ESP8266教程

安装库
安装串口驱动

开发板与IDE通讯,IDE写入程序到开发板,如果是买的和我同款开发板,可以下载以下地址驱动,如果是其他开发板,一般购买详情页有相关资料的下载地址,可以下载。

通过网盘分享的文件:ch340驱动

链接: https://pan.baidu.com/s/1jEzqaJpXa2Sio2-H7DcaVA?pwd=ngbr

提取码: ngbr

创建远程控制账号
  1. 打开小程序

    2. 创建一个锁,然后点击【使用教程】

    3. 在教程页面复制账号和密码

    修改代码

    c 复制代码
    const char* mqtt_broker = "mqtt.zkphp.com";
    const int mqtt_port = 2883;	
    const char* mqtt_user = "小程序获取的用户名";	
    const char* mqtt_password = "小程序获取密码";

写入程序

必须完成以上所有步骤。然后用数据线将开发板连接到电脑上。

  1. 选择开发板

  2. 选择串口

  3. 打开串口监视器,然后设置比特率为9600

  4. 复制完整代码 查看完整代码

  5. 修改代码中WiFi密码

    // WiFi 配置

    const char* ssid = "WiFi账号";

    const char* password = "密码";

  6. 上传代码

    如果在串口监视器中见到以下信息,则表示WiFi和mqtt远程控制连接成功。

    点击微信小程序解锁按键,串口监视器中见到以下信息,则表示mqtt远程控制成功。

ic卡贴近感应模块,串口监视器中见到以下信息,则表示IC卡感应模块功能正常

可以将uid添加到代码中,将IC卡设置为授权卡片。代码如下:

c 复制代码
	const uint64_t ALLOWED_IDS[] = {0x03C09EEE, 0x1D193DE0};

完整代码

https://www.zkphp.com/blog/f73681613398be0a848f91fc472a31f2/#code

相关推荐
国科安芯2 小时前
基于RISC-V架构的抗辐照MCU在空间EDFA控制单元中的可靠性分析
单片机·嵌入式硬件·性能优化·架构·risc-v·安全性测试
一路往蓝-Anbo3 小时前
第 7 章:内存地图 (Memory Map) 深度设计——DDR 与 SRAM
linux·stm32·单片机·嵌入式硬件·网络协议
一路往蓝-Anbo4 小时前
第 8 章:M33 领航——引导 A35 加载 U-Boot 与 Linux 内核
linux·运维·服务器·stm32·单片机·嵌入式硬件·网络协议
一路往蓝-Anbo5 小时前
第 6 章:GPIO 与外部中断——M33 掌控下的 LED 与按键响应
linux·stm32·单片机·嵌入式硬件
蓝黑20206 小时前
从经纬度获取地理信息以及从地名获取经纬度
小程序
LCG元6 小时前
直流电机闭环控制:STM32F1 PWM+ADC电流采集,PID调速实战
stm32·单片机·嵌入式硬件
z20348315209 小时前
如何使用Micropython进行单片机开发(一)
单片机·嵌入式硬件·micropython
7yewh14 小时前
AM57X Processor SDK Linux - run Installer
linux·嵌入式硬件·硬件架构·嵌入式
光子物联单片机15 小时前
STM32传感器模块编程实践(十八)DIY电子游戏机模型
stm32·单片机·嵌入式硬件
吴声子夜歌15 小时前
小程序——逻辑层
小程序