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

313 阅读3分钟

原文:www.zkphp.com/blog/f73681…

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

所以我决定:

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

一、这个项目能做什么?

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

  • 📡 刷 IC 卡开锁(NFC)

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

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

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

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


二、整体方案与架构

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


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

核心思想只有一句话:

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

三、准备

1.硬件

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

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

.硬件连接

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

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教程

安装库

image.png

安装串口驱动

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

通过网盘分享的文件:ch340驱动 链接: pan.baidu.com/s/1jEzqaJpX… 提取码: ngbr

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

image.png

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

image.png

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

image.png

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

写入程序

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

  1. 选择开发板

image.png

  1. 选择串口

image.png

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

image.png

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

  1. 修改代码中WiFi密码
// WiFi 配置

const char* ssid = "WiFi账号";

const char* password = "密码";

6. 上传代码

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

image.png

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

image.png

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

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

const uint64_t ALLOWED_IDS[] = {0x03C09EEE, 0x1D193DE0};

完整代码

查看完整代码