这是一次真实可复现的智能门锁改造记录。起因很简单:传统门锁太麻烦,而市面上的智能门锁要么太贵、要么不开放。
所以我决定:
- 用 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程序
安装库

安装串口驱动
开发板与IDE通讯,IDE写入程序到开发板,如果是买的和我同款开发板,可以下载以下地址驱动,如果是其他开发板,一般购买详情页有相关资料的下载地址,可以下载。
通过网盘分享的文件:ch340驱动
链接: https://pan.baidu.com/s/1jEzqaJpXa2Sio2-H7DcaVA?pwd=ngbr
提取码: ngbr
创建远程控制账号
-
打开小程序

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

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

修改代码cconst char* mqtt_broker = "mqtt.zkphp.com"; const int mqtt_port = 2883; const char* mqtt_user = "小程序获取的用户名"; const char* mqtt_password = "小程序获取密码";
写入程序
必须完成以上所有步骤。然后用数据线将开发板连接到电脑上。
-
选择开发板

-
选择串口

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

-
复制完整代码 查看完整代码
-
修改代码中WiFi密码
// WiFi 配置
const char* ssid = "WiFi账号";
const char* password = "密码";
-
上传代码

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

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

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

可以将uid添加到代码中,将IC卡设置为授权卡片。代码如下:
c
const uint64_t ALLOWED_IDS[] = {0x03C09EEE, 0x1D193DE0};
完整代码
https://www.zkphp.com/blog/f73681613398be0a848f91fc472a31f2/#code